0

我正在尝试将我的项目配置为适用于 LPC1343 的 FreeRTOS。但我收到以下错误

Error[Pe020]: identifier "configMAX_SYSCALL_INTERRUPT_PRIORITY" is undefined C:\Users\IAR Embedded Workbench\FreeRTOS\Source\queue.c 952 


Fatal Error[Pe035]: #error directive: configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to 0.  See  C:\Users\IAR Embedded Workbench\FreeRTOS\Source\portable\IAR\ARM_CM3\port.c 82

你能帮我解决这些错误吗?我还想知道在将 FreeRTOS 配置到我的 LPC1343 时必须采取的步骤。
谢谢

4

2 回答 2

0

configMAX_SYSCALL_INTERRUPT_PRIORITY在第一次遇到 queue.c 的第 952 行时, 显然没有定义。

当显式测试值而不是存在时,未定义的宏的值为零;因此#error指令输出。也就是说,如果 sayABC是未定义的,那么#if defined ABC它是假的,但#if ABC==0会是真的。

configMAX_SYSCALL_INTERRUPT_PRIORITY应按此处所述在 FreeRTOSConfig.h 中定义,并且可能不为零。请务必阅读有关设置此值的所有说明 - Cortex-M3 端口有特殊注意事项。

于 2016-11-28T11:02:16.550 回答
0

所需的值取决于微控制器系列。这有点棘手,这就是为什么在这里尝试解释它的原因:http ://www.freertos.org/RTOS-Cortex-M3-M4.html 您需要知道实现了多少中断优先级位(在硬件)在您的 LPC 设备上,然后设置常量以匹配它。如果您使用的是 FreeRTOS 的前沿版本并定义了 configASSERT() ,那么它应该会告诉您是否弄错了。您也可以通过将 0xFF 写入中断优先级寄存器来手动解决此问题,然后读回寄存器值以查看有多少 8 位“卡住”。如上面链接所述,这些位将是最高有效位,而不是最初预期的最低有效位。

于 2016-11-29T19:43:43.253 回答