目录
以 Ubuntu 18.04 的TRUEStudio(版本号:9.1)转移至macOS/windows STM32CubeIDE(版本号:1.3.0)为例
转移的一般步骤
- Clean原TrueStudio工程(Project->Clean)
- 修改Makefile文件,可与已经移植过来的工程中Makefile作个文件对比
- 修改1,主要是编译器的选择
- 修改2,修改linker flags选项,主要与sprintf函数使用有关
- 增加-lrdimon -u _printf_float选项
- 修改-specs=nosys.specs为-specs=nano.specs
SHELL = sh
OBJECT_NAME = alwhalesStm32Project
# System configuration
CC = arm-none-eabi-gcc
CC_OBJCOPY = arm-none-eabi-objcopy
LINKER_FLAGS = -lm -mthumb -mcpu=cortex-m3 -Wl,--gc-sections -T$(LINK_SCRIPT) \
-static -Wl,--start-group -lc -lrdimon -u _printf_float \
-lm -Wl,--end-group -specs=nano.specs -Wl,-cref "-Wl,-Map=$(BIN_DIR)/$(OBJECT_NAME).map" \
-Wl,--defsym=malloc_getpagesize_P=0x1000
- 在STM32CubeIDE中再创建一个新的STM32工程。
- 将新创建的工程文件夹中的工程文件(.cproject & .project)拷贝(替换)到已导入的TrueStudio工程的工程文件夹中(先关闭该工程)
亦可以直接将已经成功移植过来的工程文件.cproject & .project替换原工程文件,然后直接用STM32F103CubeIDE导入已存在的项目到工作空间即可:
重新打开已导入的TrueStudio工程,修改部分参数(笔者没有采用系统自动生成的Makefile体系,采用了自定义Makefile文件),需要修改的如下图所示:
0.设置构建自动刷新的目录
1. 设置构建命令和构建位置
2. 删除定义的引用文件与源码文件(手动在Makefile文件中添加)
- ⌘+B 重新编译工程
- 重新设置调试过程(Run->Debug Configurations...)
⌘+F11 下载程序,调试(All done.)
sprintf函数报错处理
如果使用了int sprintf(char* str, const char *fmt, ...)函数,可能会在对应位置出现如下报错:
The float formatting support is not enabled, check your MCU Settings from "Project Properties > C/C++ Build > Settings > Tool Settings", or add manually "-u _printf_float" in linker flags.
初步判断错误类型为: Code analysis problem, 属于Codan Errors:
笔者的项目由于完全采用自己编写的Makefile文件,因此编译过程与这些错误无关,只需要按照它指示的要求在Makefile文件中linker flags中添加"-u _printf_float"选项即可(但是不能消除错误)。经过摸索,可以采取以下步骤“骗过”编译器,消除这个错误:
1. 重新打开自动生成Makefile文件功能
2. 此时的C/C++ Build->Settings出现了Tool Settings的选项
3.勾选Use float with printf from newlib-nano (-u _printf_float),并点击Apply and Close,此时错误会自动消除
4.再次取消自动生成Makefile文件功能,这个报错不会再次出现。
尚未查明原因的一个现象
STM32CubeIDE中自动生成的makefile文件中在linker flags 中有一个选项是-specs=nano.specs,而笔者用的选项是-specs=nosys.specs,这个选项的区别在于选择哪一个静态库。
已经观察到的一个区别是:
1.代码编译后的使用空间不一样:
nano库:
nosys库:
2.使用nosys库无论是否添加-lrdimon -u _printf_float选项都会报错:
The float formatting support is not enabled, check your MCU Settings from "Project Properties > C/C++ Build > Settings > Tool Settings", or add manually "-u _printf_float" in linker flags.