|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
在Keil C中,如果没有显式调用到定义过的函数,就会出现这样的的警告。当出现这样的警告时,可以不用管,因为不影响其它部分。但是,我们知道,即使没有调用这个函数,Keil仍然把它编译连接进整个程序,不过浪费点ROM倒是不心疼。最主要的是,在这个函数中的变量,不会被列入覆盖分析范围内,也就是说这些变量占的空间不能被回收,这对于为数不多的RAM资源可是巨大的浪费啊。。。
8 N7 W5 n; I) O0 n & {5 m7 D* B" L% Z; C" N- m
当这个不被调用的函数写在C文件中时,可以把它注释掉来解决这个问题。我想知道的是,当我将一组函数包装成lib文件时,又怎么解决问题呢?总不能每次都重新生成lib吧,这样的话移植性不就成问题了?还有,Keil自带的库中必然有很多函数,也必然有很多用不到的,为什么就不没有UNCALLED SEGMENT呢?我猜想它的lib的源代码有什么特殊的地方(我猜的)。小弟请教各位高手解决此问题的方法或技巧。
7 ]+ d9 M2 f2 } //=========================================================================; |( N/ z# ]' F: C5 p: P
(1)
0 z% O( R" a3 k& d+ _- n, j1 M 可以用条件编译啊,: S. @/ G; {, [9 ~( h
#IFdef **5 ?3 G. S2 j1 ^9 X: Z: d- p
(程序段1)/ F% g" ~7 G5 Q' f; U2 g9 _
#else5 |+ F8 }2 T9 e& ?) ?4 \
(程序段2)
8 d- [0 Z3 {; H; w: q. x* B #endif- q8 C( B8 N# b$ f, m( d" N
0 U; E/ K. y6 H3 p
**是在前面用#define定义的标识符,作用是如果定义了**,就编译(程序段1),否则编译(程序段2).
5 k* |+ Q/ _" d# B \) s5 }5 Y
% o/ Q- E6 e" \) o1 ? 如果你一定要考虑可移植性的话,就这样做,否则还是. s+ L, j8 x5 k4 g3 l
(2)直接用注释符隐蔽掉,或者直接删掉,会比较快。
, V4 N+ N7 K4 _# D5 E //=========================================================================; ^( Z `$ d+ w! @6 } u
(3)想不显示这些提示:则可设置如下:
2 }9 i3 O! k* x: `7 Q option for target+ _" j1 ?! w8 A- _" }, R4 E9 F
--->bl51 misc7 u k2 x7 y3 `' k$ p
--->disable warning ==这里写入16
, O# g" j- }5 `& T
! }" P0 b$ q: G6 G* k( a" n. c+ F
; ?) ?! w8 ?( c2 R
; ~2 M0 S8 c/ O: t9 { l& @
9 `7 S1 Y# [0 J4 ^ q# F 7 N9 d5 D b: ^% |7 \" q( F
; `( e: d3 D& M3 J- `" b( _
( x1 x# k$ I; H$ h, \ D5 k7 P |
|