STMCU小助手
发布时间:2023-6-29 22:21
|
1. 前言 编译警告对于工程师们来说,是再常见不过的东西了。对于严谨的工程师们,任何 warning 都是不会忽视的。# \4 V p3 C* ]1 M: D # w; d( r% N3 V, D 2. 巧妙使用 warning 在 STM32CubeIDE 中可以通过warning(甚至 error)的方式来通知工程师,使得一些容易遗漏的配置得到重视。 & U8 [! ?9 R# i N% r+ s v 例如,在释放参考代码给客户时,希望客户注意到里面的项目名称和项目版本,那么我们可以在代码中,通过“#error ”来强调必须要修改的信息,通过“#warning”来备注需要注意的信息。具体代码如图 1:' t5 J5 |( u/ O! c9 ~ 2 x- K* B; t+ J' q- [. N0 _
这样,当客户编译工程时,会出现 error 和 warning,见图 2,只有将“#error”和 “#warning”两行分别注释掉,才会分别消除这两项编译信息,以此达到警示客户的目的。2 f3 y# s. P- k" K( n/ ^
6 d' w' } Z h# @- B 2.1. 主动屏蔽特定的 warning 在有些场景,我们还可以在特定的代码或者文件作用域内,主动屏蔽特定的 warning。 例如,工程中写了一个测试函数“void MyTestFunction(void)”,但是在工程中暂时没有被调用,直接编译会得到“Wunused-function”的 warning。5 K+ p0 C1 C3 u- e 但是如果在代码中添加这样的语句: 6 A, I) k2 i g1 ?* M( C% E4 y% _$ B ?1 c7 Y( N' q+ F* o# f #pragma GCC diagnostic ignored "-Wunused-function"。 k4 Z6 G4 k! p8 F0 ] ! K2 N* c' c9 `, q. P /*此区间内,如果出现函数仅申明,但是没有被调用时,编译不产生warning*/ void & R( t$ A1 `7 b( a9 B) S& t MyTestFunction(void)8 S$ W! R- @- [" u: ~8 c+ g8 q {…} #pragma GCC diagnostic pop . w& `6 @: u* J& L9 i9 ~ 因为我们配置了“-Wunused-function”,那么在编译时,即使 MyTestFunction 没有 被调用,编译也不产生 warning。 # c: u0 ~, G. ^- A! Q* G0 S 我们还可以在 STM32CubeIDE 中,通过“Help”->“Information Center”->“Read STM32CubeIDE Documentation”->“C/C++ Compiler”,找到 GCC 编译器文档,从而发现更多的 warning 选项,根据需要主动屏蔽更多的 warning。见图 3 :
3. 小结 事实上,在编译项目时,warning 和 error 同样重要,部分隐蔽的问题可能就和 warning 相关。当我们对工程代码和编译器有了更深层次的了解后,可以巧妙地使用和屏蔽 warning,帮我们更好地管理项目。 & x! C0 b3 `1 p$ G/ H7 }8 m4 [ " T+ s! E! f# O& U& S) G) L |
【STM32H5 评测】NUCLEO-H5E5ZJ 使用 TrustZone 安全分区系统实践测试
【STM32H5 评测】基础硬件加密与随机数性能 - STM32H5E5实测硬件AES加解密、HASH运算、TRNG真随机数输出速率与稳定性
【STM32H5 评测】CPU核心性能 - STM32H5E5跑 RTOS,观察任务切换速度、中断响应快慢
【STM32H5 评测】内存读写性能 - STM32H5E5实测Flash,SRAM读写速度,用DMA搬运大块数据
【NUCLEO-C562RE】OLED 显示
保姆级教程:CMake 工程导入 STM32CubeIDE 步骤
STM32CubeCLT 1.22.0新版本发布
【下载问题解决】关于ST官网下载软件问题解决
【STM32H735G-DK测评】lvgl移植
【STM32H735G-DK 测评】STM32H735G-DK External Loder 编译和测试
微信公众号
手机版