μC/OS-ii的任务与通信

μC/OS-ii使用信号量、事件标志组、邮箱和消息队列这些中间环节来显现任务之间的通信,这些中间环节统一被称为事件。

1.计数信号量

给共享资源设立一个标志,表示共享资源的占用情况,使用共享资源前,对这个标志进行查询,再决定自己的行为,函数主体在os_sem.c中
相关函数:

1.1 函数OSSemCreat

table 1. 函数OSSemCreat

函数名 OSSemCreat
函数原形 OS_EVENT *OSSemCreat(INTU16 cnt);
功能描述 创建信号量
输入参数 cnt:信号量的初始值,一般为0,可以取0到65535之间的任何值
输出参数
返回值 新建信号量的指针
先决条件
被调用函数

1.2 函数OSSemPost

table 2. 函数OSSemPost

函数名 OSSemPost
函数原形 INT8U OSSemPost(OS_EVENT *pevent));
功能描述 发送信号量,信号量的值加1
输入参数 pevent:所发送信号量的指针
输出参数
返回值 OS_NO_EVENT:发送成功;
OS_ERR_EVENT_TYPE:pevent不是信号量类型;
OS_SEM_OVF:信号量的值溢出;
先决条件
被调用函数

1.3 函数OSSemPend

table 3. 函数OSSemPend

函数名 OSSemPost
函数原形 INT8U OSSemPost(OS_EVENT *pevent,INT16U timeout,INT8U *err);
功能描述 等待(接收)信号量,信号量的值减1
输入参数1 pevent:所发送信号量的指针
输入参数2 timeout:等待信号量的最长时间,以时钟节拍为单位
输入参数3 err:函数执行效果的变量地址。
OS_NO_ERR :信号量不为零。
OS_TIMEOUT :信号量没有在指定数目的时钟周期内被设置。
OS_ERR_PEND_ISR :从中断调用该函数。虽然规定了不允许从中断调用该函数,但μC/OS-Ⅱ仍然包含了检测这种情况的功能。
OS_ERR_EVENT_TYPE :pevent 不是指向信号量的指针。
输出参数
先决条件
被调用函数

2.事件标志组

2.1 函数OSFlagCreat

table 4. 函数OSFlagCreat

函数名 OSFlagCreat
函数原形 OS_FLAG_GRP * OSFlagCreat(OS_FLAGS flags,INT8U *err);
功能描述 创建事件标志组
输入参数1 flags标志组中各标志的初始值:
输入参数2 err:函数执行效果的变量地址
输出参数
先决条件
被调用函数

2.2 函数OSFlagPost

2.3 函数OSFlagPend

3 消息邮箱

一个邮箱只能传送一个消息的地址

3.1 函数OSMboxCreat

3.2 函数OSMboxPost

3.3 函数OSMboxPostOpt

3.4 函数OSMboxPend

4.消息队列

消息队列可以存放多个消息,用一个指针数组构建消息队列,消息本身不参加排队,而是用指向不同消息的指针进行排队。

4.1 函数OSQCreat

4.2函数OSQPost

4.3 函数OSQPend

你可能感兴趣的:(嵌入式学习)