当前位置:首页 > 技术心得 > 正文内容

Keil优化导致代码出错

xjtudll10年前 (2017-02-11)技术心得17810

Keil在优化代码的时候,对于一些隐式调用,会出错的。

例如(以下例子来源于参考资料):

你在ROM的0x00002000处定位了一个函数,假设为void test(void),然后使用函数指针来调用它:

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

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

(*UserProgram)();//调用test()函数

这样做的本意是调用test()函数,但编译器并不知情,它仍会按照默认的指令将test函数给整个优化掉,因为它觉得test()函数根本没有被调用,这个时候,虽然(*UserProgram)();仍会执行,但内容与初衷已经大相径庭.

在OSAL的移植到51的过程中,也碰到了类似的问题,OSAL里也是通过指针的方式调用函数的

clip_image001[1]

一旦优化了,OSAL就运行不正常了。

因此,某些时候,某些代码是禁止优化的。

至于Keil如何设置不优化,此处就不赘述了。

参考资料:

http://blog.csdn.net/bendyning/article/details/8091631

扫描二维码推送至手机访问。

版权声明:本文由鸟的天空发布,如需转载请注明出处。

本文链接:http://xjtudll.cn/Exp/439/

标签: keil
分享给朋友:

“Keil优化导致代码出错” 的相关文章

AutoCAD转Protel99SE及丢线问题解决

AutoCAD转Protel99SE及丢线问题解决

工作中经常需要将AutoCAD里面的图形导入到Protel99SE,导入的过程中碰到的最大的问题就是:导入后的图形丢失了曲线(圆弧)。搜遍Google和百度,没有找到一个完善的解决办法,要么语焉不详,要么答非所问。不过网络上终究有些蛛丝马迹,给我提供了一些思路,后几经尝试,终于解决了这个问题。下面与...

IAR Fatal Error[Cp001]解决

IAR Fatal Error[Cp001]解决

很久没用IAR了,这次重新折腾MSP430,安装软件后,编译程序,提示一个莫名奇妙的错误,以前一直没碰到过,错误内容如下: Fatal Error[Cp001]: Copy protection check, No valid license found for this product [20]...

IIS WCF 调用COM问题

IIS WCF 调用COM问题

参考资料: http://cn.voidcc.com/question/p-msefzjic-so.html https://www.cnblogs.com/CrazyKey/archive/2012/07/13/2590083.html https://www.cnblogs.com/Lulus/...

Altium原理图update到PCB时某些元件老是自动先删除后添加

Altium原理图update到PCB时某些元件老是自动先删除后添加

现象:从原理图update到PCB时,明明原理图没有变更,但是某些元件老是被自动删除,然后又自动添加进去了,于是PCB里摆好的元件又到了右下角了,导致又要重新摆放元件。 如下图所示,C1~C21先是被remove了,然后又被add了。看起来没什么大碍,但是PCB上之前被摆放好的C1~C21又被自动放...

网址后面多了一串字符串?jdfwkey

最近一段时间,每天第一次打开自己网站的时候,网址后面老会自动加一串字符串?jdfwkey,很奇怪,而且看起来就跟广告页面网址一样。发现这个问题后,立马联系了客服,客服说是打开了硬件防火墙,防DDOS攻击的。网上搜索了一遍,发现好多人出现过这种情况,大家的意见是:1、影响网站收录。2、来源于搜索引擎的...

数模转换器主要技术指标

数模转换器主要技术指标

分辨率 指DAC能分辨的最小输出模拟增量,取决于输入数字量的二进制位数。 也可用DAC能分辨出来的最小输出电压1 LSB与最大输出电压FSR之比定义分辨率。 分辨率通常用数字量的位数表示,一般为8位、12位、16位等。一个n位的DAC所能分辨的最小电压增量定义为满量程值的2-n倍。例如,满...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。