51系列小型作業系統精髓 簡單實現4

2021-06-22 01:59:26 字數 1896 閱讀 1743

#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...