|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
在Keil C中,如果没有显式调用到定义过的函数,就会出现这样的的警告。当出现这样的警告时,可以不用管,因为不影响其它部分。但是,我们知道,即使没有调用这个函数,Keil仍然把它编译连接进整个程序,不过浪费点ROM倒是不心疼。最主要的是,在这个函数中的变量,不会被列入覆盖分析范围内,也就是说这些变量占的空间不能被回收,这对于为数不多的RAM资源可是巨大的浪费啊。。。
+ w7 L+ `' _, C& Y% M% p1 a+ m
$ ^7 G1 o3 |8 w% M 当这个不被调用的函数写在C文件中时,可以把它注释掉来解决这个问题。我想知道的是,当我将一组函数包装成lib文件时,又怎么解决问题呢?总不能每次都重新生成lib吧,这样的话移植性不就成问题了?还有,Keil自带的库中必然有很多函数,也必然有很多用不到的,为什么就不没有UNCALLED SEGMENT呢?我猜想它的lib的源代码有什么特殊的地方(我猜的)。小弟请教各位高手解决此问题的方法或技巧。
: j+ q4 q8 b" ]' p0 J //=========================================================================/ a8 w: y, p; w' ~+ B n2 A
(1)
: @2 W0 \1 c$ N m7 \& U Y 可以用条件编译啊,
- v( o! S6 O' J: l4 q, {8 Z #IFdef **) t! A, k% Y) |* Y
(程序段1)
( D3 A% A8 u& W/ {/ e #else
3 n3 |+ t% E! m- o (程序段2)
( c) y+ z: q$ J- Q4 X% I #endif$ I9 v, W s3 i
! U1 V1 u/ v3 Y/ k1 d( e( Q; b **是在前面用#define定义的标识符,作用是如果定义了**,就编译(程序段1),否则编译(程序段2). E9 Y" R: ]1 P3 O8 q. b/ U
1 V7 U. D0 s4 H+ A; X' Y9 w8 c" k 如果你一定要考虑可移植性的话,就这样做,否则还是
" H" k$ C6 S1 y (2)直接用注释符隐蔽掉,或者直接删掉,会比较快。 Y/ q( C& _1 z
//=========================================================================9 N8 l- s, y. A3 Z: P
(3)想不显示这些提示:则可设置如下:
: O* n( P# T$ z' I0 R0 r0 k0 S; O option for target
9 L! y* I8 d/ D9 K7 k2 s' S --->bl51 misc
2 }5 G) Q5 N4 Q: A' S3 x; i --->disable warning ==这里写入16; F0 H! @$ d9 h* G g$ n- q
+ n3 J% a" @9 f" @4 l( d
6 s) D" r9 W' ^2 u* Y- l
0 j, Y! p1 A6 _+ d0 ^5 w
, q1 t" X& Q# e" I
4 _4 J+ M* X, m " |& H8 @- X- ^' y1 B7 ]( l
* c0 m4 J7 u! G* I
|
|