要点:
1.Priority数值越大,优先级越高。空闲任务的优先级是 0
2.STM32优先级组最好设为4,即16个抢占优先级
3.同优先级的任务是按分时间片(如5个RTOS时钟节拍)运行的
4.临界段是不能被 优先级 <= RTOS设置的优先级(configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY)的中断打断的
5.优先级 <= RTOS设置的优先级(configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY)的中断里面可以调用FreeRTOS 的 API 函数,优先级 > 的中断里面不能调用FreeRTOS 的 API 函数。
6. configMAX_PRIORITIES 的最大值最好不要超过 32,即用户任务可以使用的优先级范围是0到31。
7,处于调度锁开和调度锁关之间的代码在执行期间是不会被高优先级的任务抢占的,即任务调度被禁止
8,任务间事件标志组可以在各个任务之间或者中断函数跟任务之间实现任务的通信或者同步。
9,中断函数的执行时间越短越好,防止其它低于这个中断优先级的异常不能得到及时响应。
10,使用事件标志组可以有效地解决中断服务程序和任务之间的同步问题。
11,使用消息队列可以有效地解决中断服务程序与任务之间消息传递的问题
12,建议不要在中断中实现消息处理,用户可以在中断服务程序里面发送消息通知任务,在任务中实现消息处理,这样可以有效地保证中断服务程序的实时响应。
13,软件定时器通过回调函数实现相应的功能
14,信号量可以实现两个任务之间或者中断函数跟任务之间的同步(二值信号量),也可以管理多个共享资源(计数信号量)
15,计数信号量支持的最大计数值为1是,等同于二值信号量
16,互斥信号量可以解决优先级翻转问题,二值信号量不能
17,互斥信号量仅支持用在 FreeRTOS 的任务中,中断函数中不可使用。
18,Suspend 挂起 Mutexes 互斥信号 Semaphoren 信号量 Queues 消息队列
Kernel 核心 Trace 追踪 Event 事件
19,消息邮箱就是消息队列长度为 1 的情况
20,任务通知方式实现的计数信号量,二值信号量,事件标志组和消息邮箱是通过修改变量 ulNotifiedValue 实现的。
21,如果使用任务消息邮箱和消息队列都能实现相应功能,强烈建议使用任务消息邮箱,计数信号量、二值信号量和事件标志组也是一样。
22,任务创建、信号量、消息队列、事件标志组、互斥信号量、软件定时器组等需要的 RAM 空间都是通过动态内存管理从 FreeRTOSConfig.h 文件定义的 heap 空间中申请的
23,heap_4 动态内存管理支持内存碎片的回收并将其整理为一个大的内存块,但 heap 空间是连续的。
24,可以通过独立看门狗的形式来监测所有用户任务的正常运行,一旦发现有某个任务长时间没有执行,看门狗就会将系统复位。
25,FreeRTOS 支持的低功耗模式是通过 tickless 低功耗机制实现的 |