起因是想要使用cubeMX生成LWIP测试工程,裸机跑通后切换RTOS测试,用的测试板正好是MCU被替换为APM32F407的,下载进去程序不运行了。
随即仿真查看,发现程序卡在了xPortStartScheduler函数里,仔细查看发现是断言失败了
[C] 纯文本查看 复制代码 configASSERT( ( portMAX_PRIGROUP_BITS - ulMaxPRIGROUPValue ) == configPRIO_BITS );
分析发现是优先级寄存器存在问题,读回的值并不是0xF0
代码分析
查看手册发现,原来是APM32的中断优先级位数不同,ST的芯片都是4位,而APM存在3位的情况
手册描述
简单解决办法是调整FreeRTOSConfig.h中优先级宽度为3位、最低优先级为7
[C] 纯文本查看 复制代码 #define configPRIO_BITS 3
#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY 7
代码需要兼容ST的话,估计只能舍弃一些优先级,只使用3位
|