Skip to content

[bsp][esp32] fix FreeRTOS include order for C3/C6 builds - #11926

Closed
BernardXiong wants to merge 2 commits into
RT-Thread:masterfrom
BernardXiong:fix/esp32-freertos-v11-config
Closed

BernardXiong wants to merge 2 commits into
RT-Thread:masterfrom
BernardXiong:fix/esp32-freertos-v11-config

Conversation

@BernardXiong

@BernardXiong BernardXiong commented Oct 24, 2026 •

Copy link
Copy Markdown
Member

拉取/合并请求描述:(PR description)

为什么提交这份PR (why to submit this PR)

master 上的 ESP32-C3/C6 构建当前失败,并导致所有 PR 的 RT-Thread BSP Static Build Check 和 MemBrowse Memory Report 出现相同的红色检查(已在 master 的 run 40043597502、39929831359 复现)。

根因是 ESP-IDF 包中的 scons shim components/rtthread/scons/include/freertos/FreeRTOS.h 使用 #include_next 转发 <freertos/FreeRTOS.h>,要求 RT-Thread 的 FreeRTOS-Wrapper include 目录位于 shim 之后、ESP-IDF 自带的 components/freertos/FreeRTOS-Kernel/include(FreeRTOS V11)之前。

但两个包的 SConscript 由目录顺序决定加载顺序,而目录顺序并不稳定。当 ESP-IDF 包先被加载时,#include_next 解析到 V11 内核头,Wrapper 提供的配置默认值(configNUMBER_OF_CORES、configMINIMAL_STACK_SIZE、configUSE_PREEMPTION 等)未生效,编译 libraries/drivers/drv_uart.c 时报:

#error Missing definition: configNUMBER_OF_CORES must be defined in FreeRTOSConfig.h
#error Missing definition: configMINIMAL_STACK_SIZE must be defined in FreeRTOSConfig.h

你的解决方案是什么 (what is your solution)

  • 新增共享构建辅助 bsp/ESP/tools/freertos_include.py;
  • 在 PrepareBuilding() 之后,把 FreeRTOS-Wrapper 的 include 目录移动到 ESP-IDF shim 之后、FreeRTOS-Kernel 之前;
  • 同时把 BSP 自己的 idf_port/include / idf_port/include/freertos 前移。Wi-Fi/BLE attachconfig 会引入 ESP-IDF 的 components/freertos/config/include,原先它排在 BSP 配置之前,会选中 ESP-IDF 的 FreeRTOSConfig.h,导致 configTASK_NOTIFICATION_ARRAY_ENTRIES 未定义;
  • 在 ESP32_C3 与 ESP32_C6 的 SConstruct 中调用该辅助函数。

不修改 ESP-IDF 包本身,也不依赖包的加载顺序。

请提供验证的bsp和config (provide the config and bsp)

  • BSP: bsp/ESP/ESP32_C3, bsp/ESP/ESP32_C6

  • .config: 默认配置(pkgs --update-force 后构建)

  • action: 本地复现并验证:

  1. 强制 ESP-IDF-latest 先于 FreeRTOS_Wrapper-latest 加载(即 CI 失败时的顺序);
  2. 未应用修复时,drv_uart.o 报出与 CI 完全相同的 FreeRTOSConfig.h 缺失定义错误;
  3. 应用修复后,ESP32_C3 和 ESP32_C6 的 drv_uart.o 均编译通过;
  4. 对 ESP32_C3 的 devices.ble 和 devices.wifi attachconfig:修复前 idf_port/src/port.o 报 configTASK_NOTIFICATION_ARRAY_ENTRIES 错误,修复后编译通过。

同时确认修复后 include 顺序为:

ESP-IDF shim
FreeRTOS-Wrapper include/freertos
FreeRTOS-Wrapper include
FreeRTOS-Wrapper portable/rt-thread
ESP-IDF FreeRTOS-Kernel/include
...

当前拉取/合并请求的状态 Intent for your PR

必须选择一项 Choose one (Mandatory):

  • 本拉取/合并请求是一个草稿版本 This PR is for a code-review and is intended to get feedback
  • 本拉取/合并请求是一个成熟版本 This PR is mature, and ready to be integrated into the repo

代码质量 Code Quality:

我在这个拉取/合并请求中已经考虑了 As part of this pull request, I've considered the following:

  • 已经仔细查看过代码改动的对比 Already check the difference between PR and old code
  • 代码风格正确,包括缩进空格,命名及其他风格 Style guide is adhered to, including spacing, naming and other styles
  • 没有垃圾代码,代码尽量精简,不包含#if 0代码,不包含已经被注释了的代码 All redundant code is removed and cleaned up
  • 所有变更均有原因及合理的,并且不会影响到其他软件组件代码或BSP All modifications are justified and not affect other components or BSP
  • 对难懂代码均提供对应的注释 I've commented appropriately where code is tricky
  • 代码是高质量的 Code in this PR is of high quality
  • 已经使用clang-format 源码格式化工具确保格式符合RT-Thread代码规范 This PR has been formatted with clang-format and complies with RT-Thread code specification
  • 如果是新增bsp, 已经添加ci检查到.github/ALL_BSP_COMPILE.json 详细请参考链接BSP自查

ESP-IDF's scons shim forwards <freertos/FreeRTOS.h> with #include_next, so
RT-Thread's FreeRTOS-Wrapper must be searched after the shim but before
ESP-IDF's own FreeRTOS-Kernel V11 copy. Package SConscripts are evaluated
in directory order, which is not stable. When the ESP-IDF package happens
to be evaluated first, #include_next resolves the V11 kernel header and
the Wrapper configuration defaults are never applied, so the ESP32-C3/C6
builds fail with:

  #error Missing definition: configNUMBER_OF_CORES ...
  #error Missing definition: configMINIMAL_STACK_SIZE ...

