主题 : STM32-ucosii中断服务函数怎么写 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 111563
精华: 0
发帖: 4
金钱: 20 两
威望: 4 点
贡献值: 0 点
综合积分: 8 分
注册时间: 2014-12-30
最后登录: 2015-08-02
楼主  发表于: 2015-05-12 16:43

 STM32-ucosii中断服务函数怎么写

ucosii的中断服务子程序,邵老师的书中这么写的:
用户中断服务子程序:
             保存CPU寄存器;               1
             调用OSIntEnter;                 2
             用户代码;                         3
             调用OSIntExit;                    4
             恢复CPU寄存器;            5
             执行中断返回指令;         6

Cortex-M3在进入异常时自动压栈,返回时自动出栈。所以上面的1、5、6步是CUP自动执行的。
现在有个问题:自动压栈和自动出栈的栈并不是u/cosii所分配的任务堆栈,而是内核指定的堆栈,假如第四步调用OSIntExit;的时候进行了任务调度,(假设被中断的是任务1,调度后的是任务2)
这时运行的是任务2,如果这时又要调度运行任务1,需要将任务1的堆栈恢复到CPU寄存器,但发生中断时并没有把任务1压到任务1的堆栈,这时恢复任务1 的堆栈到CPU会出错
这个怎么解决啊?求大神指导
级别: 新手上路
UID: 111563
精华: 0
发帖: 4
金钱: 20 两
威望: 4 点
贡献值: 0 点
综合积分: 8 分
注册时间: 2014-12-30
最后登录: 2015-08-02
1楼  发表于: 2015-05-12 16:51
图片:
在中断时能自动入栈和出栈的CPU用这种中断服务子程序,就不允许中断嵌套、不能再中断中产生任务调度吗?也就是不用调用OSIntEnter和
OSIntExit