2016-11-28 93 views
0

我正在尝试将我的项目配置为LPC1343的FreeRTOS。但我发现了以下错误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采取措施。
谢谢

+0

首先要注意的是,如果您使用的是LPC1343,那么包含iolpc1342.h可能不正确,并与iolpc1343.h中的声明冲突。你必须弄清楚为什么包含iolpc1342.h(可能通过嵌套包含和条件编译链 - 很可能你在某个地方设置了不适当的处理器类型宏定义。很可能没有什么特别的与FreeRTOS相关的。 – Clifford

+0

I已经解决了第一个错误,我真的很喜欢接下来的两个错误的解决方案 –

+0

然后,你应该或者从你的问题中删除第一部分,或者如果解决方案可能对社区有用,则发布自己的问题的答案。 – Clifford

回答

0

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

当明确测试值而非存在时,未定义的宏值为零;因此#error指令输出。也就是说,如果ABC未定义,则#if defined ABC为false,但#if ABC==0将为true。

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

+0

是的,我读到它。但我仍然困惑什么样的价值应为每个这些设置, ''configKERNEL_INTERRUPT_PRIORITY' 'configMAX_SYSCALL_INTERRUPT_PRIORITY'对于configMAX_API_CALL_INTERRUPT_PRIORITY' LPC1343 –

+0

设置为非零值将至少它允许建立 - 根本不定义它不是一种选择。然而,使用的价值是一个不同的问题。我没有使用过FreeRTOS,但是如果还没有一个LPC1xxx端口,你至少可以进行初始工作设置,那么将会感到惊讶。 – Clifford

0

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