这会想了想,在复习资料后,最后再做个核心代码分析
ucos中使用信号量、消息邮箱、消息队列,这些数据结构来作为通信中间媒介。这些数据结构会影响任务的程序流程,因此也叫做事件。
一、信号量
是进行任务通信的最基本事件
二值信号可以实现共享资源的独占,也叫互斥信号量。
注意:使用信号量的时候要,高优先级的任务等待接受信号量的时候,高优先级的任务在等待接受信号量的时候,如果低优先级的任务没有释放信号量,那就会一直等待下去,那低优先级的任务就没有机会运行了,系统就出现死机的状况了。
二、消息邮箱:
三、消息队列
四、事件的等待任务列表
下面对等待任务的记录和排序的处理:
下面是等待任务的等待时限的处理:
五、事件控制块
OSEventType 可取的值
OS_EVENT_TYPE_MUTEX 表明事件是互斥型信号量
OS_EVENT_TYPE_MBOX 表明事件是消息邮箱
OS_EVENT_TYPE_Q 表明事件是消息队列
OS_EVENT_TYPE_UNUSED 空事件控制块(未被使用的事件控制块)
EventWaitListInit
OS_EventTaskWait() 请求事件不能成功
事件控制块链表也有空和工作中的2种区分,类似于任务控制块,就不多说了
七、信号量详细
重要组成:类型
1.创建信号量
OSSemCreat(cnt)------------设置类型 设置初始化计数 设置指向缓冲区为空 初始化事件控制块
2.请求信号量
OSSemPend(信号量指针
OSsemAccept(信号量) 信号量无效时,任务直接继续运行
3.释放信号量
OSSemPost(信号量指针)
4.删除信号量
OSSemDel(信号量名、条件选项、错误信息)
5.查询信号量状态
OSSemQuery()
八、优先级反转和互斥量
九、互斥量
1.创建互斥量
OSMutexCreat(提升的优先级 错误信息)
2.请求互斥量
OSMutexPend(互斥量指针
OSMutexAccept(互斥量指针
3.释放互斥量
OSMutexPost(互斥量指针)
4.获取互斥量的当前状态
OSMutexQuery(互斥量指针
5.删除互斥量
OSMutexDel(互斥量指针 直接删除还是等待任务执行完删
十、消息邮箱
1.OSMboxCreat(msg)
消息邮箱 :设置类型为消息邮箱类型;设置指针为空,或指向缓冲区;设置cnt为0;初始化ECB
2.OSMboxPost(消息邮箱的指针, 消息缓冲区指针)
发送消息邮箱