你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

巧用 STM32CubeIDE 之编译警告

[复制链接]
STMCU小助手 发布时间:2023-6-29 22:21
1. 前言
+ l" R' E! ]0 J7 z2 n% q编译警告对于工程师们来说,是再常见不过的东西了。对于严谨的工程师们,任何 warning 都是不会忽视的。# \4 V  p3 C* ]1 M: D
# w; d( r% N3 V, D
2. 巧妙使用 warning
8 d% A( j& V9 a- `4 Y

* O: J# R* z/ [3 |; p在 STM32CubeIDE 中可以通过warning(甚至 error)的方式来通知工程师,使得一些容易遗漏的配置得到重视。
# ^; O) [' y3 [+ Z& U8 [! ?9 R# i  N% r+ s  v
例如,在释放参考代码给客户时,希望客户注意到里面的项目名称和项目版本,那么我们可以在代码中,通过“#error ”来强调必须要修改的信息,通过“#warning”来备注需要注意的信息。具体代码如图 1:' t5 J5 |( u/ O! c9 ~
2 x- K* B; t+ J' q- [. N0 _
微信图片_20230629222104.png ' f( I: d" l7 u- ]' x# E* W

( T9 R* M. R7 F0 M+ p$ @4 z4 [5 U这样,当客户编译工程时,会出现 error 和 warning,见图 2,只有将“#error”和 “#warning”两行分别注释掉,才会分别消除这两项编译信息,以此达到警示客户的目的。2 f3 y# s. P- k" K( n/ ^

6 R- s' e  Y6 Q8 P$ q; m5 q( S 微信图片_20230629222101.png
( s5 l3 g- }# c5 N3 s: I6 ]
6 d' w' }  Z  h# @- B
2.1. 主动屏蔽特定的 warning

6 f3 d$ R+ ?& E* U- S4 g0 p在有些场景,我们还可以在特定的代码或者文件作用域内,主动屏蔽特定的 warning。
# N! z$ }8 I  A- a" E" _
; U+ C. U- k% A  R例如,工程中写了一个测试函数“void MyTestFunction(void)”,但是在工程中暂时没有被调用,直接编译会得到“Wunused-function”的 warning。5 K+ p0 C1 C3 u- e

3 w9 Q9 S, s+ F! j# K2 T0 \9 c5 O
但是如果在代码中添加这样的语句: 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 ]

$ A$ P( u# i6 h# z0 m
! 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
{…}
! c5 C9 j$ p6 L; D#pragma GCC diagnostic pop
  i. V* V4 m; Z4 O. w& `6 @: u* J& L9 i9 ~
因为我们配置了“-Wunused-function”,那么在编译时,即使 MyTestFunction 没有 被调用,编译也不产生 warning。
0 G( X$ F4 U6 U- @2 K* A3 c) J
# c: u0 ~, G. ^- A! Q* G0 S
我们还可以在 STM32CubeIDE 中,通过“Help”->“Information Center”->“Read STM32CubeIDE Documentation”->“C/C++ Compiler”,找到 GCC 编译器文档,从而发现更多的 warning 选项,根据需要主动屏蔽更多的 warning。见图 3 :
; U; ?7 z  U. o
. a6 F- n! L9 ^/ R6 k$ v
微信图片_20230629222058.png ' |. u- ]. E% \9 }4 r* a5 J

2 U% D  n5 t3 O$ W& l, U3. 小结
  j; ]% @) b4 _0 _5 k% k" K事实上,在编译项目时,warning 和 error 同样重要,部分隐蔽的问题可能就和 warning 相关。当我们对工程代码和编译器有了更深层次的了解后,可以巧妙地使用和屏蔽 warning,帮我们更好地管理项目。
3 e* e) u1 h2 d7 n- h
& p. R6 k3 M3 [, C
& x! C0 b3 `1 p$ G/ H7 }8 m4 [
" T+ s! E! f# O& U& S) G) L
赞 收藏 评论0 发布时间:2023-6-29 22:21

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版