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

Keil优化导致代码出错

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

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://www.xjtudll.cn/Exp/439/

标签: keil
分享给朋友:

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

SQL Server 树形递归查询

SQL Server 树形递归查询

原始查询 原始表格查询: select * from dbo.T_DeptInfo; 原始表格查询结果:: 递归查询 递归查询结果 带缩进的的树形递归查询 缩进递归查询结果 查询是否子节点的树形递归查询 树形递归查询是否包含子节点的查询结果...

NSTableview从mutable array获取数据

参考资料: http://stackoverflow.com/questions/3397952/populating-nstableview-from-a-mutable-array 可以使用以下的方法 – numberOfRowsInTableView:...

SQL Server 数据类型xtype

xtype=34 'image' xtype= 35 'text' xtype=36 'uniqueidentifier' xtype=48 'tinyint' xtype=52 'smallint' xtype=56 'int' xtype=58 's...

运放平衡电阻的作用

运放平衡电阻的作用

运放输入端所接电阻要平衡,目的是使集成运放两输入端的对地直流电阻相等,运放的偏置电流不会产生附加的失调电压。但有些电路对失调电压要求并不高,例如交流音频放大器。有些运放偏置电流很小,即使输入端电阻不平衡也不会对失调电压产生什么影响,这些电路就可以不要求输入端电阻平衡。 以反相放大器来说明平衡电阻的...

SQL Server数据库脱机时间太长(脱机联机)

解决办法:强制脱机语句:ALTER DATABASE <dbname> SET OFFLINE WITH ROLLBACK IMMEDIATE联机语句ALTER DATABASE <dbname> SET ONLINE...

Xcode Warning:No rule to process file xxx 解决

Xcode Warning:No rule to process file xxx 解决

在编译程序的时候,Xcode给出了警告:warning: no rule to process file '$(PROJECT_DIR)/xxx.h' of type sourcecode.c.h for architecture armv7。如图所示: 从warning中我们可以看出是某个.h...

发表评论

访客

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