#include
#define max_tasks 2 //任務槽個數.必須和實際任務數一至
#define max_task_dep 12 //最大棧深.最低不得少於2 個,保守值為12.
unsigned char idata task_stack[max_tasks][max_task_dep];//任務堆疊.
unsigned char idata task_sp[max_tasks];
unsigned char task_id; //當前活動任務號
//任務切換函式(任務排程器)
void task_switch()
//任務裝入函式.將指定的函式(引數1)裝入指定(引數2)的任務槽中.如果該槽中原來就有任
//務,則原任務丟失,但系統本身不會發生錯誤.
void task_load(unsigned int fn, unsigned char tid)
//從指定的任務開始執行任務排程.呼叫該巨集後,將永不返回.
#define os_start(tid)
/**************************===以下為測試***************************=*/
void task1()
}void task2()
}void main()
//任務裝入函式.將指定的函式(引數1)裝入指定(引數2)的任務槽中.如果該槽中原來就有任
//務,則原任務丟失,但系統本身不會發生錯誤.
void task_load(unsigned int fn, unsigned char tid)
//從指定的任務開始執行任務排程.呼叫該巨集後,將永不返回.
#define os_start(tid)
/**************************===以下為測試***************************=*/
void task1()
}void task2()
}void main()
以本人再改進:任務斷點切換
//任務切換函式(任務排程器)
void task_switch()
}
全部程式
#include #define max_tasks 2 //任務槽個數.必須和實際任務數一至
#define max_task_dep 2 //最大棧深.最低不得少於2 個,保守值為12.
unsigned char idata task_stack[max_tasks][max_task_dep]=;//任務堆疊.
//unsigned char idata task_sp[max_tasks];
unsigned char task_id=0; //當前活動任務號
//任務切換函式(任務排程器)
void task_switch()
else
} else
//}/*
//任務裝入函式.將指定的函式(引數1)裝入指定(引數2)的任務槽中.如果該槽中原來就有任
//務,則原任務丟失,但系統本身不會發生錯誤.
void task_load(unsigned int fn, unsigned char tid)
//從指定的任務開始執行任務排程.呼叫該巨集後,將永不返回.
#define os_start(tid)
*//**************************===以下為測試***************************=*/
void task1()
}void task2()
}void main()
51系列小型作業系統精髓 簡單實現3
現在遇到的問題 1.任務不用預載入,進入乙個任務,載入乙個任務。沒有任務時,定時器怎麼處理?當只有乙個任務時,怎麼處理?多個任務怎麼輪轉或按優先順序切換?2.關於各任務定時時間,乙個乙個地減是否麻煩,有沒有更好的方法?3.沒有保護寄存,這樣切換,是否對?當任務函式有多個層巢狀時,有沒有問題?incl...
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...