Move the Wrapper include directories back to the position right after the
shim after PrepareBuilding(), in both BSPs, using a shared helper.

Verified on the ESP32-C3/C6 BSPs by forcing the failing package order:
drv_uart.c reports the errors above before the change and compiles after
it.

Co-authored-by: DeepSeek 4.1 Flash <noreply@deepseek.com>
@github-actions

Copy link
Copy Markdown

👋 感谢您对 RT-Thread 的贡献!Thank you for your contribution to RT-Thread!

为确保代码符合 RT-Thread 的编码规范,请在你的仓库中执行以下步骤运行代码格式化工作流(如果格式化CI运行失败)。
To ensure your code complies with RT-Thread's coding style, please run the code formatting workflow by following the steps below (If the formatting of CI fails to run).


🛠 操作步骤 | Steps

  1. 前往 Actions 页面 | Go to the Actions page
    点击进入工作流 → | Click to open workflow →

  2. 点击 Run workflow | Click Run workflow

  • Use workflow from 保持默认分支(通常为 master)
    Keep the default branch (usually master) in Use workflow from
  • 在 branch 输入框填写 PR 分支 fix/esp32-freertos-v11-config
    Enter PR branch fix/esp32-freertos-v11-config in the branch field
  • 设置需排除的文件/目录(目录请以"/"结尾)
    Set files/directories to exclude (directories should end with "/")
  1. 等待工作流完成 | Wait for the workflow to complete
    格式化后的代码将作为独立提交推送至你的分支。
    The formatting changes will be pushed to your branch as a separate commit.

完成后,提交将自动更新至 fix/esp32-freertos-v11-config 分支,关联的 Pull Request 也会同步更新。
Once completed, commits will be pushed to the fix/esp32-freertos-v11-config branch automatically, and the related Pull Request will be updated.

如有问题欢迎联系我们,再次感谢您的贡献!💐
If you have any questions, feel free to reach out. Thanks again for your contribution!

@github-actions github-actions Bot added BSP BSP: ESP32 BSP related with ESP labels Oct 24, 2026
@github-actions

github-actions Bot commented Oct 24, 2026 •

Copy link
Copy Markdown

MemBrowse Memory Report · Explore what changed →

No memory changes detected for:


Catch memory regressions in CI with MemBrowse. Free for open source.

Wi-Fi/BLE attachconfigs add ESP-IDF's components/freertos/config/include
to the include path, and it was searched before the BSP's
idf_port/include/freertos. The Wrapper's FreeRTOS.h then picked ESP-IDF's
FreeRTOSConfig.h, whose configTASK_NOTIFICATION_ARRAY_ENTRIES maps to
CONFIG_FREERTOS_TASK_NOTIFICATION_ARRAY_ENTRIES -- a symbol the RT-Thread
sdkconfig shim does not define -- and the ESP32-C3 BLE/Wi-Fi builds failed
with "configTASK_NOTIFICATION_ARRAY_ENTRIES must be at least 1".

Move the BSP idf_port include directories together with the Wrapper
include directories, so the BSP configuration is used.

Verified with the ESP32-C3 devices.ble and devices.wifi attachconfigs:
idf_port/src/port.o fails before the change and compiles after it.

Co-authored-by: DeepSeek 4.1 Flash <noreply@deepseek.com>
@GuEe-GUI

Copy link
Copy Markdown
Contributor

让 AI 把 idf 改成 scons 不就好了

@CYFS3

CYFS3 commented Oct 24, 2026

Copy link
Copy Markdown
Contributor

@Rbb666

Rbb666 commented Oct 25, 2026

Copy link
Copy Markdown
Member

RT-Thread-packages/esp-idf#19

需要先合并这个?

@CYFS3

CYFS3 commented Oct 25, 2026

Copy link
Copy Markdown
Contributor

RT-Thread-packages/esp-idf#19

需要先合并这个?

合并这个应该就能解决,不需要这个pr。我感觉这个直接在软件包那边解决会比较好,而不是在主仓库引入

@BernardXiong

Copy link
Copy Markdown
Member Author

RT-Thread-packages/esp-idf#19

需要先合并这个?

合并这个应该就能解决,不需要这个pr。我感觉这个直接在软件包那边解决会比较好,而不是在主仓库引入

可以确定下如何处理,这个PR应该是在处理其他PR时,AI (deepseek 4.1 flash 1017) 自动提上来的

@Rbb666

Rbb666 commented Oct 26, 2026

Copy link
Copy Markdown
Member

RT-Thread-packages/esp-idf#19

需要先合并这个?

合并这个应该就能解决,不需要这个pr。我感觉这个直接在软件包那边解决会比较好,而不是在主仓库引入

好的,我重启下ci看看是否解决

@Rbb666 Rbb666 closed this Oct 26, 2026
@Rbb666

Rbb666 commented Oct 26, 2026

Copy link
Copy Markdown
Member

RT-Thread-packages/esp-idf#19

需要先合并这个?

合并这个应该就能解决,不需要这个pr。我感觉这个直接在软件包那边解决会比较好,而不是在主仓库引入

可以确定下如何处理,这个PR应该是在处理其他PR时,AI (deepseek 4.1 flash 1017) 自动提上来的

熊大,这个pr就关掉了,RT-Thread-packages/esp-idf#19 已解决

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

BSP: ESP32 BSP related with ESP BSP

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants