現在遇到的問題:
1.任務不用預載入,進入乙個任務,載入乙個任務。沒有任務時,定時器怎麼處理?當只有乙個任務時,怎麼處理?多個任務怎麼輪轉或按優先順序切換?
2.關於各任務定時時間,乙個乙個地減是否麻煩,有沒有更好的方法?
3.沒有保護寄存,這樣切換,是否對?當任務函式有多個層巢狀時,有沒有問題?
#include "stc12c5a.h"
#define timer_reload() //使能t/c 初始10ms
#define max_tasks 8 //任務槽個數.必須和實際任務數一至
#define max_task_dep //最大棧深.最低不得少於2 個,保守值為12.
unsigned char idata task_stack[max_tasks][2];//任務堆疊.
unsigned char idata task_time[max_tasks];
unsigned char task_id=0; //當前活動任務號
bit akg=0,bkg=0;
/*//任務切換函式(任務排程器)
void task_switch() */
/*//任務裝入函式.將指定的函式(引數1)裝入指定(引數2)的任務槽中.如果該槽中原來就有任
//務,則原任務丟失,但系統本身不會發生錯誤.
void task_load(unsigned int fn, unsigned char tid) */
void task_switch_wait(unsigned char time)
void task_a()
}void task_b()
}void timer0init()
void main()
}void tm0_isr() interrupt 1 using 1
51系列小型作業系統精髓 簡單實現4
include define max tasks 2 任務槽個數.必須和實際任務數一至 define max task dep 12 最大棧深.最低不得少於2 個,保守值為12.unsigned char idata task stack max tasks max task dep 任務堆疊.un...
51系列小型作業系統精髓 簡單實現3
如今遇到的問題 1.任務不用預載入,進入乙個任務。載入乙個任務。沒有任務時。定時器怎麼處理?當僅僅有乙個任務時,怎麼處理?多個任務怎麼輪轉或按優先順序切換?2.關於各任務定時時間,乙個乙個地減是否麻煩,有沒有更好的方法?3.沒有保護寄存,這樣切換,是否對?當任務函式有多個層巢狀時。有沒有問題?inc...
51系列小型作業系統精髓 簡單實現2
在51微控制器中,不能直接改動pc,但有一種方法是能夠改變pc的。函式呼叫裡會把pc值壓入堆疊中,呼叫結束後,會把pc值彈出到 pc中。能改變pc就能夠控制程式流程。1.在任務中切換出去 define max tasks 8 任務槽最大個數.unsigned char idata task stac...