μC/OS-III内核实现与应用开发实战指南:基于STM32
上QQ阅读APP看书,第一时间看更新

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 }