[uC/OS-III] 21. 信号量

news/2024/11/7 19:26:21/

1. 信号量基本概念

信号量(Semaphore)是一种实现任务间通信的机制,可以实现任务之间同步或临界资源的互斥访问, 常用于协助一组相互竞争的任务来访问临界资源。二值信号量:在 uCOS 中我们用信号量用于同步,任务与任务的同步,中断与任务的同步,可以大大提高效率。计数信号量:在实际的使用中,我们常将计数信号量用于事件计数与资源管理。

2. 信号量应用场景

因为信号量资源被获取了,信号量值就是 0,信号量资源被释放,信号量值就是 1,把这种只有 0 和 1 两种情况的信号量称之为二值信号量。二值信号量在任务与任务中同步的应用场景;二值信号量在任务与中断同步的应用场景;

3. 二值信号量运作机制

创建信号量时,系统会为创建的信号量对象分配内存,并把可用信号量初始化为用户自定义的个数, 二值信号量的最大可用信号量个数为 1。
二值信号量获取,任何任务都可以从创建的二值信号量资源中获取一个二值信号量,获取成功则返回正确,否则任务会根据用户指定的阻塞超时时间来等待其它任务/中断释放信号量。在等待这段时间,系统将任务变成阻塞态,任务将被挂到该信号量的阻塞等待列表中。

 

4. 计数信号量运作机制

计数信号量可以用于资源管理,允许多个任务获取信号量访问共享资源,但会限制任务的最大数目。

 5.  信号量控制块

uCOS 的信号量由多个元素组成,在信号量被创建时,需要由我们自己定义信号量控制块(也可以称之为信号量句柄),因为它是用于保存信号量的一些信息的,其数据结构OS_SEM 除了信号量必须的一些基本信息外,还有 PendList 链表与 Ctr,为的是方便系统来管理信号量。

6.  信号量函数接口

创建信号量函数 OSSemCreate()
信号量删除函数 OSSemDel()
信号量释放函数 OSSemPost()
信号量获取函数 OSSemPend()

7.  信号量实验

二值信号量同步实验: 信号量同步实验是在 uCOS 中创建了两个任务,一个是获取信号量任务,一个是释放信号量任务,两个任务独立运行,获取信号量任务是一直在等待信号量,释放信号量任务在检测按键是否按下,如果按下则释放信号量,此时释放信号量会唤醒获取任务,获取任务开始运行,然后形成两个任务间的同步, LED 进行翻转。

计数型信号量实验:  是模拟停车场工作运行。在创建信号量的时候初始化 5 个可用的信号量,并且创建了两个任务:一个是获取信号量任务,一个是释放信号量任务,两个任务独立运行,获取信号量任务是通过按下 KEY1 按键进行信号量的获取,模拟停车场停车操作,其等待时间是 0,在串口调试助手输出相应信息。释放信号量任务则是信号量的释放,释放信号量任务也是通过按下KEY2 按键进行信号量的释放,模拟停车场取车操作,在串口调试助手输出相应信息。
 


http://www.ppmy.cn/news/147252.html

相关文章

uC/OS-II 中文手册

uC/OS-II 中文手册 - 1 - 315 - 1 - 第一章 范例 在这一章里将提供三个范例来说明如何使用 μC/OS-II。笔者之所以在本书一开始就写 这一章是为了让读者尽快开始使用 μC/OS-II。在开始讲述这些例子之前,笔者想先说明一 些在这本书里的约定。 这些例子曾经用B…

uC/OS-II与uC/OS-III的区别

实时操作系统分为硬实时和软实时两类,两者的区别在于对于处理线程超时以及超时带来的后果的容忍度。 1、定位 uC/OS-II定位于8/16位以及底端32位的CPU uC/OS-III定位高端32以及高端16位的CPU 2、任务调度算法 uC/OS-II:优先级软件查表算法 uC/OS-III:有CLZ指令&…

ZCMU 1074-1079

1074: 求1&#xff0b;1/2&#xff0b;1/3&#xff0b;...&#xff0b;1/n Description 输入一个正整数 repeat (0<repeat<10)&#xff0c;做repeat 次下列运算&#xff1a; 读入 1 个正整数 n(n<50)&#xff0c;计算并输出1&#xff0b;1/2&#xff0b;1/3&#xff0…

uC/OS-II消息邮箱及其操作

如果要在任务与任务之间传递一个数据&#xff0c;可以用消息邮箱&#xff0c;它的原理是在存储器中建立一个数据缓冲区&#xff0c;然后就以这个缓冲区为中介来实现任务间的数据传递。 一. 消息邮箱的操作 1. 创建消息邮箱 OS_EVENT *OSMboxCreate (void *msg); 调用此函数…

uc7

回顾&#xff1a; 文件相关 - 文件锁、文件相关函数 目录相关函数 - 4个2个读目录的函数 文件锁主要是 读写锁&#xff0c;正确用法是 在调用读函数之前加读锁&#xff0c;在调用写函数之前加写锁&#xff0c;使用完毕后释放锁。如果需要一直等待加锁&#xff0c;可以F_SETLKW实…

uCOS-II总体介绍

第一篇 UCOS介绍 第一篇 UCOS介绍 这个大家都知道。呵呵。考虑到咱们学习的完整性还是在这里唠叨一下。让大家再熟悉一下。高手们忍耐一下吧&#xff01; uC/OS II(Micro Control Operation System Two)是一个可以基于ROM运行的、可裁减的、抢占式、实时多任务内核&#xf…

不仅清晰还要美 OPPO臻美自拍2000万像素再升级

这几天OPPO R11的曝光成为了科技圈的关注焦点。除了已经公布 R11前后置摄像头像素都将升级到2000万&#xff0c;并且使用2000万超清双摄之后&#xff0c;23日OPPO官方微博再次公布了关于R11自拍的信息——2000万臻美自拍&#xff1a;前置背景虚化&#xff0c;自拍更清新。 从OP…

关于uC/OS-II 概述

从应用程序设计的角度来看&#xff0c;uC/OS-II 的任务就是一个用户编写的 C 函数和与之相关 联的一些数据结构而构成的一个实体。把一个大型任务分解成多个小任务﹐然后在计算机中 通过运行这些小任务﹐最终达到完成大任务的目的。 在 uC/OS-II 中&#xff0c;与上述那些小…