临界代码区 中断

一、 代码的临界区

代码临界区指操作系统在处理时不可分割的代码。一旦这部分代码开始执行,则不允许任何中断打扰。为确保临界段代码的执行,在进入临界段之前要关中断,而临界段代码执行完以后要立即开中断。如下关于A/D采样的代码中
<span style="font-size:14px;">Int main()
{
  _DINT();
  WDTCTL=WDTPW+WDTHOLD;
  InitClock(); 
  InitAD12();
  InitTimerA();
  ADValue=0;
  _EINT();}</span>

实际上,这段代码中_DINT()关中断和_EINT()开中断所包括的代码就是一个临界区。由于初始化操作需要设置系统时钟、设定定时器等,那么这段代码是不应该被外部中断将其中断执行并更改的。
不同的嵌入式操作系统实现临界区的方式也各不相同,对于uC/OSii,该系统定义了两个宏(macros)来关中断和开中断,以便避开不同C编译器厂商选择不同的方法来处理关中断和开中断。uC/OSii,中的这两个宏调用分别是:OS_ENTER_CRITICAL()和OS_EXIT_CRITIAL().开发者可以根据采用的硬件平台,实现这两个宏。这里只不过做了一个封装。
而嵌入式Linux实现临界区的方法有多种,可以采用自旋锁spin_lock的方法防止多个进程操作同一段临界区。Spin_lock()是一个内核函数,开发者包括文件就可以使用它了。

https://blog.csdn.net/guozhongwei1/article/details/43759931?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-2.essearch_pc_relevant&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-2.essearch_pc_relevant

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学无止境2022

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值