上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 }