中级会员
 
- 积分
- 246
- 金钱
- 246
- 注册时间
- 2018-8-8
- 在线时间
- 44 小时
|
1金钱
为什么正点原子官方例程上在SysTick_Handler中OSIntEnter();与OSTimeTick();之间没有在TCB中保存堆栈指针的代码?
这是正点原子官方例程上的节拍中断服务函数:
void SysTick_Handler(void)
{
if(delay_osrunning==1) //OS开始跑了,才执行正常的调度处理
{
OSIntEnter(); //进入中断
OSTimeTick(); //调用ucos的时钟服务程序
OSIntExit(); //触发任务切换软中断
}
}
这是任哲老师书中的节拍中断服务函数:
这是任哲老师数中的节拍中断服务函数
我找遍了里面三个调用函数的代码以及UCOSII中的汇编代码,没有发现SysTick_Handler里有在TCB中保存堆栈指针的代码的语句,但是发现在PendSV_Handler服务程序中有
在TCB中保存堆栈指针的代码的语句。
个人觉得在响应中断后,如果嵌套层数为1还是必须要保存堆栈只针的,因为在响应中断不是正常的任务调度,所以也无法保存SP到TCB中。
请大神帮忙解答一下,谢谢!
|
|