信号量、邮箱、队列与事件
来源:互联网 发布:vb调用ffmpeg 编辑:程序博客网 时间:2024/05/14 23:41
信号量,邮箱,队列的最大不同在于它们发送的内容不同。
信号量是一个触发信号,也是一个计数器,等待接收信号的任务一般只有接收到信号才可以执行,否则任务一直暂停。
邮箱是信号量的扩展,相当于把一个指针定义的变量从一个任务传递到另一个或多个任务中去,这个指针是先发到邮箱,然后等待任务从邮箱里提取指针,这也就传递了指针指向的具体变量值。
队列是多个邮箱的数组,可以看做是个指针数组,任务之间可以按照一定顺序以指针定义的变量来传递,即是发送一个个指针给任务,任务获得指针,来处理指向的变量。这个方式有先进先出,先进后出。
信号量就是给某个任务传递一个数值,基本作用是提示接收该信号量的任务什么时候可以执行。
消息邮箱就是由某个任务传递一个指针(内存上指针指向的一片区域的变量类型基本相同)给一个或多个任务。
消息队列就是某个任务传递一堆指针(指针数组,数组中每个指针指向的变量类型可以不同)给一个或多个任务。
事件就是发生了一件事情,接下来要触发某种动作。例如,收到了一个信号量或消息队列,或者是定时任务到要触发某种任务要运行。
在μC/OS-II中总共有34个,而且每种事件具有的管理函数数目不同。但是所有的事件都有类似的6个函数,它们是所有事件的基本功能,其函数名类似,使用方法也类似,详细函数见下表。
任何一个事件,必须先创建后使用。创建事件是通过调用函数OS???Create()实现的,其中???为事件的类型。创建事件可以在main()函数中,但更多的是在任务初始化部分。使用方法如下:
在嵌入式系统中,事件是静态使用的,即创建后永远不删除。但有时候需要动态使用,即根据需要创建和删除事件,此时创建事件就是在任务的事件执行代码中,使用方法如下:
要掌握事件函数在中断服务程序中的调用规则,我们必须清楚中断服务有哪些特点。
下面给出事件在中断服务程序中使用方法,假设Task0任务接收ISR发送的消息,任务代码如下:
注意:
1.中断服务程序一般不会调用建立和删除事件函数,否则要么没有起到事件的作用,要么程序很复杂;
2.中断服务程序不能调用等待事件的函数,否则可能造成程序崩溃,可以调用无等待获得事件函数获得信号,但事实上,在中断中调用无等待获得事件的情况都很少。
- 信号量、邮箱、队列与事件
- 信号量、邮箱和消息队列
- (转)ucos的事件 任务的通讯和同步 信号量 互斥量 消息邮箱 消息队列
- ucos2 事件 任务的通讯和同步 信号量 互斥量 消息邮箱 消息队列
- ucosII 关于事件控制块,信号量,邮箱,消息队列,自己的理解。
- 2011-04-11 信号量 邮箱 队列
- 任务,信号量、邮箱、队列及其区别
- 邮箱与信号量相关问题
- ucos邮箱与队列
- 嵌入式操作系统之信号量,消息队列,邮箱的区别
- UCOS-II任务间通信(信号量、邮箱、消息队列)
- 互斥量、临界区、信号量、事件标志组和消息邮箱
- 互斥量、临界区、信号量、事件标志组和消息邮箱
- 互斥量、临界区、信号量、事件标志组和消息邮箱
- 互斥量、临界区、信号量、事件标志组和消息邮箱
- 互斥量、临界区、信号量、事件标志组和消息邮箱
- Ucos学习之邮箱与消息队列
- ucosii---------信号量&邮箱
- 非常详细的docker笔记
- 搭建阿里云服务器环境(OpenResty+PHP 7+MySQL5.7)
- visual studio 2015怎么把英文界面变成中文界面?
- QT4.8.6/QT Creator Windows环境下安装与配置
- Mongodb集群搭建
- 信号量、邮箱、队列与事件
- ROS官网初级教程学习总结(1-4)
- css中的z-index属性
- hdu-1087 Super Jumping! Jumping! Jumping!
- linux 安装 jdk
- 数据库知识点复习之数据库系统概述
- 基于宝塔面板(bt)+ 阿里云ECS + WordPress 搭建个人主页(以独立博客为例)
- 【LectCode】222. Count Complete Tree Nodes
- SQL语句