中级会员 
   
	- 积分
 - 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中。 
请大神帮忙解答一下,谢谢! 
 
 |   
 
 
 
 
 
 |