打印

Release模式下 不执行自定义函数 求助

[复制链接]
3326|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
黄jiajia|  楼主 | 2011-3-19 21:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
aresc| | 2011-3-20 13:52 | 只看该作者
这个很可能是由于CCS的编译优化引起的.
可能1. 编译器觉得delay没用,直接优化没了,不过可能性不大.
可能2. 编译器优化了之后,程序的运行可能和原程序在时序上有些不同.
建议加一个全局计数器,在delay函数体里增加,在delay的调用后检查一下这个计数器有没有增加.看delay是否真的没执行?

使用特权

评论回复
板凳
黄jiajia|  楼主 | 2011-3-22 16:50 | 只看该作者
2楼朋友,谢谢你指点。 发现是这样一个问题,delay函数的里面定义的局部变量CCS不执行,我把局部变量都改成全局变量之后,就会进入delay函数里。可是我那些变量局部定义就够了,不知道怎么回事?  谢谢你的指点  很高兴和你交流。

使用特权

评论回复
地板
aresc| | 2011-3-22 23:05 | 只看该作者
确实是被CCS优化了,编译器觉得没有用处,自己给你删除了.

DEBUG模式默认是不带任何优化的,所有没有问题. 但RELEASE模式默认是-O2的优化,编译器会去掉它觉得没用的代码(PAGE54 - spru187n.pdf). 可以打开.map文件搜索delay函数名, 你会发现这个函数只有一个
BNOP.X  B3,5之类的指令, 这条指令应该只是一个类似于RTS的指令(函数调用返回), 你可以把断点设在这条指令对应的地址上,程序根本不会停在这儿. 也就是说CCS把DELAY函数体优化得只剩一个RTS指令,而且根本不会去调用它. 我用C6747的DSP, 可能不同DSP, 那个BNOP指令不同.

使用特权

评论回复
5
aresc| | 2011-3-22 23:10 | 只看该作者
有一个办法可以解决这个问题, 在你的DELAY函数体定义的局部变量前面加上volatile关键字,那样编译器就不会优化与这个变量有关的代码.

使用特权

评论回复
6
黄jiajia|  楼主 | 2011-3-25 22:22 | 只看该作者
:)谢谢高手,加上volatile关键字问题解决了!!有什么问题再向您请教!

使用特权

评论回复
7
WGCH19890113| | 2012-7-31 10:50 | 只看该作者
您好,请问如何进入release 模式,谢谢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

154

帖子

1

粉丝