STMCU小助手
发布时间:2022-4-15 10:00
|
转移的一般步骤# O1 t# R9 v4 w# x Clean原TrueStudio工程(Project->Clean)' m! l* c' C8 r3 u6 }: r 修改Makefile文件,可与已经移植过来的工程中Makefile作个文件对比 修改1,主要是编译器的选择8 s( }- i1 D1 @2 r. G# P7 o 修改2,修改linker flags选项,主要与sprintf函数使用有关$ D1 @2 b# i/ u( o: ]! }% a* _" { 增加-lrdimon -u _printf_float选项) ?# ?) v4 J& e) T 修改-specs=nosys.specs为-specs=nano.specs
在STM32CubeIDE中再创建一个新的STM32工程。! h& d9 [' t4 [7 o0 _7 e
( E. ?, G# R! g" l5 c% X' v- z 将新创建的工程文件夹中的工程文件(.cproject & .project)拷贝(替换)到已导入的TrueStudio工程的工程文件夹中(先关闭该工程)" v* j: s2 x! ~3 l% N! h1 ~/ W M# j* r+ Z 亦可以直接将已经成功移植过来的工程文件.cproject & .project替换原工程文件,然后直接用STM32F103CubeIDE导入已存在的项目到工作空间即可:
6 ^" a8 M) g7 d b9 | 重新打开已导入的TrueStudio工程,修改部分参数(笔者没有采用系统自动生成的Makefile体系,采用了自定义Makefile文件),需要修改的如下图所示: ; W9 `* V1 ^7 w# B4 M# H9 K' F 0.设置构建自动刷新的目录 % O/ @2 z8 O: |2 J$ \6 Q# l& r
" T* F# C: `" x7 ~) x1 X 1. 设置构建命令和构建位置 5 ^0 u8 e2 ]/ ~. m
! l- u: I% `" G 2. 删除定义的引用文件与源码文件(手动在Makefile文件中添加)
⌘+B 重新编译工程
重新设置调试过程(Run->Debug Configurations...)
⌘+F11 下载程序,调试(All done.)1 m# G& B: U# K- P" d( s# V5 B- X# J" h sprintf函数报错处理, w' r4 d* q2 F: m X7 h- Q 如果使用了int sprintf(char* str, const char *fmt, ...)函数,可能会在对应位置出现如下报错:' o6 x3 a* ~: X/ ]7 }, E e * N3 p1 z- r2 F; K; C6 V
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.* [+ R0 Z9 t5 |4 o% d% e- r8 t 初步判断错误类型为: Code analysis problem, 属于Codan Errors:
0 W& B- L! d: _/ W7 s; v/ v6 E 笔者的项目由于完全采用自己编写的Makefile文件,因此编译过程与这些错误无关,只需要按照它指示的要求在Makefile文件中linker flags中添加"-u _printf_float"选项即可(但是不能消除错误)。经过摸索,可以采取以下步骤“骗过”编译器,消除这个错误:; B" U+ e+ M! N( P4 f 8 J+ F0 ]8 G# y+ a2 r( G 1. 重新打开自动生成Makefile文件功能
$ D: P- k5 ^. \4 | 2. 此时的C/C++ Build->Settings出现了Tool Settings的选项 1 p0 {! `+ l$ U
, Y" S' {' c6 \: ]% W5 L 3.勾选Use float with printf from newlib-nano (-u _printf_float),并点击Apply and Close,此时错误会自动消除
6 ?) B! s+ L/ J1 J, }- q, I7 \ 4.再次取消自动生成Makefile文件功能,这个报错不会再次出现。: c- N# [& p1 [ y J( L
. \; U/ c' z2 B+ e 尚未查明原因的一个现象; \: L: l$ [* i" h8 ~1 U2 i STM32CubeIDE中自动生成的makefile文件中在linker flags 中有一个选项是-specs=nano.specs,而笔者用的选项是-specs=nosys.specs,这个选项的区别在于选择哪一个静态库。5 W4 L% q0 k; Z& P9 E $ o. S; i: q2 ]( Y5 q 已经观察到的一个区别是:, r# g, |* K6 \* S* X 1.代码编译后的使用空间不一样: ( g3 H6 k+ g+ J nano库:
, ]/ Y8 |9 M7 Y. _; i/ v/ R$ j nosys库:- W" N2 }* N; x+ d5 q9 A6 z6 I
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. / O4 D% w0 n# G7 f' P$ V* }/ P8 P |
【经验分享】STM32语音识别的智能蓝牙音箱(源程序+原理图+PCB+设计说明书+PPT)
想找个ST芯片
[GPIO] 使用新型抽象开始C++嵌入式编程,从GPIO开始
技术手册stm32f1xx中的一个小问题
【经验分享】STM32 HAL库移植FreeModbus详细步骤
【逢7发帖赢大礼】STM32开发之IC门禁卡UID读取方法!
实战经验 | Keil工程使用NEAI库的异常问题
经验分享 | FDCAN数据段波特率增加后发送失败的问题分析
STM32几种流行开发环境的优缺点
好用软件推荐-TouchGFX Designer
微信公众号
手机版