关于RTOS的笔记之二

时间:2021-10-28 20:13:32

1、STM32中断优先级和FreeRTOS中断优先级的关系
Freertos本身没有优先级,只能通过配置文件进行管理STM32的硬中断,比如设置中断优先级数为16,FreeRTOS可管理的
优先级数大于5,则说明FreeRTOS只能屏蔽优先级小于5的优先级数(数值大于5),优先级大于5的级数则不能被屏蔽

2、STM32中断优先级与任务优先级的关系
没有任何关系,中断优先级永远比任务优先级要高。只有任务优先级之间才有比较的可能。

3、任务优先级怎么分配
从高到低

IRQ 任务:IRQ 任务是指通过中断服务程序进行触发的任务,此类任务应该设置为所有任务里面优先级最高的。

高优先级后台任务:比如按键检测,触摸检测,USB 消息处理,串口消息处理等,都可以归为这一类任务。

低优先级的时间片调度任务:比如 emWin 的界面显示,LED 数码管的显示等不需要实时执行的都可以归为这一类任务。
实际应用中用户不必拘泥于将这些任务都设置为优先级 1 的同优先级任务,可以设置多个优先级,只需注意这类任务不
需要高实时性。

空闲任务:空闲任务是系统任务。
特别注意:IRQ 任务和高优先级任务必须设置为阻塞式(调用消息等待或者延迟等函数即可),只有
这样,高优先级任务才会释放 CPU 的使用权,,从而低优先级任务才有机会得到执行。

4、关于队列
在没有操作系统时,两个应用程序进行消息传递一般使用全局变量的形式,但是在才做系统中用全局变量来传递消息就会
涉及到资源管理的问题,FreeRTOS提供了一个叫做“队列”的东西来完成任务与任务,任务与中断之间的消息传递。
队列发送在任务中有阻塞时间,在中断中则不存在阻塞时间

5、全局标志可以用二值型信号量来进行消息传递,也可以用任务通知功能模拟二值型信号量来进行消息传递

6、空指针指没有定位内存的指针,值为null(0),你使用new或者malloc申请了指针p,使用后delete或者free,
你必须将指针值设置为null,否则,p将成为一个非法指针,后续代码如果使用到该指针有可能会造成系统崩溃(内存不可以读不可写),
或者,破坏自身有效内存数据(释放后,又在申请作为别的用途,恰巧系统分配了同一块内存)