网页视频加速器,凌哥seo节点,专门做网站关键词排名,什么是网站改版目录 各类方法的对比队列事件组信号量互斥量任务通知 各类方法的本质 使用全局变量可以实现通信#xff0c;但是使用全局变量会有一些缺陷。 那我们怎么保证通信的正确性呢#xff1f;#xff1f;#xff1f; 我们需要引入很多互斥的方法。除了互斥之外#xff0c;还需要高… 目录 各类方法的对比队列事件组信号量互斥量任务通知 各类方法的本质 使用全局变量可以实现通信但是使用全局变量会有一些缺陷。 那我们怎么保证通信的正确性呢 我们需要引入很多互斥的方法。除了互斥之外还需要高效率
互斥阻塞和唤醒 各类方法的对比 能实现同步、互斥的内核方法有任务通知(task notification)、队列(queue)、事件组(event group)、信号量(semaphoe)、互斥量(mutex)。 它们都有类似的操作方法获取/释放、阻塞/唤醒、超时。比如
任务A获取资源用完后任务A释放资源任务A获取不到资源则阻塞任务B释放资源并把任务A唤醒任务A获取不到资源则阻塞并定个闹钟A要么超时返回要么在这段时间内因为任务B释放资源而被唤醒。 这些内核对象五花八门记不住怎么办我也记不住通过对比的方法来区分它们。 能否传信息还是只能传递状态为众生所有任务都可以使用只为你只能指定任务使用我生产你们消费我上锁只能由我开锁
内核对象生产者消费者数据/状态说明队列ALLALL数据若干个数据 谁都可以往队列里扔数据 谁都可以从队列里读数据用来传递数据 发送者、接收者无限制 一个数据只能唤醒一个接收者事件组ALLALL多个位或、与 谁都可以设置(生产)多个位 谁都可以等待某个位、若干个位用来传递事件 可以是N个事件 发送者、接受者无限制 可以唤醒多个接收者像广播信号量ALLALL数量0~n 谁都可以增加一个数量 谁都可消耗一个数量用来维持资源的个数 生产者、消费者无限制 1个资源只能唤醒1个接收者任务通知ALL只有我数据、状态都可以传输 使用任务通知时 必须指定接受者N对1的关系 发送者无限制 接收者只能是这个任务互斥量只能A开锁A上锁位0、1 我上锁1变为0 只能由我开锁0变为1就像一个空厕所 谁使用谁上锁 也只能由他开锁 使用图形对比如下 队列 里面可以放任意数据可以放多个数据任务、ISR都可以放入数据任务、ISR都可以从中读出数据 事件组 一个事件用一bit表示1表示事件发生了0表示事件没发生可以用来表示事件、事件的组合发生了不能传递数据有广播效果事件或事件的组合发生了等待它的多个任务都会被唤醒 信号量 核心是计数值任务、ISR释放信号量时让计数值加1任务、ISR获得信号量时让计数值减1 任务通知 核心是任务的TCB里的数值会被覆盖发通知给谁必须指定接收任务只能由接收任务本身获取该通知 互斥量 数值只有0或1谁获得互斥量就必须由谁释放同一个互斥量 队列
队列就是一个传送带就是一个流水线先进先出 事件组
事件组就是事件的组合 左边我做完了某些事情我把某一位设置为1右边可以等待某一个事件也可以等待某几个事件还可以若干个事件中的某一个事件
信号量 信号量里面保存计数值假设左边生产饺子每生产一个饺子这个计数值就加1右边拿走一个饺子计数值就减一。
互斥量 信号量里保存到是各种计数值如果计数值是0或1那么这个信号量就变成了一个互斥量就是同一时间只能一个人使用厕所。 使用互斥量会产生优先级反转的问题于是它就提出了优先级继承这些方法来解决这些问题。
任务通知
任务通知是多对一的关系 各类方法的本质
这节课只是概述……
学习视频【FreeRTOS入门与工程实践 --由浅入深带你学习FreeRTOSFreeRTOS教程 基于STM32以实际项目为导向】 【精准空降到 00:03】 https://www.bilibili.com/video/BV1Jw411i7Fz/?p27share_sourcecopy_webvd_source8af85e60c2df9af1f0fd23935753a933t3 传送门