[ZLG-ARM] 请教关于UCOS 里寄存器保存的问题

[复制链接]
2338|3
 楼主| liu_huan 发表于 2008-12-3 13:54 | 显示全部楼层 |阅读模式
STMFD&nbsp;&nbsp;&nbsp;SP!,&nbsp;{R0-R3,&nbsp;R12,&nbsp;LR}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;任务切换的时候通过软中断保存这些数据,但是如果切换的时候我还用到了R4,R5...,而在别一个任务中把这些值改了,那么切换回来的时候,这个任务不是要出现问题了》??<br />
ZLG_Dengz 发表于 2008-12-4 23:20 | 显示全部楼层

RE:

&nbsp;&nbsp;&nbsp;&nbsp;你好,&nbsp;我在IRQ中断处理部分看到了你说的这段代码(Handler里),之所以没保存其它寄存器,是因为在后面的代码中,我们并没有操作其它寄存器。不知道你说的和我看到的是否是同一个地方,如果有问题,我们再继续交流。
 楼主| liu_huan 发表于 2008-12-5 08:41 | 显示全部楼层

谢谢您的回复

;软件中断<br />SoftwareInterrupt<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SP,&nbsp;StackSvc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;重新设置堆栈指针<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STMFD&nbsp;&nbsp;&nbsp;SP!,&nbsp;{R0-R3,&nbsp;R12,&nbsp;LR}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R1,&nbsp;SP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;R1指向参数存储位置<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MRS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R3,&nbsp;SPSR<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TST&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R3,&nbsp;#T_bit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;中断前是否是Thumb状态<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDRNEH&nbsp;&nbsp;R0,&nbsp;[LR,#-2]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;是:&nbsp;取得Thumb状态SWI号<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BICNE&nbsp;&nbsp;&nbsp;R0,&nbsp;R0,&nbsp;#0xff00<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDREQ&nbsp;&nbsp;&nbsp;R0,&nbsp;[LR,#-4]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;否:&nbsp;取得arm状态SWI号<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BICEQ&nbsp;&nbsp;&nbsp;R0,&nbsp;R0,&nbsp;#0xFF000000<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;r0&nbsp;=&nbsp;SWI号,R1指向参数存储位置<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CMP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,&nbsp;#1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDRLO&nbsp;&nbsp;&nbsp;PC,&nbsp;=OSIntCtxSw<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDREQ&nbsp;&nbsp;&nbsp;PC,&nbsp;=__OSStartHighRdy&nbsp;&nbsp;&nbsp;;&nbsp;SWI&nbsp;0x01为第一次任务切换<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SWI_Exception<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDMFD&nbsp;&nbsp;&nbsp;SP!,&nbsp;{R0-R3,&nbsp;R12,&nbsp;PC}^<br /><br /><br /><br />任务切换是模似一次软中断,在这个程序里保存了R0-R3,&nbsp;R12,&nbsp;PC,而任务是自己写的,应该有的任务也会用到R4,R5,R6等其它寄存器。<br /><br />才入门,如果问得太基础了,请不要见笑:)<br />
zyok 发表于 2008-12-5 20:38 | 显示全部楼层

在OSIntCtxSw()中保存的

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

87

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部