【问题标题】:FreeRTOS in LPC1343LPC1343 中的 FreeRTOS
【发布时间】:2016-11-28 07:01:17
【问题描述】:

我正在尝试将我的项目配置为适用于 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 时必须采取哪些步骤。
谢谢

【问题讨论】:

  • 首先要注意的是,如果您使用的是 LPC1343,那么包含 iolpc1342.h 可能是不正确的,并且与 iolpc1343.h 中的声明冲突。您必须弄清楚为什么要包含 iolpc1342.h(可能是通过一些嵌套包含和条件编译链 - 很可能您在某处设置了不适当的处理器类型宏定义。很可能与 FreeRTOS 没有什么特别的关系。跨度>
  • 我已经解决了第一个错误。我真的很想解决接下来的 2 个错误
  • 如果解决方案可能对社区有用,您或许应该从问题中删除第一部分或发布您自己问题的答案。

标签: embedded freertos lpc nxp-microcontroller


【解决方案1】:

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

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

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

【讨论】:

  • 是的,我读过它。但我仍然很困惑应该为每一个设置什么值,configKERNEL_INTERRUPT_PRIORITY configMAX_SYSCALL_INTERRUPT_PRIORITYconfigMAX_API_CALL_INTERRUPT_PRIORITY对于 LPC1343
  • 设置为非零值至少会允许它构建 - 根本不定义它不是一种选择。然而,使用的价值是一个不同的问题。我没有使用过 FreeRTOS,但如果还没有 LPC1xxx 端口,您至少可以从中进行初始工作设置,我会感到惊讶。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2021-09-21
    • 2019-09-22
    • 2014-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-24
    • 2018-06-08
    • 1970-01-01
    相关资源
    最近更新 更多