Sysbios——同步和通信

Sysbios——同步和通信
Sysbios的同步和通信主要包括队列(Queue)、信号量(Semaphore)、邮箱(Mailbox)、事件(Event)、门(Gates)。
队列-Queue
要点:
1. 基于双向链表实现,可以在任意位置插⼊或删除元素,并且队列元素没有最⼤值。
2. 要在队列中增加结构体元素,这个元素的第⼀个字段必须是Queue_Elem类型的。
Queue APIs
信号量-Semaphore
要点
1. 信号量主要⽤于保护关键代码段,以及任务间的同步。
挑战者360
2. 信号量类型主要包括⼆进制、计数、带优先级的⼆进制、带优先级的计数信号量。
3. 信号量可以关联事件。
邮箱-Mailbox
要点
1. 邮箱被⽤于在同⼀处理器上将buffer从⼀个任务传递到另⼀个任务。
2. 创建邮箱时,需要指定邮箱内部buffer的个数和每个buffer的⼤⼩。邮箱实例中发送和接收的所有buffer的⼤⼩必须和这个⼤⼩相同。
耐腐蚀热电偶3. Mailbox_pend()被⽤于从邮箱读取⼀个buffer。如果邮箱是空的,那么Mailbox_pend()会阻塞。Timeout参数⽤于等待超时,⼀直等待使⽤BIOS_WAIT_FOREVER,不等待使⽤BIOS_NO_WAIT,时间单位为系统时钟节拍。
保健牙膏4. Mailbox_post()被⽤于发送⼀个buffer到邮箱。如果邮箱是满的,那么Mailbox_post()阻塞。Timeout参数⽤于等待超时,⼀直等待使⽤BIOS_WAIT_FOREVER,不等待使⽤BIOS_NO_WAIT。
转播车>电梯箱
5. 邮箱也可以关联事件。
⼯作原理
事件-Event
要点
1. 事件的使⽤与⼆进制信号量类似,如create、post、pend、delete等。
2. 事件可以等待多个事件全部发⽣(andMask),也可等待多个事件中任意⼀个事件发⽣(orMask)。
3. ⼀个事件实例最多可管理sizeof(UINT)个事件。
4. ⼀次只能有⼀个任务挂起在⼀个事件对象上。
Event相关APIs
门-Gates
要点
1. 门⽤于防⽌对临界区代码的并发访问。不同的实现的门尝试锁定临界区的⽅式不同。
2. 所有的门的实现通过"key"的使⽤来实现嵌套。只有使⽤最外⾯的Gate_enter()返回的key才能恢复抢占。
3. 基于抢占的门的实现:
a.GateHwi以禁⽤和使能中断作为锁定机制。这种门保证以独占形式访问CPU。当临界区被任务、Swi 或Hwi 线程共享时可以使⽤这种门。
b. GateSwi以禁⽤和使能软件中断作为锁定机制。当临界区被Swi 或任务线程共享时可以使⽤这种门。
c. GateTask以禁⽤和使能任务作为锁定机制。当临界区被任务线程共享时可以使⽤这种门。它不能⽤于Hwi或Swi线程。
4. 基于信号量的门的实现
a. GateMutex使⽤⼆进制信号量作为锁定机制。每个GateMutex实例有它⾃⼰独有的的信号量。
b. GateMutexPri是为了阻⽌优先级反转⽽实现“优先级继承”的互斥门(它仅能⼀次被⼀个线程使⽤)。
>脱硫装置

本文发布于:2024-09-21 16:46:43,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/3/196813.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:事件   邮箱   锁定   实现   信号量   机制   任务
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议