ฟังก์ชันขัดจังหวะซอฟต์แวร์เทียบกับ


10

หลังจากทำงานกับ MCU มาประมาณ 3 ปีฉันก็ไม่รู้ว่าการใช้อินเตอร์รัปต์ซอฟต์แวร์คืออะไร ฉันทำงานหลายอย่างด้วยSTM32และฉันไม่เคยใช้งานอินเตอร์รัปต์ซอฟต์แวร์ อันที่จริงนี่เป็นคำถามใหญ่สำหรับฉัน:

ทำไมเมื่อเราสามารถใช้ฟังก์ชั่นง่าย ๆ ในการทำงานเราควรใช้ซอฟต์แวร์ขัดจังหวะหรือไม่ ซอฟต์แวร์ขัดจังหวะและฟังก์ชั่นต่างกันอย่างไร?

ทุกครั้งที่คุณต้องการคุณสามารถเรียกฟังก์ชั่น (ที่คุณเขียนสำหรับงานของคุณ) ควรจะมีประโยชน์บางอย่างในการใช้ซอฟต์แวร์ขัดจังหวะแทนที่จะเป็นฟังก์ชั่นที่เรียบง่าย ฉันไม่แน่ใจ แต่ฉันคิดว่ามีประโยชน์สำหรับการขัดจังหวะโดยซอฟต์แวร์: คุณสามารถกำหนดลำดับความสำคัญสำหรับการขัดจังหวะซอฟต์แวร์จากนั้นคุณสามารถให้ความสำคัญกับการขัดจังหวะของซอฟต์แวร์เพื่อหลีกเลี่ยงการขัดจังหวะการทำงานของฮาร์ดแวร์


1
ฉันคิดว่าจุดประสงค์หลักสำหรับการใช้การขัดจังหวะคือคุณสามารถทำงานอื่น ๆ ที่สำคัญได้ในขณะที่กำลังรอให้มีสิ่งอื่นเกิดขึ้นและเมื่อการกำหนดเวลาไม่คงที่เสมอไป ฉันคิดว่ามันเร็วกว่าการสำรวจในกรณีส่วนใหญ่เล็กน้อย
MrPhooky

1
@MrPhooky นั่นคือฮาร์ดแวร์ขัดจังหวะคุณกำลังพูดถึง OP กำลังพูดถึงซอฟต์แวร์ขัดจังหวะ
brhans

คำตอบ:


19

ความแตกต่างที่สำคัญระหว่างฟังก์ชั่นและซอฟต์แวร์ขัดจังหวะคือสิ่งที่เป็นที่รู้จักกันในบริบท

  • ฟังก์ชั่นทำงานในบริบทของโปรแกรมหลักของคุณ
  • การขัดจังหวะจะทำงานภายในบริบทของตัวจัดการขัดจังหวะ

ในระบบที่เรียบง่ายนี่อาจไม่แตกต่างกันจริงและการขัดจังหวะของซอฟต์แวร์อาจถูกใช้เป็นวิธีที่สะดวกในการให้ไลบรารีรูทีนที่เข้ารหัสยากใน ROM - คุณไม่จำเป็นต้องรู้ที่อยู่ของชุดคำสั่งทุกรหัสเฉพาะรหัส ID และ จุดเข้าหลัก ทำให้โค้ดของคุณพกพาได้มากกว่าเดิม

อย่างไรก็ตามในระบบที่ซับซ้อนมากขึ้นขัดจังหวะซอฟต์แวร์อาจทำงานในสภาพแวดล้อมที่แตกต่างกันอย่างสิ้นเชิงที่รู้จักกันในบริบทเคอร์เนล โดยทั่วไปแอปพลิเคชันของคุณจะทำงานในบริบทผู้ใช้ที่ได้รับการป้องกันซึ่งมีการ จำกัด การเข้าถึงทรัพยากร เฉพาะเมื่อทำงานในบริบทของเคอร์เนลคุณสามารถทำงานที่ซับซ้อนมากขึ้นได้ - บางระบบ จำกัด แม้แต่คำสั่งที่สามารถดำเนินการได้ดังนั้นคุณต้องมีกลไกในการเรียกรหัสในบริบทของเคอร์เนล - และสำหรับการใช้งานอินเตอร์รัปต์


1
นอกจากนี้อินเทอร์รัปต์สามารถหยุดความคืบหน้าของโปรแกรมโดยพลการเพื่อให้ระบบสามารถทำอย่างอื่นได้ (เช่นการขัดจังหวะฮาร์ดแวร์) โปรแกรมของคุณไม่จำเป็นต้องคำนึงถึงสิ่งนี้เนื่องจากในมุมมองของโปรแกรมสถานะของฟังก์ชันจะไม่เปลี่ยนแปลงเมื่อเกิดการขัดจังหวะ สำหรับระบบเก่านี่คือวิธีที่โปรแกรม TSR (Terminate / Stay Resident) จำลองการทำงานหลายอย่างพร้อมกันโดยการปิดการเชื่อมต่อตัวจับเวลา / นาฬิกา แม้จะไม่มีระดับ IOPL ก็ยังมีประโยชน์ที่จะพูดรักษานาฬิการะบบให้ทันสมัยอยู่เสมอ
phyrfox

