Keil MDK中编译连接选项--keep的用法

使用Keil mdk编程,假如有一个有用的函数你定义了但是没有显式的调用,mdk在默认编译链接时,将会把这个函数从整个程序总删除掉,以节省ROM.

比如,你在ROM的0x00010000处定义了一个函数void led(void),然后使用函数指针来调用它:

void (*func)(); //函数指针

func= (void (*)()) (0x00010000);//定位到指定的入口地址0x00010000

(*func)();//调用led()函数

原本是想通过函数指针的方式调用led()这个函数,结果因为没有显示调用过程在编译优化时被删掉。

能否让编译器不自动优化t这个函数?

当然有,就是使用链接器命令:--keep=section_id 此选项指定删除未使用节时不能删除的输入节。

其中 section_id 是以下项之一:
symbol 指定在删除未使用节时保留定义 symbol 的输入节。 如果 symbol 存在多个定义,则 armlink 将生成一则错误消息。
           例如,您可能使用 --keep=int_handler。若要保留定义以 handler 结尾的符号的所有节,请使用--keep=*handler。
object(section)指定在删除未使用节时保留 object 中的 section。

例如,若要保留vectors.o 对象的 vect 节,请使用: -- keep=vectors.o(vect)

若要保留 vectors.o 对象中节名称的前三个字母是 vec 的所有节,请使用:--keep=vectors.o(vec*)
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值