一、问题背景
APM32的中断优先级是用bit[7:5]来管理的,理论上只能有8个优先级。STM32优先级用bit[7:4]来管理,理论上有16个优先级。
APM32优先级寄存器的bit[4]没有用,读出默认是0.
但cube只要选了freertos后,优先级分组只能选NVIC_PRIORITYGROUP_4,不能改为NVIC_PRIORITYGROUP_3. 但似乎也没啥大影响,只是会对优先级进行截断,比如设置的优先级是5,实际是4,设置为11,实际是10。所以在cube里默认配置,同时编程人员自己心理清楚真实的优先级就行了。
但实际运行中,发现freertos启动不起来。和官方历程对比后,发现需要在“FreeRTOSConfig.h”中,手动屏蔽configASSERT即可 。如下所示:
// #define configASSERT( x ) if ((x) == 0) {taskDISABLE_INTERRUPTS(); for( ;; );}
1
二、原因
如果开启了configASSERT, freertos中,会到处检查优先级的配置是否正确。cube中启动了rtos后,只能设置stm32的优先级分组为NVIC_PRIORITYGROUP_4,而实际APM32的优先级分组为NVIC_PRIORITYGROUP_3,所以导致很多configASSERT检查失败,跳到了死循环里。
原文链接:https://blog.csdn.net/chshch83/article/details/126678771
|