4
อาจจะทราบด้วยว่า "การขัดจังหวะของซอฟต์แวร์" นั้นเรียกว่า "การขัดจังหวะแบบซิงโครนัส" เนื่องจากรหัสแอปพลิเคชันรู้ว่าเมื่อใดและเหตุใดการขัดจังหวะดังกล่าวจึงเกิดขึ้นตรงข้ามกับ "การขัดจังหวะแบบอะซิงโครนัส แอปพลิเคชันโดยทั่วไปเกิดขึ้นได้ตลอดเวลาในลักษณะที่ไม่พึงประสงค์
JimmyB

@ HannoBinder: ฉันคิดว่า OP กำลังพูดถึงการโพสต์คำขออินเตอร์รัปต์ไปยัง Cortex-M3 vectored interrupt controller; หากรหัสสำหรับการขัดจังหวะลำดับความสำคัญสูงโพสต์ลำดับความสำคัญต่ำกว่าการร้องขอจะถูกเลื่อนออกไปจนกว่าจะถึงเวลาต่อมาเมื่อการขัดจังหวะลำดับความสำคัญสูงกว่าทั้งหมดเสร็จสิ้น
supercat

12

การขัดจังหวะโดยซอฟต์แวร์อาจถูกใช้เพื่อเสร็จสิ้นภารกิจขัดจังหวะโดยมีลำดับความสำคัญต่ำกว่า รหัสเวลาที่สำคัญมักได้รับการจัดลำดับความสำคัญสูงเพื่อหลีกเลี่ยงเวลาแฝงที่มากเกินไป เมื่อเสร็จสิ้นการกำหนดเวลาส่วนสำคัญอาจมีงานเพิ่มเติมที่อาจกำหนดเวลาสำคัญเกินไปสำหรับการวนรอบหลัก แต่ก็ไม่สำคัญเท่ากับการขัดจังหวะลำดับความสำคัญสูงอื่น ๆ การทริกเกอร์ซอฟต์แวร์ที่มีลำดับความสำคัญต่ำนั้นสามารถทำให้สิ่งนี้สำเร็จ

ตัวอย่างเช่นสมมติว่าคุณมีมอเตอร์หลายตัวแต่ละตัวมีตัวจับเวลา อินเทอร์รัปต์ตัวจับเวลาจะได้รับลำดับความสำคัญสูงเพื่อลดขั้นตอนการกระวนกระวายใจให้สั้นที่สุด งานที่สำคัญเกี่ยวกับจังหวะเวลาส่วนใหญ่อาจทำได้ง่ายเพียงแค่ตั้งค่าหรือล้างชีพจรขั้นตอนหรือเลื่อนเฟสเอาต์พุต อาจมีฟังก์ชั่นเพิ่มเติมที่จำเป็นเช่นการคำนวณทางลาดการเร่งความเร็วการประมวลผลเซ็นเซอร์ ฯลฯ เนื่องจากจำเป็นต้องประมวลผลทุกขั้นตอนจึงอาจไม่เหมาะสมในการประมวลผลจาก main () เนื่องจากเวลาหลักของลูปอาจยาวเกินไป งานเพิ่มเติมเหล่านี้อาจถูกประมวลผลโดยซอฟต์แวร์ขัดจังหวะลำดับความสำคัญต่ำกว่าเพื่อไม่ให้เพิ่มเวลาแฝงของช่องสัญญาณ Stepper สำคัญอื่น ๆ

ซอฟต์แวร์ขัดจังหวะและฟังก์ชั่นต่างกันอย่างไร?

ฟังก์ชั่นได้รับการเรียกทันทีจากที่ใดก็ตามที่มันถูกเรียกและไม่เปลี่ยนระดับความสำคัญของการขัดจังหวะในปัจจุบันหากถูกเรียกจากการขัดจังหวะ การขัดจังหวะของซอฟต์แวร์เป็นตัวเรียกการขัดจังหวะที่จะทำให้การเรียกนั้นเกิดการขัดจังหวะเมื่อมีความสำคัญเกิดขึ้น หากมีการแทรกการเรียกฟังก์ชันในตอนท้ายของการขัดจังหวะที่มีลำดับความสำคัญสูงฟังก์ชันจะถูกเก็บไว้ภายในลำดับความสำคัญสูงนั้น ด้วยการทริกเกอร์ซอฟต์แวร์ที่มีลำดับความสำคัญต่ำกว่าขัดจังหวะจากนั้นกลับมาจากการขัดจังหวะลำดับความสำคัญสูงฟังก์ชันการทำงานจะถูกเรียกใช้ที่ระดับความสำคัญใหม่ (ต่ำกว่า)


