|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
在Keil C中,如果没有显式调用到定义过的函数,就会出现这样的的警告。当出现这样的警告时,可以不用管,因为不影响其它部分。但是,我们知道,即使没有调用这个函数,Keil仍然把它编译连接进整个程序,不过浪费点ROM倒是不心疼。最主要的是,在这个函数中的变量,不会被列入覆盖分析范围内,也就是说这些变量占的空间不能被回收,这对于为数不多的RAM资源可是巨大的浪费啊。。。0 o" T; k" I* U0 k
0 A& Q: t( @7 L1 e# y- Q
当这个不被调用的函数写在C文件中时,可以把它注释掉来解决这个问题。我想知道的是,当我将一组函数包装成lib文件时,又怎么解决问题呢?总不能每次都重新生成lib吧,这样的话移植性不就成问题了?还有,Keil自带的库中必然有很多函数,也必然有很多用不到的,为什么就不没有UNCALLED SEGMENT呢?我猜想它的lib的源代码有什么特殊的地方(我猜的)。小弟请教各位高手解决此问题的方法或技巧。
( K' ~' D& h1 U3 @8 E //=========================================================================
6 }! |/ h: K8 x. B3 o (1)$ n% o3 b4 \& b4 S
可以用条件编译啊,
# \# K& u: n. ]" D #IFdef **
$ |, I6 k9 \' E; D: p (程序段1)
% n1 S' [* {' n! t #else6 W- f* i% x/ C' L# x9 B% v5 w
(程序段2)5 t" M5 ` K$ B6 \+ K
#endif
) x( u: ^) K) z A+ A0 ]* V : w& l m+ ^" N' `; P. E
**是在前面用#define定义的标识符,作用是如果定义了**,就编译(程序段1),否则编译(程序段2).! z4 }9 `$ H$ O
0 \! J7 o5 s+ J7 J6 G
如果你一定要考虑可移植性的话,就这样做,否则还是/ p$ Q! ]+ x/ T$ @ V% R
(2)直接用注释符隐蔽掉,或者直接删掉,会比较快。9 ^( N# G% [9 u7 L% \3 D
//=========================================================================
( t* l% F1 ^* ^: G" F" _ (3)想不显示这些提示:则可设置如下:, t: r! C; k; l) w( P# u
option for target
6 G8 K5 A1 y8 M! [8 i+ I --->bl51 misc3 b9 C y: O2 A0 l _& Y
--->disable warning ==这里写入16- X. e& U6 z1 Y4 A" U$ k
^' r, B& t- }4 u* J' A
9 T) z. }+ \! @# Y3 a1 R% s 1 m" j' P; f( E! [# D' J. ~9 q9 q
" G1 L2 F+ [, g4 c- H
& R9 t& u1 F& Y2 n ; R9 `+ p, l# ?% j
' t! Q" ~' O) R" D3 T |
|