8787|5

48

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

# if OS_CRITICAL_METHOD==3 [复制链接]

# if OS_CRITICAL_METHOD==3

     OS_CPU_SR  CPU_sr;这句的  OS_CPU_SR CPU_sr是什么意思?

最新回复

这是我找到的资料 1)当OS_CRITICAL_METHOD= = 1时,简单实现如下: #define   OS_ENTER_CRITICAL()   disable_int() #define   OS_EXIT_CRITICAL()      enable_int() 但这样有一个问题,如果禁止中断的情况下调用uC/OS-II功能函数,那么从功能函数返回时,中断可能变成允许的了,而实际上还是希望是禁止的。 2)当OS_CRITICAL_METHOD= = 2时,实现如下: #define OS_ENTER_CRITICAL() asm(“PUSH PSW”); asm(“DI”); #define OS_EXIT_CRITICAL() asm(“POP PSW”); 执行OS_ENTER_CRITICAL()时,先将中断状态保存到堆栈,然后关中断;执行OS_EXIT_CRITICAL()时,再从堆栈中恢复原来的中断开/关状态。这种方法不会改变中断状态,避免前面的问题。 3)当OS_CRITICAL_METHOD= = 3时,实现如下: #define OS_ENTER_CRITICAL() cpu_sr = get_processor_psw(); disable_interrupts(); #define OS_EXIT_CRITICAL() set_ processor_psw(cpu_sr); 将处理器状态字保存在局部变量中。  详情 回复 发表于 2012-11-12 10:42
点赞 关注

回复
举报

112

帖子

0

TA的资源

一粒金砂(高级)

沙发
 
条件编译,定义了变量,不需要管
 
 

回复

2

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

OS_CPU_SR CPU_sr;这句的 OS_CPU_SR CPU_sr是什么意思?

OS_CPU_SR  CPU_sr一般是被#define预定了,比如:
#define OS_CPU_SR  CPU_sr func()
那么条件成立,他就会运行func函数
#define OS_CPU_SR  CPU_sr (赋值语句)
那么条件成立,他就会运行赋值语句等等.
 
 
 

回复

104

帖子

0

TA的资源

一粒金砂(高级)

4
 

回复 楼主 laidawang 的帖子

# if OS_CRITICAL_METHOD==3
  定义了 OS_CPU_SR     CPU_sr 变量,而 CPU_sr 是关闭中断OS_ENTER_CRITICAL()和开启中断OS_EXIT_CRITICAL() 用到的变量。CPU_sr 记录的应该是当前的中断标志
 
 
 

回复

245

帖子

0

TA的资源

纯净的硅(初级)

5
 
uc/OS里定义了几种模式,这个是启用第三种模式,具体的楼主可以看看源码
 
 
 

回复

272

帖子

0

TA的资源

纯净的硅(初级)

6
 
这是我找到的资料
1)当OS_CRITICAL_METHOD= = 1时,简单实现如下:

#define   OS_ENTER_CRITICAL()   disable_int()

#define   OS_EXIT_CRITICAL()      enable_int()

但这样有一个问题,如果禁止中断的情况下调用uC/OS-II功能函数,那么从功能函数返回时,中断可能变成允许的了,而实际上还是希望是禁止的。



2)当OS_CRITICAL_METHOD= = 2时,实现如下:

#define OS_ENTER_CRITICAL() asm(“PUSH PSW”); asm(“DI”);

#define OS_EXIT_CRITICAL() asm(“POP PSW”);

执行OS_ENTER_CRITICAL()时,先将中断状态保存到堆栈,然后关中断;执行OS_EXIT_CRITICAL()时,再从堆栈中恢复原来的中断开/关状态。这种方法不会改变中断状态,避免前面的问题。



3)当OS_CRITICAL_METHOD= = 3时,实现如下:

#define OS_ENTER_CRITICAL() cpu_sr = get_processor_psw(); disable_interrupts();

#define OS_EXIT_CRITICAL() set_ processor_psw(cpu_sr);

将处理器状态字保存在局部变量中。
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表