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

Keil优化导致代码出错

xjtudll8年前 (2017-02-11)技术心得11580

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优化导致代码出错” 的相关文章

ML610Q4xx LCD Simulate仿真

ML610Q4xx LCD Simulate仿真

通过DTU8 Debugger和LCD Image Assignment Tool,可以实现LCD仿真,这样可以很方便的调试程序。 如何实现LCD仿真,可以查看《LCD Image Tool User’s Manual》,文件名为:FEXTLcdImgToolU8_UM-07.pdf。这...

excel中数据行转列,多行转一列

按ALT+F11调出VBA窗口,插入一个模块,把下面代码复制进去。 Sub abcd() For i = 1 To 5   '修改5,行的个数, 这里表示第0到5行(可以修改成你要的行数)     s = WorksheetFu...

Android error:Duplicate ID, tag null, or parent id with another fragment(fragment嵌套问题)

参考资料:http://stackoverflow.com/questions/14083950/duplicate-id-tag-null-or-parent-id-with-another-fragment-for-com-google-androi 跟参考资料里的这个人一样,我也碰到了这个...

金蝶K3 业务预警无法自动发送-自定义报表SQL语句发布到业务预警,无法自动发送出来

客户问题:业务预警无法自动发送:客户自己写的自定义报表SQL语句发布到业务预警,无法自动发送出来 解决方案:在客户的语句前加上:set nocount on 即可...

贴片电阻电容电感封装尺寸

贴片电阻电容电感封装尺寸

贴片常见封装有9种,用两种尺寸代码来表示。一种尺寸代码是由4位数字表示的EIA(美国电子工业协会)代码,前两位与后两位分别表示电阻的长与宽,以英寸为单位。我们常说的0603封装就是指英制代码。另一种是米制代码,也由4位数字表示,其单位为毫米。下表列出贴片电阻封装英制和公制的关系及详细的尺寸。...

Android Studio升级至3.1出现AAPT2 error的解决办法

Android Studio升级至3.1出现AAPT2 error的解决办法

android studio从2.3升级到3.1.3之后,编译提示:AAPT2 error: check logs for details 网上的方法一堆,但几乎都没啥用。以下部分内容引用简书: https://www.jianshu.com/p/2a63c5710ee9 1:Android Stu...

发表评论

访客

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