问题描述
打开Cubemx,添加TIM7用于定时器精准延时,生成代码后,Keil提示有147个error。
之前是Cubemx是没有问题的,是利用Cpp编写stm32(将Keil改为Version6)后才导致Cubemx配置失败:
debug成功图片:
解决办法
打开GitTortoise,打开日志
对比两个版本,版本1是正确的,版本2是Cubemx刷新后的错误的,将版本1的port.c和portmacro.h文件另存为当前代码存放的文件夹即可:
不要把文件搞错了:
然后编译运行即可!
port.c和portmacro.h是什么文件?
在STM32微控制器的开发中,port.c
和 portmacro.h
是与FreeRTOS实时操作系统(RTOS)相关的两个文件。FreeRTOS是一个开源的、可裁剪的、抢占式的实时操作系统,广泛用于嵌入式系统开发。
portmacro.h
portmacro.h
是一个宏定义文件,它包含了FreeRTOS在与硬件相关的操作中使用的宏。这些宏提供了一种抽象层,使得FreeRTOS的移植工作变得更加容易。通过定义这些宏,可以针对不同的硬件平台调整FreeRTOS的行为,而无需修改FreeRTOS的核心代码。
在portmacro.h
中,你可能会找到如下几种类型的宏:
- 任务创建和删除:用于创建和删除任务的宏。
- 互斥量操作:用于获取和释放互斥量的宏。
- 信号量操作:用于等待和发送信号量的宏。
- 中断管理:用于使能和禁用中断的宏。
- 临界区管理:用于进入和退出临界区的宏,以保护共享资源。
- 时钟管理:用于获取当前系统时间的宏。
port.c
port.c
是FreeRTOS的另一个源文件,它包含了与硬件紧密相关的代码,通常包括中断处理、上下文切换、tick计数等核心功能。
在port.c
中,你可能会遇到以下功能:
- 上下文切换:实现任务切换时保存和恢复寄存器状态的代码。
- tick处理:处理系统tick中断,通常用于更新系统时间以及检查超时的任务。
- 中断使能/禁用:控制中断使能和禁用的代码。
- 内存管理:管理FreeRTOS使用的内存,包括任务控制块(TCB)和堆内存。
STM32和FreeRTOS的移植
在STM32微控制器上移植FreeRTOS时,需要根据STM32的具体硬件特性来实现port.c
和portmacro.h
中的函数和宏。例如,你可能需要实现特定的中断处理逻辑,或者为STM32的内存管理单元(MPU)配置内存保护。
通常,STM32的标准外设库或HAL库已经提供了一些与硬件操作相关的函数,这些函数可以在port.c
和portmacro.h
中被利用,以简化移植工作。
注意事项
- 确保在使用FreeRTOS之前,你已经阅读了FreeRTOS的官方文档,了解其工作原理和API的使用。
- 在移植过程中,始终注意FreeRTOS对中断处理和上下文切换的要求,以避免造成系统不稳定。
- 根据你的应用需求,可能需要对
port.c
和portmacro.h
进行适当的修改和优化。