官术网_书友最值得收藏!

4.3 編寫SysTick中斷服務函數

SysTick中斷服務函數也是在os_cpu_c.c中定義,具體實現參見代碼清單4-2。

代碼清單4-2 SysTick中斷服務函數

1 /* SysTick 中斷服務函數 */
 2 void SysTick_Handler(void)
 3 {
 4     OSTimeTick();
 5 }

SysTick中斷服務函數很簡單,其中僅調用了函數OSTimeTick()。OSTimeTick()是與時間相關的函數,在os_time.c(第一次使用os_time.c時需要自行在文件夾μC/OS-III\Source中新建并添加到工程的μC/OS-III Source組)文件中定義,具體實現參見代碼清單4-3。

代碼清單4-3 OSTimeTick()函數

1 void  OSTimeTick (void)
 2 {
 3     /* 任務調度 */
 4     OSSched();
 5 }

OSTimeTick()函數僅調用了函數OSSched()。OSSched()函數暫時沒有修改,具體參見代碼清單4-4。

代碼清單4-4 OSSched()函數

1 void OSSched (void)
 2 {
 3     if ( OSTCBCurPtr == OSRdyList[0].HeadPtr ) {
 4         OSTCBHighRdyPtr = OSRdyList[1].HeadPtr;
 5     } else {
 6         OSTCBHighRdyPtr = OSRdyList[0].HeadPtr;
 7     }
 8 
 9     OS_TASK_SW();
10 }
主站蜘蛛池模板: 文昌市| 富平县| 凤冈县| 华阴市| 茌平县| 阿尔山市| 定结县| 白山市| 桓仁| 申扎县| 乡宁县| 武穴市| 澜沧| 建宁县| 镇康县| 皮山县| 靖安县| 沙坪坝区| 砚山县| 河源市| 榆林市| 丽水市| 泗洪县| 邳州市| 南汇区| 涿州市| 蓬溪县| 岳阳市| 那曲县| 英德市| 工布江达县| 荥经县| 镇原县| 福州市| 阳曲县| 红桥区| 区。| 嘉峪关市| 新乡县| 石家庄市| 镇平县|