打印

ucos关于OS_ENTER_CRITICL的问题.

[复制链接]
1577|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Swd21ic|  楼主 | 2008-1-26 10:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
实际包含的宏为:

cpu_sr = os_cpu_save_sr();

os_cpu_save_sr:
    MRS   R0, CPSR;
    ORR   R1,R0,#NO_INT;
    MSR   CPSR,R1;

汇编好像是这样的,把CPRS读到R0,屏蔽FIQ和IRQ后反写回CPSR.

有点不明白.这个宏可以在任务中任何位置使用,为什么调用的时候就敢随便把R0的内容覆盖掉?,还有这里返回给cpu_sr使用的R1还是R0?.  

OS_EXIT_CRITICL()  os_cpu_restore_sr(cpu_sr); 操作R0能明白.第一个参数是通过R0传递的.可上面那个根本没参数输入阿..

??呵呵.: 求解~

相关帖子

沙发
g_nf| | 2008-2-20 10:38 | 只看该作者

OS_ENTER_CRITICL R0

os_cpu_save_sr()中,CPSR备份在R0中,R0与#NO_INT的或操作结果放入R1(R0值不变),再把R1返回给CPSR.

在os_cpu_restore_sr(cpu_sr)中把先前备份到R0中的CPSR值恢复至CPSR.

R0-R3这四个寄存器是供系统传递参数的,所以可以随时覆盖.

这是我的理解,请高手指正.

使用特权

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

本版积分规则

71

主题

781

帖子

1

粉丝