打印
[DSP编程]

在CCS5.2的编译器环境下编程的问题。

[复制链接]
2358|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cjystar|  楼主 | 2014-6-24 20:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在CCS5.2的编译环境下,采用C语言编程,但是有的时候会出现某一条程序不执行而是直接的跳过了,有的时候在该语句前后加上几句  asm(" nop");语句就可以了,但是有的时候加了asm(" nop");语句还是好像被跳过没有被执行,这是什么原因呢,是程序被编译器优化的原因吗?

相关帖子

沙发
zhangmangui| | 2014-6-24 21:42 | 只看该作者
编译器没这么菜吧    除非条件不满足  
不然不会不执行啊   没有遇到过这样的问题
也没有看到过坛里有类似的问题
你在排查一下吧   你是怎么判断没有执行的呢?

使用特权

评论回复
板凳
zhangmangui| | 2014-6-24 21:43 | 只看该作者
还有一种可能就是一些特殊的寄存器配置时  需要等待配置完成并且到达稳定状态
这样就需要加些延时等待  你看看是不是这种

使用特权

评论回复
地板
cjystar|  楼主 | 2014-6-24 21:56 | 只看该作者
zhangmangui 发表于 2014-6-24 21:43
还有一种可能就是一些特殊的寄存器配置时  需要等待配置完成并且到达稳定状态
这样就需要加些延时等待  你 ...

这貌似是一种可能,但是我是在一个自定义的函数中,其他的语句都是可以执行的,就是其中的一个简单的加法语句就是没有执行,我也在该语句的前后加了延时的,但是还是不行;还有就是我将与其有关的变量也换成volatile类型的,但是还是不行,不理解这是什么情况导致的。

使用特权

评论回复
5
zhangmangui| | 2014-6-24 21:57 | 只看该作者
cjystar 发表于 2014-6-24 21:56
这貌似是一种可能,但是我是在一个自定义的函数中,其他的语句都是可以执行的,就是其中的一个简单的加法 ...

真心不懂怎么回事    你在排查一下吧

使用特权

评论回复
6
cjystar|  楼主 | 2014-6-24 22:02 | 只看该作者
zhangmangui 发表于 2014-6-24 21:42
编译器没这么菜吧    除非条件不满足  
不然不会不执行啊   没有遇到过这样的问题
也没有看到过坛里有类似 ...

我是在一个自定义的函数中,下载在flash中运行,在这个函数中做算法,其中有一条语句是加法语句,我是在此处设置断点,但不运行,调试看结果,发现这条语句好像就是没有执行,似乎就是被跳过了一样。

使用特权

评论回复
7
一表羊才| | 2014-6-26 17:37 | 只看该作者
那你查看一下相关的寄存器或者变量,确认一下是否执行了

使用特权

评论回复
8
cjystar|  楼主 | 2014-6-27 09:12 | 只看该作者
一表羊才 发表于 2014-6-26 17:37
那你查看一下相关的寄存器或者变量,确认一下是否执行了

就是查看变量的值,感觉是没有执行这条语句

使用特权

评论回复
9
AD797| | 2014-6-27 09:26 | 只看该作者
ccs5或者28335确实有比较莫名其妙的问题,比如,GpioDataRegs.GPADAT.bit.GPIO11定义为rest,rest=0;  连续运行后却为高电平,但单步调试是对的。或者写成GpioDataRegs.GPADAT.bit.GPIO11 = 0也是对的。 或者rest=0;写两遍也行。  
前后没有配置寄存器,都是IO操作,而且前面已经加asm(" RPT #5 ||NOP");延时了。

使用特权

评论回复
10
cjystar|  楼主 | 2014-6-29 15:01 | 只看该作者
AD797 发表于 2014-6-27 09:26
ccs5或者28335确实有比较莫名其妙的问题,比如,GpioDataRegs.GPADAT.bit.GPIO11定义为rest,rest=0;  连续 ...

出现这样的问题就比较的头疼,在TI的官网上问了也没有明确的回复

使用特权

评论回复
11
赤子旭升| | 2014-6-30 16:38 | 只看该作者
楼主你好,我也遇到了和你相似的问题,反汇编语句中大多是asm(00000000 nop)这样的语句,单步调试的时候也不像正常运行,不知道你的问题解决了没

使用特权

评论回复
12
cjystar|  楼主 | 2014-6-30 19:05 | 只看该作者
赤子旭升 发表于 2014-6-30 16:38
楼主你好,我也遇到了和你相似的问题,反汇编语句中大多是asm(00000000 nop)这样的语句,单步调试的时候也 ...

首先保证你的程序本身是没有问题的,然后在去确定是那条语句是被优化的,然后在该语句前后加上asm( "nop")
;试着用不同的方式去实现现在的程序

使用特权

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

本版积分规则

19

主题

80

帖子

1

粉丝