成立这个专栏的目的是,记录自己嵌入式开发遇到的问题,与成功的解决方法,方便自己回顾。
描述一下这个坑是怎么(发现)踩到的:
之前我的开发方法是CubeMX生成CubeIDE工程,再通过VScode中的EIDE插件开发的。在EIDE中操作步骤为:导入项目-->Eclipse工程。然而这个方法在裸机开发的时候是没有任何问题的,但是到了实时操作系统层面,貌似就有了一点“小”问题;
现象描述:
在FreeRTOS使用中,一旦涉及到信号量的操作,上述办法就行不通,主要表现为系统卡死,DEBUG发现,系统进断言,然后关闭了系统的中断,跑空循环;
然而在CubeIDE中,同样的.c文件,编译之后确实可以使用信号量的,后期查看CubeIDE的工具链选项与EIDE的工具链选项,发现有较大的不同;
这个还需要有关大佬解答下,是否真是这个原因,愿意提供相关工程文件
解决办法:
由于VScode开发属实太香了,感觉可以薄纱keil,所以方法描述还是在VScode中进行开发
1.在CubeMX生成选项修改为Makefile选项
2.在EIDE中选择新建项目->空项目->Cortex-M项目
注意事项:项目名称最好跟你在CubeMX中设置的一致+存放路径设置在MX生成的上一级,这样可以合并,方便在VScode中操作MX生成的文件
3.将.s汇编文件拖入到core文件夹中(注意此步非常重要!!!!)
否则会链接过程中找不到入口,编译下载失败!!!!
4.根据makefile文件设置EIDE
cpu
-mcpu=cortex-m3
全局宏定义
C_DEFS = \
-DUSE_HAL_DRIVER \
-DSTM32F103xB
包含路径
C_INCLUDES = \
-ICore/Inc \
-IDrivers/STM32F1xx_HAL_Driver/Inc \
-IDrivers/STM32F1xx_HAL_Driver/Inc/Legacy \
-IDrivers/CMSIS/Device/ST/STM32F1xx/Include \
-IDrivers/CMSIS/Include
然后就是项目资源和gcc配置的修改,就可以开开心心的开发了,实测添加了实时操作系统也不会卡死了