0%
本文演示使用event group 来替代二值信号量,在任务和任务间,以及中断服务函数和任务间进行事件同步。
事件组(event group)是FreeRTOS 为灵活处理任务间事件同步而提供的组件。相比消息队列或信号量,事件组提供了更灵活的事件同步方式。
本文介绍 FreeRTOS 中互斥量(mutex)的优先级继承特性,以及 FreeRTOS 是如何通过互斥量的优先级继承特性,来最小化优先级反转问题带来的负面影响
FreeRTOS 为多任务可以,安全地并发访问共享数据,提供了多种数据保护方案。例如,简单直接的关中断;关闭内核调度器;使用信号量。但应用开发最推荐的,是使用FreeRTOS提供的互斥量(mutex)来保护共享数据。
FreeRTOS提供的软件定时器,在使用上有几个需要开发者注意的事项。如软件定时器可以识别的基本时间单位,软件定时器服务任务的优先级设置的是否合适,以及软件定时器超时回调函数中不要使用会让当前任务(软件定时器服务任务)进入阻塞态的 FreeRTOS API。
cortex-m3/m4的硬件中断是可以嵌套的,即高优先级中断可以抢占正在处理的低优先级中断。在使用FreeRTOS时,该特性仍旧存在,但FreeRTOS为了在并发/并行访问资源的情况下,保护内核中的数据结构不被破坏,通过临界区做了一些限制,这使得并不是所有的高优先级中断都能抢占低优先级中断。
基于cortex-m3/m4内核,介绍FreeRTOS自己抽象出来的任务优先级概念,以及FreeRTOS任务调度涉及的硬件中断优先级。
CPU 缓存是 CPU 使用的一种硬件缓存,该缓存的存储空间小,但访问速度很快。该缓存中存储的是经常访问的主存数据的副本,目的是为了减少 CPU 访问数据的平均时间成本。
与二值信号量相比,计数信号量可以记录事件发生的次数。并且,还可以使用计数信号量对数量有限的资源进行访问管理。
FreeRTOS提供了信号量功能,通过使用信号量,可以实现任务和任务、中断服务函数和任务间的事件/信息同步。本文最后,还解释了为了什么FreeRTOS有两套API分别在中断/非中断环境下使用。