Penjadwal tugas yang sangat sederhana dan non-preemptive.
Ini adalah penjadwal tugas yang super sederhana, non-preemptive. Proyek demo ini dibuat di Atmel Studio 7 untuk mikrokontroler ATmega48p, tetapi dapat porting dengan mudah.
Titik penjadwal ini adalah untuk memanggil dan melaksanakan setiap tugas dengan periodisitas yang dipilih.
Penjadwal ada di dalam folder OS (OS.C dan OS.H). Meskipun ini bukan sistem operasi, saya masih menyebutnya OS, karena penamaan lebih mudah dengan cara ini (OS lebih pendek, daripada penjadwal, duh).
Ada tiga fungsi utama yang penting:
Ada tiga negara bagian:
Diblokir: menunggu panggilan dari timer
Siap: Siap untuk dieksekusi
Ditangguhkan: dinonaktifkan, tidak akan melakukan apapun
Gambar 2. Diagram keadaan tugas.
OS_TASKTIMER () adalah fungsinya, yang mengatur tugas. Itu harus dalam interupsi timer (dalam demo itu adalah timer 1 detik, tetapi bisa apa saja). Ada penghitung di dalam fungsi. Jika konter lebih besar, maka tugasnya meledak, itu menempatkannya dalam keadaan siap.
Gambar 3. Diagram aktivitas OS_TASKTIMER ().
Os_taskexecution () adalah fungsinya, yang memanggil tugas. Itu harus berada di loop tak terbatas utama (). Ini memeriksa apakah ada tugas siap, dan kemudian menjalankannya dengan gaya FIFO. Perlu disebutkan bahwa karena ini, itu hanya waktu nyata yang lembut. Jika Anda memilih waktu yang salah, maka mungkin ada terlalu banyak tugas dalam keadaan siap dan penundaan yang tidak diinginkan mungkin terjadi.
Gambar 4. Diagram aktivitas OS_taskExecution ().
Demo ini dimaksudkan untuk menunjukkan bagaimana penjadwal bekerja. Ada tiga tugas dan setiap tugas berkedip LED (pada port D 0,1,2) dengan 1, 2 dan 5 detik. Tugas kedua dimulai dalam keadaan yang ditangguhkan, sehingga tidak pernah dieksekusi.