本帖最后由 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++的数据额结构的的嵌套是不是还是有些力不从心,兼容方面还是比较差。希望各位有经验的人民都来分享一下,看看大家的见解,让我们都学习学习。希望大家来拍砖~!!!!!!!! |