ตัวกำหนดตารางเวลางานที่ง่ายและไม่ได้รับการยกเว้น
นี่คือตัวกำหนดตารางเวลางานที่เรียบง่ายและไม่ได้รับการยกเว้น โครงการสาธิตนี้ทำใน Atmel Studio 7 สำหรับไมโครคอนโทรลเลอร์ ATMEGA48P แต่สามารถพอร์ตได้อย่างง่ายดาย
จุดของตัวกำหนดตารางเวลานี้คือการโทรและดำเนินการทุกงานด้วยระยะเวลาที่เลือก
ตัวกำหนดตารางเวลาอยู่ในโฟลเดอร์ OS (OS.C และ OS.H) แม้ว่ามันจะไม่ใช่ระบบปฏิบัติการ แต่ฉันก็ยังเรียกมันว่าระบบปฏิบัติการเพราะการตั้งชื่อนั้นง่ายกว่าด้วยวิธีนี้ (ระบบปฏิบัติการสั้นกว่า Scheduler, DUH)
มีฟังก์ชั่นหลักสามประการที่สำคัญ:
มีสามรัฐ:
บล็อก: รอการโทรจากตัวจับเวลา
พร้อม: พร้อมสำหรับการดำเนินการ
ถูกระงับ: ปิดใช้งานจะไม่ทำอะไรเลย
รูปที่ 2. แผนภาพสถานะของงาน
os_tasktimer () เป็นฟังก์ชั่นที่จัดงาน มันควรจะอยู่ในการขัดจังหวะตัวจับเวลา (ในการสาธิตมันเป็นตัวจับเวลา 1 วินาที แต่สามารถเป็นอะไรก็ได้) มีตัวนับภายในฟังก์ชั่น หากเคาน์เตอร์มีขนาดใหญ่กว่านั้นเวลาของงานจะระเบิดมันจะทำให้มันอยู่ในสถานะพร้อม
รูปที่ 3. ไดอะแกรมกิจกรรมของ os_tasktimer ()
os_taskexecution () เป็นฟังก์ชันที่เรียกงาน มันควรจะอยู่ในห่วงหลัก () ที่ไม่มีที่สิ้นสุด ตรวจสอบว่ามีงานพร้อมหรือไม่จากนั้นดำเนินการในสไตล์ FIFO หรือไม่ มันคุ้มค่าที่จะพูดถึงว่าด้วยเหตุนี้จึงเป็นเพียงเวลาที่นุ่มนวล หากคุณเลือกการกำหนดเวลาผิดอาจมีงานมากเกินไปในสถานะพร้อมและความล่าช้าที่ไม่พึงประสงค์อาจเกิดขึ้น
รูปที่ 4. ไดอะแกรมกิจกรรมของ os_taskexecution ()
การสาธิตมีจุดประสงค์เพื่อแสดงให้เห็นว่าตัวกำหนดตารางเวลาทำงานอย่างไร มีสามงานและแต่ละงานกระพริบ LED (บนพอร์ต D 0,1,2) ด้วย 1, 2 และ 5 วินาที งานที่สองเริ่มต้นในสถานะที่ถูกระงับดังนั้นจึงไม่เคยถูกดำเนินการ