|
搭建任務(wù)控制塊和任務(wù)調(diào)度器函數(shù)可完成自己的OS,最精簡的框架,C文件只有217行代碼,有完整詳細(xì)注釋。
單片機(jī)源程序如下:
- #include "os.h" //使用內(nèi)核
- #include "usart.h"
- /****************************用戶任務(wù)函數(shù)聲明*****************************/
- void Task1(void);
- void Task2(void);
- void Task3(void);
- /*******************************************************************/
- /*****************************用戶任務(wù)堆棧創(chuàng)建**************************/
- //任務(wù)堆棧(一維數(shù)組)全局變量
- OS_STK Task1Stk[128];
- OS_STK Task2Stk[64];
- OS_STK Task3Stk[64];
- /*******************************************************************/
- /******************************用戶任務(wù)加入內(nèi)核運行*********************************/
- int main(void)
- {
- USART1_Config(9600); //串口1初使化
- printf("-@OS Inside\r\n");
- OSInit();
- OSTaskCreate(Task1,&Task1Stk[128-1]); //創(chuàng)建任務(wù)1 //必須-1,數(shù)組標(biāo)號最大為N-1
- OSTaskCreate(Task2,&Task2Stk[64-1]); //創(chuàng)建任務(wù)2
- OSTaskCreate(Task3,&Task3Stk[64-1]); //創(chuàng)建任務(wù)3
- OSStartUp();
- }
- /***********************************************************************************/
- void Task1(void) //任務(wù)1
- {
- while(1)
- {
- OSprintf("Task1 is running\r\n");
- OS_delayMs(1000);
- }
- }
- void Task2(void) //任務(wù)2
- {
- while(1)
- {
- OSprintf("Task2 is running\r\n");
- OS_delayMs(2000);
- }
- }
-
- void Task3(void) //任務(wù)3
- {
- while(1)
- {
- OSprintf("Task3 is running\r\n");
- OS_delayMs(4000);
- }
- }
- /*
- *望穿秋水提示:
- *想要更多任務(wù)的自己手動添加,添加任務(wù)時,任務(wù)堆棧、任務(wù)函數(shù)聲明、任務(wù)創(chuàng)建參數(shù)名、任務(wù)函數(shù)名四者均要添加且名稱要統(tǒng)一。
- *把void Taskx(void)看成普通的int main(void)使用即可,while(1){}必須存在;
- *任務(wù)名可以隨意修改,Task1是默認(rèn)的任務(wù)名,修改任務(wù)名時,任務(wù)堆棧、任務(wù)函數(shù)聲明、任務(wù)創(chuàng)建參數(shù)名、任務(wù)函數(shù)名四者名稱要統(tǒng)一。
- *這里默認(rèn)創(chuàng)建了3個用戶任務(wù),用戶可自行添加或刪除(最大255個任務(wù)(含空閑任務(wù)))
- */
復(fù)制代碼
所有資料51hei提供下載:
動手寫OS基本工程-基于Cortex-M內(nèi)核.zip
(517.25 KB, 下載次數(shù): 22)
2019-5-17 00:29 上傳
點擊文件名下載附件
|
|