硬汉嵌入式论坛

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

关于理解UCOS进入临界断的理解

[复制链接]

35

主题

80

回帖

185

积分

初级会员

积分
185
发表于 2018-4-19 17:16:38 | 显示全部楼层 |阅读模式
最近在看ucosii的源码,发现有一点不明白的情况,在进入临界段的情况下,有三种方式:
1、通过处理器关闭总中断,处理完成后再打开总中断
2、中断禁止状态保存到堆栈中,再禁止中断,当执行OS_EXIT_CRITICAL()的时候,是从堆栈恢复中断状态,保存在堆栈中
3、将状态保存在局部变量CPU_SR中;


请问,
第1钟方式,关中断后,在处理临界断代码的时候有可能打开了总中断,此时临界断的代码就有可能保护不了,所以这是第1种方式的弊端;
第2种方式如果保存了中断禁止状态,再禁止中断的时候,如果处理的函数中又把禁止中断打开了,那后面需要保护的临界断代码就可能被中断打断跟第一种方式没什么区别啊,疑惑,求高手赐教,
第一种方式跟第二种方式的区别;

回复

使用道具 举报

36

主题

2041

回帖

2149

积分

至尊会员

积分
2149
发表于 2018-4-19 17:55:41 | 显示全部楼层
你没有理解到点上,不管是第1种还是第2种,什么叫中断嵌套? 中断嵌套里面是让随便打开中断的?
你如果使用的是第一种方式,你所有应用代码全部使用第一种方式,如果你用的第二种,所有临界段也都使用第二种。中断嵌套也是第2种嵌套第2种,并不是你说的用了第2中,里面还嵌套第1种方式。
Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better.
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

回复

使用道具 举报

35

主题

80

回帖

185

积分

初级会员

积分
185
 楼主| 发表于 2018-4-20 11:02:21 | 显示全部楼层
采用第一种方式的时候,为啥不支持中断嵌套,有点搞不明白,
(1) 进入临界的时候,关闭中断;
(2)退出临界,打开中断
  
  在(1)和(2)中的代码如果需要中断,先关闭中断再打开,感觉也不会影响;
  难道是CPSR状态寄存器会改变???
  
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107604
QQ
发表于 2018-4-20 11:20:18 | 显示全部楼层
东北f4 发表于 2018-4-20 11:02
采用第一种方式的时候,为啥不支持中断嵌套,有点搞不明白,
(1) 进入临界的时候,关闭中断;
(2)退 ...

QQ截图20180420111802.png
回复

使用道具 举报

35

主题

80

回帖

185

积分

初级会员

积分
185
 楼主| 发表于 2018-4-20 13:41:04 | 显示全部楼层
明白了,谢谢拉
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-7 22:50 , Processed in 0.270033 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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