搜索
bottom↓
回复: 5

求教 UCOS OS_ENTER_CRITICAL

[复制链接]

出0入0汤圆

发表于 2015-4-24 09:08:38 | 显示全部楼层 |阅读模式
官网上下载的UCOS移植例程中关于OS_ENTER_CRITICAL和OS_EXIT_CRITICAL,如下

#define  OS_CRITICAL_METHOD   3u

#if OS_CRITICAL_METHOD == 3u
#define  OS_ENTER_CRITICAL()  {cpu_sr = OS_CPU_SR_Save();}
#define  OS_EXIT_CRITICAL()   {OS_CPU_SR_Restore(cpu_sr);}
#endif

在os_cpu_a.asm中实现这两个函数

OS_CPU_SR_Save
    MRS     R0, PRIMASK                                         ; Set prio int mask to mask all (except faults)
    CPSID   I
    BX      LR

OS_CPU_SR_Restore
    MSR     PRIMASK, R0
    BX      LR

那么在调用OS_ENTER_CRITICAL()和 OS_EXIT_CRITICAL() 之间,进行了某些操作,R0的值被改变了怎么办呢?
比如执行了某些运算,R0最后变成0xfffffffff了?
或者说R0肯定不会被更改?

对汇编了解的不多,请各位高手不吝赐教。

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2015-4-24 09:19:58 | 显示全部楼层
cpu_sr = OS_CPU_SR_Save();
OS_CPU_SR_Save返回R0给了cpu_sr;
Restore反之.

出0入0汤圆

 楼主| 发表于 2015-4-24 10:07:42 | 显示全部楼层
f1yh1347 发表于 2015-4-24 09:19
cpu_sr = OS_CPU_SR_Save();
OS_CPU_SR_Save返回R0给了cpu_sr;
Restore反之.

也就是在
OS_CPU_SR_Restore
    MSR     PRIMASK, R0
    BX      LR
的时候,cpu_sr作为参数,赋给了R0,在赋给PRIMASK?

出0入0汤圆

发表于 2015-4-24 10:12:28 | 显示全部楼层
  1. 1 #define  CPU_INT_DIS()         do { cpu_sr = CPU_SR_Save(); } while (0)
  2. 2 #define  CPU_INT_EN()          do { CPU_SR_Restore(cpu_sr); } while (0)
复制代码

这里面涉及到一点就是在C语言中调用汇编函数时参数和返回值放在什么地方,这里是放在寄存器R0,然后你想下就会明白

出0入0汤圆

 楼主| 发表于 2015-4-24 10:30:43 | 显示全部楼层
骁龙科技工作室 发表于 2015-4-24 10:12
这里面涉及到一点就是在C语言中调用汇编函数时参数和返回值放在什么地方,这里是放在寄存器R0,然后你想下 ...

多谢你的回复

出0入8汤圆

发表于 2015-4-24 12:03:02 | 显示全部楼层

百度下
ARM过程调用标准

你应该会明白其中的本质。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 02:12

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表