打印

关于CCS3.3编译器处理结构体数值的现象

[复制链接]
3295|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
nealfei|  楼主 | 2013-6-21 17:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 nealfei 于 2013-6-21 17:42 编辑

今日来,在CCS3.3上写了一个28335的程序,程序量呢比较大,出现了一个比较怪的现象,我在程序中定义声明了好多的联合体和结构体数据结构的变量,主要是处理问题也是为了方便,但是发现给问题,我在这些结构体中包含的有数组,有浮点变量,也有整形变量及数组。我在初始化数组后,把初始化的结构体数组再往双口RAM里面写数据,最后发现对方从我写数据的地方读出来的数据又问题,具体问题就是有的数据是0,而我写入的数据却不是0,所以说明我这些数据在初始化后,到写入双口RAM的过程中,数据貌似被修改了,前提是仿真的时候,是没有这个现象,只有在固话之后才会发现有数据写入错误的现象。我们一起干活的同事怀疑是由于CCS3.3的编译器对处理数据结构体的能力或者效果不好,所以现在还没有相同是为什么?后来我直接采用数据的时候,发现没有数据错误的现象,采用数组就是我要使用多少,我就定义多少数组,然后初始化之后,再赋值给双口RAM,这样做是任何情况下都没问题的。后来我还是想把以前出现的问题原因找出来,我就不使用直接数组,还是使用数据结构来处理读写数据,但是我没有删除我定义的数组,只是不再使用我定义的数组,最后发现以前的现象没有了。百思不得其解,只有采用前后对比来查找,我把程序什么地方修改了,最后查出就只有多一个定义数组和少一个定义数组的不同。最后问他就先停在这里接着猜猜处理,如果是这个数组的原因导致的,那就保留,所以我就把定义的数组删除掉再试,结果写入双口RAM的数据是错的,然后把定义的数组保留,写入双口RAM的数据读出来是没问题的。我又猜想,是不是只要定义一个无关的变量数组就可以呢?我试着把数组长度增大一半和缩小一半,检验的结果是都不能改变一如既往的现状,所以写入双口RAM的数据还是有问题(错误数据),就这样猜想,难道还有长度要求,就按照这个一半的一半接着往下验证,最后总算把这个定义的数组长度范围找出来了,我要写入双口RAM的数组长度是64,我数据结构也是定义的是长度为64,但是就是问题一直没解决,现在多定义了一个额外的数组,长度还有限制的,长度是38~71范围内一切找出,额外定义的数组长度若不在这个范围内,则一如既往的错误还存在,现在就还剩下一个问题没验证了,就是我把数据结构的的长度为64的长度增加,然后在看看结构怎么样?再次说了这么多,主要是我还是有个怀疑,就是CCS3.3或者TI的编译器对处理C或者C++的数据额结构的的嵌套是不是还是有些力不从心,兼容方面还是比较差。希望各位有经验的人民都来分享一下,看看大家的见解,让我们都学习学习。希望大家来拍砖~!!!!!!!!

相关帖子

沙发
zhangmangui| | 2013-6-21 18:06 | 只看该作者
呵呵  拍一砖!

使用特权

评论回复
板凳
nealfei|  楼主 | 2013-6-24 14:51 | 只看该作者
哎呀,问题啊有所变化,经过几番调试试验,最终把问题还是定位在CCS3.3编译器的问题,只不过有些蹊跷吧,我把我的数组增加到66,基本以上的问题就没事了,好了,为什么刚好是64个字节长度不行呢?为什么非要多2个字节呢?呵呵,希望有知道的高手们来解答吧,或者等我哪天把问题找到了再来分享吧,不过现在的是问题得到解决了,可能再去找这个问题的可能性小了。呵呵,除非说什么时候,又出现和这个相关的bug,非得找出来不可。呵呵

使用特权

评论回复
地板
zhangmangui| | 2013-6-24 15:07 | 只看该作者
nealfei 发表于 2013-6-24 14:51
哎呀,问题啊有所变化,经过几番调试试验,最终把问题还是定位在CCS3.3编译器的问题,只不过有些蹊跷吧,我 ...

c语言的问题吧   还是等你来分享

使用特权

评论回复
5
nealfei|  楼主 | 2013-6-24 15:40 | 只看该作者
呵呵,可能是吧?不过我不能下结论?反正问题是出了,现象是有了,有待进一步观察,慢慢的解决吧。

使用特权

评论回复
6
guohuimao| | 2014-9-28 11:43 | 只看该作者
与你一样感觉,一个问题困扰了许久无解。怀疑CCS对C语言的一些常规用法都支持不好!

使用特权

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

本版积分规则

11

主题

132

帖子

1

粉丝