μ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.消息队列
消息队列可以存放多个消息,用一个指针数组构建消息队列,消息本身不参加排队,而是用指向不同消息的指针进行排队。