想生成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 库时,也收到相同的错误。
头文件路径配置有误吧。 可能是头文件路径问题。 检查FreeRTOS 配置是否完整。 静态库和主应用程序要使用相同的 FreeRTOS 配置。 编译器定义缺失? 可能是链接时缺少必要的 FreeRTOS 源文件。 你这个问题看起来像是头文件路径没配置对,检查一下 CMSIS-RTOS 的 include 目录加进去了没。 osThreadId 和 osPriorityNormal 是 CMSIS-RTOS 定义的,记得加上 cmsis_os.h。 如果你用了 FreeRTOS 而不是 CMSIS wrapper,要注意 API 不一样,比如 osThreadCreate 不是原生函数。 System Workbench 的索引器有时识别不了类型,试试 Clean 再重新 Index rebuild 一下。 你是生成 .a 库文件?那记得头文件也要随库一起给主工程用,不然类型解析不了。 静态库里不能漏掉 FreeRTOSConfig.h,这个是核心配置文件,不然一堆符号会找不到。 检查一下链接阶段有没有把 FreeRTOS 的 C 源码也编译进库,不然声明有定义没也会报错。 osPriorityNormal 是宏定义,确认你没有定义顺序错了,FreeRTOSConfig 应该优先包含。 如果主工程和库工程都有 FreeRTOS 相关配置,注意别冲突,最好统一 FreeRTOS 版本和头文件。 我建议先用一个能跑 FreeRTOS 的最小工程验证,跑通后再封装静态库比较容易排错。
页:
[1]