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

巧用 STM32CubeIDE 之编译警告

[复制链接]
STMCU小助手 发布时间:2023-6-29 22:21
1. 前言0 c7 B) u: c+ R: Y5 K" w2 u& k
编译警告对于工程师们来说,是再常见不过的东西了。对于严谨的工程师们,任何 warning 都是不会忽视的。
, V) C% U  I# G" B# a, z, w
1 [5 O0 }) E; D, _+ r: ?2 |2. 巧妙使用 warning( q/ f7 _' D+ q& c6 Y& ]) C
6 e. W' m6 a4 v. q
在 STM32CubeIDE 中可以通过warning(甚至 error)的方式来通知工程师,使得一些容易遗漏的配置得到重视。
8 W4 `/ C1 b; |! l' \: x- e7 a
: @' i3 C6 S/ D6 z' c% k例如,在释放参考代码给客户时,希望客户注意到里面的项目名称和项目版本,那么我们可以在代码中,通过“#error ”来强调必须要修改的信息,通过“#warning”来备注需要注意的信息。具体代码如图 1:
" e  [  k2 P7 u* l5 `& H5 i8 @
8 C2 ]+ W. _5 f% e( x* z
微信图片_20230629222104.png ( [+ M, `3 m# d0 g' \& s! s( s2 F

, R% V9 s" Q' d8 C1 O9 t7 ~+ Y! c这样,当客户编译工程时,会出现 error 和 warning,见图 2,只有将“#error”和 “#warning”两行分别注释掉,才会分别消除这两项编译信息,以此达到警示客户的目的。: i) V; i6 e& \

- G2 M+ V% v$ X, k9 a8 L 微信图片_20230629222101.png
5 }, t$ J9 R; _4 j, P3 d. }* P

3 ^- x3 e# B, E+ s2.1. 主动屏蔽特定的 warning

! e7 v/ ?8 g" k4 d3 e8 \, a在有些场景,我们还可以在特定的代码或者文件作用域内,主动屏蔽特定的 warning。
3 g* X; O, n" m, z7 w8 C4 w$ T2 w9 A' T. ~
例如,工程中写了一个测试函数“void MyTestFunction(void)”,但是在工程中暂时没有被调用,直接编译会得到“Wunused-function”的 warning。, s( ]8 g' {- a

# G8 R- T8 h  D8 Z9 p/ b0 g- z
但是如果在代码中添加这样的语句:
8 x: L3 `1 b% R% u) M5 D- b1 {& E9 P6 h7 L7 [2 m( u5 K
#pragma GCC diagnostic ignored "-Wunused-function"。
+ V1 _1 `  L4 Y! H
# C$ _1 P0 ~+ o5 N
+ k* N% c: Z$ t  A
/*此区间内,如果出现函数仅申明,但是没有被调用时,编译不产生warning*/ void % O, }3 A$ z* n% q2 S/ S9 k/ B
MyTestFunction(void)
4 i6 o, ]* ?' ~- r# A( f' W! `{…} - e) F$ d- `' W( G+ r2 m
#pragma GCC diagnostic pop 8 L% H; A. S0 a( X  Z' P% A
8 _& [' D1 \* }7 Y, L
因为我们配置了“-Wunused-function”,那么在编译时,即使 MyTestFunction 没有 被调用,编译也不产生 warning。
; U9 R' b8 J' S' h' g
  n& G6 x5 \" L, A& o* D
我们还可以在 STM32CubeIDE 中,通过“Help”->“Information Center”->“Read STM32CubeIDE Documentation”->“C/C++ Compiler”,找到 GCC 编译器文档,从而发现更多的 warning 选项,根据需要主动屏蔽更多的 warning。见图 3 :
9 A8 |8 H# m$ R1 Q3 u$ w/ u, [& T, e) q0 y
微信图片_20230629222058.png 8 C9 r! U& X# ^% s# e% z# T; R

4 B5 c2 g" Q- G1 Z7 V3. 小结
6 Q4 g0 v+ ?& G# K$ }$ \! V事实上,在编译项目时,warning 和 error 同样重要,部分隐蔽的问题可能就和 warning 相关。当我们对工程代码和编译器有了更深层次的了解后,可以巧妙地使用和屏蔽 warning,帮我们更好地管理项目。
/ o" v6 ?# Z! c0 O5 i
; Q& C; R# J$ ~1 O

$ m7 \0 R4 x2 f' l' A) E4 `5 ]  C' U; j7 l- C6 |8 X
赞 收藏 评论0 发布时间:2023-6-29 22:21

举报

0个回答

所属标签

相似技术帖

官网相关资源

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