ucos-II中的一些基本概念②

本文详细介绍了μC/OS-II操作系统中实现互斥、防止死锁、任务同步的各种方法,包括关中断、测试并置位、禁止任务切换、信号量的应用。此外,还讨论了事件标志、任务间通讯、消息邮箱和消息队列的概念,以及中断响应和恢复时间的重要性。通过对这些机制的理解,有助于深入掌握实时操作系统中的关键操作。
摘要由CSDN通过智能技术生成

一、互斥条件
满足互斥条件的一般方法有:
关中断
使用测试并置位指令
禁止做任务切换
利用信号量

1.开中断和关中断
这是在处理共享数据时保证互斥是最简便快捷的方法
上μC/OS-Ⅱ提供两个宏调用,允许用户在应用程序的C代码中关中断然后再开中断:OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL(),使用示例如下:
程序清单2.4利用μC/OS_Ⅱ 宏调用关中断和开中断
void Function (void)
{
    OS_ENTER_CRITICAL();
    .
    .    /*在这里处理共享数据*/
    .
    OS_EXIT_CRITICAL();
}

需要注意的是,关中断的时间会影响整个系统的中断响应时间,所以关中断的时间不能太长,即要尽量短。这是在中断服务子程序中处理共享变量或共享数据结构的唯一方法。
如果使用某种实时内核,一般地说,关中断的最长时间不超过内核本身的关中断时间,就不会影响系统中断延迟。当然得知道内核里中断关了多久

2.测试并置位
如果不使用实时内核,当两个任务共享一个资源时,一定要约定好,先测试某一全程变量,如果该变量是0,允许该任务与共享资源打交道。为防止另一任务也要使用该资源,前者只要简单地将全程变量置为1,这通常称作测试并置位(Test-And-Set),或称作TAS。TAS操作可能是微处理器的单独一条不会被中断的指令,或者是在程序中关中断做TAS操作再开中断

3.禁止,再允许任务切换
如果任务不与中断服务子程序共享变量或数据结构,可以使用禁止、然后允许任务切换。可以实现两个或两个以上的任务可以共享数据而不发生竞争。但在实际操作中应当尽量避免禁止任务切换之类操作,因为内核最主要的功能就是做任务的调度与协调。禁止任务切换显然与内核的初衷相违。应该用给任务切换上锁,然后开锁的方法实现数据共享。

4.信号量
信号量实际上是一种约定机制,在多任务内核中普遍使用.信号量用于:
控制共享资源的使用权(满足互斥条件)
标志某事件的发生
使两个任务的行为同步
信号与信号量实际上是两个不同的概念
信号是只有两个值的变量,只有0和1两个取值
信号量是计数式的,计数式信号量的值可以是0到255或0到65535&#

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值