- μC/OS-III內核實現與應用開發實戰指南:基于STM32
- 劉火良 楊森編著
- 662字
- 2019-08-01 11:35:59
4.4 main()函數
此處main()函數與第3章中區別不大,僅僅是加入了SysTick相關的內容,具體參見代碼清單4-5。
代碼清單4-5 main()函數和任務代碼
1 int main(void) 2 { 3 OS_ERR err; 4 5 /* 關閉中斷 */ 6 CPU_IntDis();(1) 7 8 /* 配置SysTick 10ms 中斷一次 */ 9 OS_CPU_SysTickInit (10);(2) 10 11 /* 初始化相關的全局變量 */ 12 OSInit(&err); 13 14 /* 創建任務 */ 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 /* 將任務加入就緒列表 */ 30 OSRdyList[0].HeadPtr = &Task1TCB; 31 OSRdyList[1].HeadPtr = &Task2TCB; 32 33 /* 啟動操作系統,將不再返回 */ 34 OSStart(&err); 35 } 36 37 38 39 /* 任務1 */ 40 void Task1( void *p_arg ) 41 { 42 for ( ;; ) { 43 flag1 = 1; 44 delay( 100 ); 45 flag1 = 0; 46 delay( 100 ); 47 48 /* 任務切換,這里是手動切換 */ 49 //OSSched();(3) 50 } 51 } 52 53 /* 任務2 */ 54 void Task2( void *p_arg ) 55 { 56 for ( ;; ) { 57 flag2 = 1; 58 delay( 100 ); 59 flag2 = 0; 60 delay( 100 ); 61 62 /* 任務切換,這里是手動切換 */ 63 //OSSched();(4) 64 } 65 }
代碼清單4-5(1):關閉中斷。因為在操作系統初始化之前啟用了SysTick定時器產生10ms的中斷,在中斷中觸發任務調度,如果一開始不關閉中斷,就會在操作系統還未啟動之前就進入SysTick中斷,然后發生任務調度。既然操作系統都還未啟動,那么調度是不允許發生的,所以應先關閉中斷。操作系統啟動后,中斷由OSStart()函數中的OSStartHighRdy()重啟。
代碼清單4-5(2):配置SysTick為10ms中斷一次。任務的調度是在SysTick的中斷服務函數中完成的,中斷的頻率越高意味著操作系統的調度越高,系統的負荷就越重,一直在不斷地進入中斷,則執行任務的時間就會減少。選擇合適的SysTick中斷頻率會提高系統的運行效率,μC/OS-III官方推薦為10ms,也可設置得再高一些。
代碼清單4-5(3)(4):任務調度將不再在各自的任務中實現,而是放到了SysTick中斷服務函數中,從而實現每個任務都運行相同的時間片,平等地享有CPU。
推薦閱讀
- Getting Started with oVirt 3.3
- WindowsServer2012Hyper-V虛擬化部署與管理指南
- 嵌入式Linux應用開發菜鳥進階
- 嵌入式系統原理及開發
- Kali Linux 2018:Windows Penetration Testing
- INSTANT Migration from Windows Server 2008 and 2008 R2 to 2012 How-to
- Windows Server 2012網絡操作系統項目教程(第4版)
- RHCSARHCE 紅帽Linux認證學習指南(第7版)EX200 & EX300
- AWS SysOps Cookbook
- INSTANT Galleria Howto
- 跟老男孩學Linux運維:Shell編程實戰
- 新編電腦辦公(Windows 10+ Office 2013版)從入門到精通
- Learning BeagleBone
- Linux集群之美
- Linux操作系統案例教程(第2版)