- μC/OS-III內(nèi)核實現(xiàn)與應(yīng)用開發(fā)實戰(zhàn)指南:基于STM32
- 劉火良 楊森編著
- 398字
- 2019-08-01 11:36:00
5.3 main()函數(shù)
main()函數(shù)和任務(wù)代碼變動不大,具體參見代碼清單5-12,有變動的部分代碼已加粗。
代碼清單5-12 main()函數(shù)
1 int main(void) 2 { 3 OS_ERR err; 4 5 /* 關(guān)閉中斷 */ 6 CPU_IntDis(); 7 8 /* 配置SysTick每10ms中斷一次 */ 9 OS_CPU_SysTickInit (10); 10 11 /* 初始化相關(guān)的全局變量 */ 12 OSInit(&err);(1) 13 14 /* 創(chuàng)建任務(wù) */ 15 OSTaskCreate ((OS_TCB*) &Task1TCB, 16 (OS_TASK_PTR ) Task1, 17 (void *) 0, 18 (CPU_STK*) &Task1Stk[0], 19 (CPU_STK_SIZE) TASK1_STK_SIZE, 20 (OS_ERR *) &err); 21 22 OSTaskCreate ((OS_TCB*) &Task2TCB, 23 (OS_TASK_PTR ) Task2, 24 (void *) 0, 25 (CPU_STK*) &Task2Stk[0], 26 (CPU_STK_SIZE) TASK2_STK_SIZE, 27 (OS_ERR *) &err); 28 29 /* 將任務(wù)加入就緒列表 */ 30 OSRdyList[0].HeadPtr = &Task1TCB; 31 OSRdyList[1].HeadPtr = &Task2TCB; 32 33 /* 啟動操作系統(tǒng),將不再返回 */ 34 OSStart(&err); 35 } 36 37 /* 任務(wù)1 */ 38 void Task1( void *p_arg ) 39 { 40 for ( ;; ) { 41 flag1 = 1; 42 //delay( 100 ); 43 OSTimeDly(2);(2) 44 flag1 = 0; 45 //delay( 100 ); 46 OSTimeDly(2); 47 48 /* 任務(wù)切換,這里是手動切換 */ 49 //OSSched(); 50 } 51 } 52 53 /* 任務(wù)2 */ 54 void Task2( void *p_arg ) 55 { 56 for ( ;; ) { 57 flag2 = 1; 58 //delay( 100 ); 59 OSTimeDly(2);(3) 60 flag2 = 0; 61 //delay( 100 ); 62 OSTimeDly(2); 63 64 /* 任務(wù)切換,這里是手動切換 */ 65 //OSSched(); 66 } 67 }
代碼清單5-12(1):空閑任務(wù)初始化函數(shù)在OSInit()中調(diào)用,在系統(tǒng)啟動之前創(chuàng)建好空閑任務(wù)。
代碼清單5-12(2)(3):延時函數(shù)均替代為阻塞延時,延時時間均為2個SysTick中斷周期,即20ms。
推薦閱讀
- Arch Linux Environment Setup How-to
- 嵌入式Linux系統(tǒng)開發(fā):基于Yocto Project
- SOA實踐者說
- 奔跑吧 Linux內(nèi)核(入門篇)
- Python基礎(chǔ)教程(第3版)
- RESS Essentials
- Fedora 12 Linux應(yīng)用基礎(chǔ)
- OpenSolaris設(shè)備驅(qū)動原理與開發(fā)
- 寫給架構(gòu)師的Linux實踐:設(shè)計并實現(xiàn)基于Linux的IT解決方案
- Vim 8文本處理實戰(zhàn)
- Windows 8實戰(zhàn)從入門到精通(超值版)
- Linux操作系統(tǒng)
- Advanced Infrastructure Penetration Testing
- iOS 10 開發(fā)指南
- Android應(yīng)用性能優(yōu)化最佳實踐