看看这段代码有什么问题

2019-03-23 18:18发布

本帖最后由 jishuaihu 于 2016-3-21 10:17 编辑
  1. for(i = 0; i< SENSORNUM ;i++)
  2.                         {
  3.                                 if(Lost[i] < 24)
  4.                                 {
  5.                                         Lost[i] ++;
  6.         
  7.                                 }        
  8.                                 else
  9.                                 {
  10.                                         SensorCode[i][0] = 0;
  11.                                         SensorCode[i][1] = 0;
  12.                                         SensorCode[i][2] = 0;
  13.                                         SensorCode[i][3] = 0;
  14.                                         SensorCode[i][4] = 0;
  15.                                         SensorCode[i][5] = 0;
  16.                                        
  17.                                         SensorData[i].Tem = 0;
  18.                                         SensorData[i].Hum = 0;
  19.                                         SensorData[i].Bat = 0;
  20.                                         SensorData[i].RSSI = 0;
  21.                                 }
  22.                         }
复制代码最近写了一个程序,里面有上面这样一段代码,作用是当某一个条件不满足时进行计数,达到指定次数后把另外的一组数清零。按照我的思路,lost数组里的数不会大于24,可是仿真的时候经常发现lost里面有很大的数,而且明显技术的时间还没有到呢。比如设备复位后,在初始化完成后设断点,此时看lost数组里面的数还都是0,接下来在lsot++处设置断点,全速运行到断点处的时候lsot数组里面有一些数就已经不是0了。而且是很大的数。
大家有没有遇到过类似的情况?或者给想 想有没有其他的可能~!
QQ图片20160321101643.png
第一次运行到断点处的样子
谢谢


此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
littleshrimp
1楼-- · 2019-03-24 00:16
/ Lost[]没有初始化?
Lost[]下边的数组溢出?
jishuaihu
2楼-- · 2019-03-24 02:46
 精彩回答 2  元偷偷看……
littleshrimp
3楼-- · 2019-03-24 08:17
jishuaihu 发表于 2016-3-21 10:21
lost初始化了。
lost下面的数组溢出还不敢确定,我找一下啊。不过应该是lost上面的数组溢出导致的吧?

对,上边,我说错了。
其它地方对Lost[]做处理了吗?
jishuaihu
4楼-- · 2019-03-24 10:01
littleshrimp 发表于 2016-3-21 10:22
对,上边,我说错了。
其它地方对Lost[]做处理了吗?

其他的地方就一个清零。
我大概知道上面原因了。我对另外的一个数组复制的时候没有判断数组标号,应该是那儿的问题,我加一个判断试试啊。
谢谢
辛昕
5楼-- · 2019-03-24 15:07
 精彩回答 2  元偷偷看……
jishuaihu
6楼-- · 2019-03-24 20:47
本帖最后由 jishuaihu 于 2016-3-21 10:39 编辑
辛昕 发表于 2016-3-21 10:27
先试一下强行写成一个固定数 再跑。如果这都能出问题,那再去考虑别的东西写穿了这个数组

搞定了,谢谢
littleshrimp说的对,是其他的数组越限了
我说一下是的应用,给大家提供一些教训。
我做的是一个无线接收模块的数据处理终端,无线模块接收到的数据会以串口的形式发送给我的单片机。单片机接收到后进行处理。我一开始代码是这样的。这个是串口中断里面的一部分代码。
  1. Temp = USART_ReceiveData(USART3);
  2.             
  3.        
  4.             if(RevIndex == 0)
  5.             {
  6.                     GroupID = Temp;
  7.             }
  8.             else if(RevIndex == 1)
  9.             {
  10.                         DeviceID = Temp - 1;
  11.             }       
  12.             else
  13.             {
  14.                     SensorCode[DeviceID][RevIndex - 2] = Temp;       
  15.                        
  16.             }
复制代码  问题的关键在于SensorCode[DeviceID][RevIndex - 2] = Temp;
这一句里面没有判断DeviceID的范围是否越限。这样的话编译的时候是没有越限的,不会提示警告,而实际运行的时候DeviceID收到的数如果是错误的话,就可能导致SensorCode越限。结果赶巧了是到lost数组。找到问题后我把代码修改为下面的结果。
  1.    Temp = USART_ReceiveData(USART3);
  2.             
  3.        
  4.             if(RevIndex == 0)
  5.             {
  6.                     GroupID = Temp;
  7.             }
  8.             else if(RevIndex == 1)
  9.             {
  10.                         if((Temp>0)&&(Temp < (SENSORNUM +1)))
  11.                         {
  12.                                 DeviceID = Temp - 1;
  13.                         }       
  14.                     else
  15.                         {
  16.                                 DeviceID = 0xFF;
  17.                         }       
  18.             }       
  19.             else
  20.             {
  21.                         if(DeviceID < SENSORNUM)
  22.                         {
  23.                                 SensorCode[DeviceID][RevIndex - 2] = Temp;       
  24.                         }               
  25.                     else
  26.                         {
  27.                                 //数据丢掉,不作处理
  28.                         }       
  29.             }
复制代码     在两个地方对DeviceID进行了判断。接收和使用的时候都加了判断,如果发现DeviceID数据异常,则直接丢弃这一包数据。避免最开始的情况。
大家也帮忙看看修改后的代码有没有问题没有,
此贴到此也算是结贴了吧。从提出问题到现在基本半个小时

一周热门 更多>