STM32F4开发板添加FreeRtos后在Clion中编译报错

文章描述了在STM32F4开发板上移植FreeRTOS后,在Clion中遇到编译错误。问题源于CmakeLists.txt配置,尤其是硬浮点运算选项。通过添加特定的编译和链接选项,如ARM_MATH_CM4等,最终成功解决了编译问题,使得项目能够正常运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目场景:

STM32F4开发板添加FreeRtos后在Clion中编译报错


问题描述

通过STM32CubeMX选择STM32F407ZGT6开发板,移植FreeRtos后直接进行编译后报错:

 Error: selected processor does not support `vstmdbeq r0!,{s16-s31}' in Thumb mode
Error: instruction not allowed in IT block -- `stmdb r0!,{r4-r11,r14}'


原因分析:

CmakeLists.txt配置出错

CmakeLists.txt文件中有一部分编译选项默认是被注释掉的,找到相关选项取消注释即可

但是将硬浮点运算的选项取消注释后再次编译还是存在报错,查阅相关资料后发现添加如下内容即可


解决方案:

具体内容如下

add_compile_definitions(ARM_MATH_CM4;ARM_MATH_MATRIX_CHECK;ARM_MATH_ROUNDING)
add_compile_options(-mfloat-abi=hard -mfpu=fpv4-sp-d16)
add_link_options(-mfloat-abi=hard -mfpu=fpv4-sp-d16)#Uncomment for software floating point

编译后成功运行

 具体原因我也不清楚,对Cmake不太理解,基本都是自动生成直接用,恳请各位大佬指教!

<think>好的,我现在要帮用户规划软硬件结合学习嵌入式系统的路线和建议。首先,我需要理解用户的需求,他们可能是一个刚开始学习嵌入式的学生或者转行者,想要系统地掌握软硬件结合的知识。用户可能对从哪里开始、学什么内容、如何实践等方面有疑问。 首先,我应该考虑嵌入式系统的基础知识。包括硬件部分,比如微控制器、数字电路,以及软件部分,如C语言和实时操作系统。然后需要将这些知识结合起来,比如通过GPIO控制、外设驱动开发等。接下来是进阶内容,如通信协议、低功耗设计,以及软件层面的算法优化和系统架构设计。 用户可能还需要项目实践的建议,因为嵌入式学习非常注重动手能力。我应该推荐一些典型的项目,比如智能家居控制、工业传感器节点,并提到参与开源项目的重要性。同时,软硬件协同设计的方法论也很关键,比如需求分析和模块化设计。 工具链和开发环境也是学习的一部分,包括IDE、调试工具、版本控制等。持续学习方面,关注行业动态和技术更新,参加社区活动,考取相关证书可能对用户有帮助。 最后,用户可能希望知道学习路线的时间安排,但每个阶段的时间因人而异,需要强调基础的重要性,避免跳过基础知识直接做项目。此外,推荐一些书籍和在线资源,比如《C和指针》、STM32官方文档,以及在线课程平台。 在生成相关问题时,要覆盖学习路线、必备知识、软硬件协同方法、项目实践、工具推荐、学习误区、职业方向以及提升途径等方面,帮助用户全面了解嵌入式系统学习的方向。</think>### 嵌入式系统软硬件结合学习路线及建议 #### 一、基础阶段(3-6个月) 1. **硬件基础** - 掌握数字电路基础:逻辑门电路、时序分析、ADC/DAC原理[^2] - 学习常用元器件:电阻/电容特性、传感器原理、电机驱动电路 - 推荐开发板STM32系列(Nucleo/F4)、ESP32(含WiFi/BLE) 2. **软件基础** - C语言核心:指针操作、内存管理、数据结构实现 - 嵌入式编程:寄存器操作、中断服务程序(ISR)编写 - 开发环境:Keil µVision、STM32CubeIDE、VSCode+PlatformIO ```c // 典型GPIO控制代码(STM32 HAL库) void LED_Control(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState) { HAL_GPIO_WritePin(GPIOx, GPIO_Pin, PinState); // 插入延时保证信号稳定 HAL_Delay(10); } ``` #### 二、进阶阶段(6-12个月) 1. **硬件设计能力** - PCB设计:Altium Designer/Eagle 四层板设计 - 信号完整性:阻抗匹配、电磁兼容设计(EMC) - 功率管理:DC-DC转换电路设计、低功耗模式实现 2. **系统开发** - RTOS应用:FreeRTOS任务调度、互斥锁使用 - 通信协议栈:实现自定义CAN总线协议、LoRaWAN组网 - 驱动开发:LCD触摸屏驱动、文件系统移植 $$ \text{中断响应时间} = T_{hw} + T_{sw} = \sum_{i=1}^{n}(t_{isr_i}) + t_{context\_switch} $$ #### 三、实战阶段(持续进行) 1. **典型项目设计** - 工业级温控系统:PID算法实现+RS485通信 - 智能穿戴设备:BLE协议栈+低功耗优化 - 机器人控制系统:步进电机控制+SLAM算法集成 2. **软硬件协同设计方法** - 需求分析时同步考虑硬件资源约束 - 采用模块化设计:将系统分解为感知层、决策层、执行层 - 实施持续集成:硬件仿真(Proteus)+自动化测试框架 #### 四、工具链建设 | 工具类型 | 推荐工具 | 应用场景 | |----------------|--------------------------|--------------------------| | 硬件设计 | Altium Designer/KiCad | PCB设计与仿真 | | 嵌入式IDE | STM32CubeMX+CLion | 代码生成与跨平台开发 | | 调试工具 | J-Link+Ozone | 实时跟踪与性能分析 | | 版本控制 | Git+Repo | 多模块项目管理 | #### 五、持续学习建议 1. 关注RISC-V架构发展(如GD32V系列开发板) 2. 学习Linux嵌入式开发:Yocto项目构建、设备树编写 3. 参与开源硬件社区:PlatformIO插件开发、Arduino核心贡献
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值