硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4774|回复: 1
收起左侧

[μCOS-II] 【问题集锦】UCOS-II中临界段的三种方式有什么区别

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106959
QQ
发表于 2014-3-16 17:02:37 | 显示全部楼层 |阅读模式
如题。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106959
QQ
 楼主| 发表于 2014-3-16 17:07:24 | 显示全部楼层
有下面四种情况:
#define CPU_CRITICAL_METHOD_NONE                        0u  
#define CPU_CRITICAL_METHOD_INT_DIS_EN               1u  
#define CPU_CRITICAL_METHOD_STATUS_STK              2u  
#define CPU_CRITICAL_METHOD_STATUS_LOCAL         3u  

1.    当CPU_CFG_CRITICAL_METHOD == CPU_CRITICAL_METHOD_INT_DIS_EN时
      这种方式最简单,即直接使用处理器的开中断和关中断指令来实现宏。但是不推荐使用这种方式,因为不支持中断嵌套,
      但是考虑到有些处理器或者编译器仅支持这种方式,不得不选择这种方式。
2.    当CPU_CFG_CRITICAL_METHOD == CPU_CRITICAL_METHOD_INT_DIS_EN时
      这种方法稍复杂些,但可使CPU中断使能标志的状态在临界段前和临界段后不发生变化。
      进入临界段前:
             (1) Push/save  中断状态保存到堆栈中
             (2) Disable    关闭中断
      退出临界段:
             (3) Pop/restore  恢复中断标志
3.    当CPU_CFG_CRITICAL_METHOD == CPU_CRITICAL_METHOD_STATUS_LOCAL时
      这种方法的前提是,用户使用的C编译器具有扩展功能。用户可获得程序状态字的值,这样就可把该值保存在C函数的局部
      变量中,而不必压到堆栈里。上面的宏定义就是采用的这种方式,也就是(1),(2)注释的地方。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-12 08:22 , Processed in 0.300667 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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