SocialButterfly 发表于 2025-5-22 11:00

想生成FreeRTOS的静态库有错误

尝试生成一个静态库,该库调用下面列出的 FreeRTOS 函数 -
[*]osThreadDef 和 osThreadCreate
[*]osSignalSet 和 osSignalWait
[*]osDelay
[*]osMutexCreate等。
在 STM32 的 System Workbench 中如果不在项目中包含 FreeRTOS 库,会收到错误:         Type 'osThreadId' could not be resolved         'osPriorityNormal' undeclared (first use in this function)在项目中包含 FreeRTOS 库时,也收到相同的错误。

laocuo1142 发表于 2025-5-22 16:17

头文件路径配置有误吧。

flycamelaaa 发表于 2025-5-22 16:18

可能是头文件路径问题。

stormwind123 发表于 2025-5-22 16:23

检查FreeRTOS 配置是否完整。

jcky001 发表于 2025-5-22 16:25

静态库和主应用程序要使用相同的 FreeRTOS 配置。

powerantone 发表于 2025-5-22 17:00

编译器定义缺失?

probedog 发表于 2025-5-22 18:00

可能是链接时缺少必要的 FreeRTOS 源文件。

公羊子丹 发表于 2025-5-24 09:05

你这个问题看起来像是头文件路径没配置对,检查一下 CMSIS-RTOS 的 include 目录加进去了没。

周半梅 发表于 2025-5-24 09:05

osThreadId 和 osPriorityNormal 是 CMSIS-RTOS 定义的,记得加上 cmsis_os.h。

帛灿灿 发表于 2025-5-24 09:06

如果你用了 FreeRTOS 而不是 CMSIS wrapper,要注意 API 不一样,比如 osThreadCreate 不是原生函数。

童雨竹 发表于 2025-5-24 09:07

System Workbench 的索引器有时识别不了类型,试试 Clean 再重新 Index rebuild 一下。

万图 发表于 2025-5-24 09:08

你是生成 .a 库文件?那记得头文件也要随库一起给主工程用,不然类型解析不了。

Wordsworth 发表于 2025-5-24 09:08

静态库里不能漏掉 FreeRTOSConfig.h,这个是核心配置文件,不然一堆符号会找不到。

Bblythe 发表于 2025-5-24 09:09

检查一下链接阶段有没有把 FreeRTOS 的 C 源码也编译进库,不然声明有定义没也会报错。

Pulitzer 发表于 2025-5-24 09:10

osPriorityNormal 是宏定义,确认你没有定义顺序错了,FreeRTOSConfig 应该优先包含。

Uriah 发表于 2025-5-24 09:11

如果主工程和库工程都有 FreeRTOS 相关配置,注意别冲突,最好统一 FreeRTOS 版本和头文件。

Clyde011 发表于 2025-5-24 09:12

我建议先用一个能跑 FreeRTOS 的最小工程验证,跑通后再封装静态库比较容易排错。
页: [1]
查看完整版本: 想生成FreeRTOS的静态库有错误