打印
[MSP430]

关于MSP430F149 UCOSII的任务切换是CP程序指针的保存问题

[复制链接]
1335|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 zmw809154465 于 2013-11-30 13:38 编辑

在任务切换时,保存当前任务CPU中的状态值到任务的堆栈中,这里保存了SR状态寄存器,和R4~R15,也保存了SP到 0(R13)的指针地址中,但是为什么没有保存CP(R0)?在另一个高优先级的任务获得CPU使用权,通过reti 来恢复CP值,这个恢复CP指针可以理解,为什么上一个任务没有推入CP到堆栈? 这任务堆栈中保存了函数的指针,也就是函数的CP值吧,在初始化中是保存了,但是任务切换时怎么没有?难道在任务切换时,硬件自动保存R0~R3了?请问高手在哪里?

相关帖子

沙发
zmw809154465|  楼主 | 2013-11-30 13:44 | 只看该作者
如果单片机正常发生中断时,是会有硬件自动的把CP和SR寄存器的值入堆栈,但是UCOS是模拟中断的执行,所以CP入堆栈是靠软件代码模拟的吧?但是CP是不可读写的吧?很疑惑

使用特权

评论回复
板凳
ayb_ice| | 2013-11-30 15:46 | 只看该作者
这要看430编程手册

使用特权

评论回复
地板
zmw809154465|  楼主 | 2013-11-30 16:05 | 只看该作者
如果是是中断我能理解,CP 和SR是由硬件完成的,可是任务切换函数不是中断啊,是模拟中断啊?

使用特权

评论回复
5
zmw809154465|  楼主 | 2013-11-30 16:10 | 只看该作者
任务切换代码应该先把CP推入任务堆栈,再见SR推入任务堆栈,而这里没有把CP推入堆栈,是不是在调用OSCtxSw函数的时候由CALL指令把CP推入堆栈了呢?

使用特权

评论回复
6
ayb_ice| | 2013-11-30 16:31 | 只看该作者
本帖最后由 ayb_ice 于 2013-11-30 16:33 编辑

这个确实有点不能理解
可能是这样的:
编译器可能根本不使用R0~R3寄存器,如果使用的话他会先保存,再恢复

ARM编译器也有类似的用法

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

41

帖子

3

粉丝