打印

ucos关于OS_ENTER_CRITICL的问题.

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

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传递的.可上面那个根本没参数输入阿..

??呵呵.: 求解~
 
 

相关帖子

沙发
Swd21ic|  楼主 | 2008-1-27 18:56 | 只看该作者

~~

系统区人气实在是太不旺了.
所以发过来了呵呵

使用特权

评论回复
板凳
JOHN_light| | 2008-1-27 21:52 | 只看该作者

我想,这和ATPCS不无关系吧

遵循 ARM-Thumb 过程调用标准 (ATPCS) 可以确保分别编译或汇编的子程序能够
协同工作。

使用寄存器 r0-r3 将参数值传送到函数,并将结果值传出。可以用 a1-a4 来
引用 r0-r3,以使此用法透明。请参阅第 3-9 页的参数传递。在子程序调用
之间,可以将 r0-r3 用于任何用途。被调用函数在返回之前不必恢复 r0-r3。
如果调用函数需要再次使用 r0-r3 的内容,则它必须保留这些内容。

使用特权

评论回复
地板
rodger_br| | 2008-1-29 19:38 | 只看该作者

楼上正解

使用特权

评论回复
5
Swd21ic|  楼主 | 2008-1-29 20:11 | 只看该作者

RE

明白了,把ATPCS看了下
..
反正R0-R3可以乱用,有参数就传,这样不会对其他造成损害.

使用特权

评论回复
6
zjf0000| | 2008-1-31 09:39 | 只看该作者

re

cpu_sr = os_cpu_save_sr();这是函数调用。系统会自动保存那些寄存器,这个用户不用管,等函数条用完毕,return之后,寄存器会自动恢复。
MRS   R0, CPSR;  把cpsr的值保存到r0里边,做返回值使用。cpu_sr得到的就是这个值。里边的R1就是当一般的寄存器使用的,保存了中间变量,可以换成别的也无所谓。

使用特权

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

本版积分规则

71

主题

781

帖子

1

粉丝