2
รูปแบบทั่วไปอีกแบบหนึ่งอาจมีการขัดจังหวะ 100KHz เพื่อจัดการสิ่งที่สำคัญต่อเวลาและต้องมีตัวจับเวลา 1kHz แต่ไม่มีตัวจับเวลาสองตัวแยกกัน มันใช้เวลาไม่นานในการโอเวอร์เฮดหนึ่งครั้งสำหรับรูทีนการขัดจังหวะ 100kHz เพื่อบอกว่าif ((timer_count--) & 0x80000000) SET_TICK_INTERRUPT_FLAG(); else timer_count = temp-1; การขัดจังหวะตัวอื่นสามารถทำสิ่งนั้นได้ แม้ว่ากิจวัตร 1kHz จะใช้เวลามากกว่า 10us ในการดำเนินการ แต่ก็จะไม่รบกวน 100kHz
supercat

ในทำนองเดียวกันฉันใช้ซอฟต์แวร์ขัดจังหวะในระบบง่าย ๆ (ไม่มี RTOS เต็มรูปแบบ) เป็นตัวจัดตารางเวลาหลอกซึ่งความต้องการด้านฮาร์ดแวร์ได้รับการจัดการโดย ISRs แต่ฟังก์ชั่นการโทรกลับและงานที่มีความยาวอื่น ๆ สถานะฮาร์ดแวร์ถูกมอบหมายให้ขัดจังหวะซอฟต์แวร์
Evil Dog Pie

คุณได้อธิบายการเปลี่ยนแปลงของ "ครึ่งล่าง" โดยทั่วไปแล้ว คุณมีข้อมูลอ้างอิงเกี่ยวกับสิ่งนี้ที่ถูกเรียกว่า มันค่อนข้างมีความหมายที่แตกต่างจากคำตอบของ Majenko และคำถามถูกติดแท็ก ARM - สถาปัตยกรรมมีคำสั่ง SWI (ซอฟต์แวร์ขัดจังหวะ)
domen

3
@domen ฉันไม่แน่ใจว่าคุณต้องการข้อมูลอ้างอิงประเภทใด มันถูกเรียกว่า "ซอฟต์แวร์ขัดจังหวะ" เพราะนั่นคือสิ่งที่ใช้เพื่อให้บรรลุ ในบริบทของ ARM OP ได้อ้างถึง STM32 โดยเฉพาะและให้ลิงก์ไปยังคู่มืออ้างอิง RM0008 นี่ไม่ใช่คู่มืออ้างอิงหลักของ ARM "ซอฟต์แวร์ขัดจังหวะ" เพียงอย่างเดียวที่ครอบคลุมใน RM0008 คือ EXTI_SWIER (การลงทะเบียนซอฟต์แวร์ขัดจังหวะเหตุการณ์) ซึ่งอาจใช้เพื่อสร้างซอฟต์แวร์ขัดจังหวะไม่ว่าจะใช้หมุดฮาร์ดแวร์จริงสำหรับขัดจังหวะหรือไม่ ฉันไม่ได้ใช้คำสั่ง SWI (SWC) เป็นการส่วนตัว
Tut

ขอบคุณ! อาจเป็นการดีที่จะรวมข้อมูลบางส่วนไว้ในคำตอบเพื่อให้ชัดเจนว่า "การขัดจังหวะของซอฟต์แวร์"
domen

7

หากต้องการขยายคำตอบของ Majenko เล็กน้อยการขัดจังหวะโดยซอฟต์แวร์จะถูกนำไปใช้ในการใช้ระบบปฏิบัติการ ซึ่งหมายความว่าแอปพลิเคชันไม่จำเป็นต้องเชื่อมโยงกับระบบปฏิบัติการเพื่อเรียกใช้ฟังก์ชันและสวิตช์บริบทอนุญาตให้ระบบปฏิบัติการ จำกัด การเข้าถึงฮาร์ดแวร์และใช้ประโยชน์จากสิ่งต่าง ๆ เช่นหน่วยความจำที่ได้รับการป้องกัน

หากคุณไม่ได้ใช้ระบบปฏิบัติการและคุณควบคุมรหัสทั้งหมดบน MCU คุณอาจไม่จำเป็นต้องใช้การขัดจังหวะซอฟต์แวร์ (ถึงแม้ว่า Tut จะกล่าวถึงพวกเขาก็สามารถใช้ประโยชน์อื่นได้)

ลินุกซ์และMS-DOSอินเตอร์เฟซระบบโทรขัดจังหวะในการใช้ซอฟแวร์ x86 ดังนั้นฉันจะเชื่อมโยงไปยังผู้ที่เป็นตัวอย่าง


1
และในหลายกรณีที่ระบบปฏิบัติการใช้อินเทอร์รัปต์แบบนุ่มพวกมันจะถูกห่อหุ้มด้วยฟังก์ชั่นเพื่อทำให้ชีวิตง่ายขึ้น
hildred

1
ฉันยังคงเขียนโปรแกรม (ใหม่เอี่ยม) สำหรับ DOS และคุ้นเคยกับตัวจัดการ int 21 มาก เกือบทุกสิ่งที่ฉันต้องการ I / O ที่ชาญฉลาดนั้นได้รับการจัดการด้วย DOS ISR
R Drast

โปรดทราบว่าเพจที่อ้างถึงสำหรับ Linux มาจาก 1993-1996
CVN

ฉันแทนที่ลิงก์ด้วยลิงก์ที่อัปเดตมากกว่าเดิม
Adam Haun
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.