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

Keil优化导致代码出错

xjtudll9年前 (2017-02-11)技术心得16340

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

VS2010 HelpLibrary

VS2010 HelpLibrary

1、VS2010 HelpLibrary路径更改 找到helplibmanager.exe.config (C:\Program Files\Microsoft Help Viewer\v1.0\),打开 helplibmanager.exe.config (用记事本或其他文本编辑软件),将 key...

PlatformIO串口无输出

PlatformIO串口无输出

问题:同样的串口打印代码,在Arduino IDE里可以正常输出,但是在PlatformIO里看不到任何输出硬件:ESP32-S3 Camera解决方法:This is because DTR and RTS both are connected to the RESET pin and GPIO...

验证datatable是否被修改的问题

问题: 举个例子: 会员管理的修改  我先将会员详细信息存在一个datatable  User里面   然后 界面上的控件与该datatable一一绑定, 在用户保存的时候  验证该datatable是否被修改 来判断是否需要操作数据库 &...

c# winform 查看网络图片

引用网址:https://blog.csdn.net/weixin_30462049/article/details/99170485 /// <summary>         /// ...

魅族Flyme7不显示logcat

魅族Flyme7不显示logcat

设置 -> 辅助功能 -> 开发者选项 -> Flyme扩展功能 -> 性能优化 -> 高级日志输出 -> 全部允许 没有开发者选项的先去系统设置里将开发者选项给点出来...

MultiSelectListPreference 由于xml存在问题而崩溃

参考资料: http://stackoverflow.com/questions/28687681/multiselectlistpreference-crashes-with-dependency 问题描述: 添加了一个MultiSelectListPreference,然后一运行程序,就崩溃了。...

发表评论

访客

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