2388|6

3404

帖子

6

TA的资源

裸片初长成(初级)

楼主
 

看看这段代码有什么问题 [复制链接]

本帖最后由 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了。而且是很大的数。
大家有没有遇到过类似的情况?或者给想 想有没有其他的可能~!

第一次运行到断点处的样子
谢谢


此帖出自stm32/stm8论坛

最新回复

先试一下强行写成一个固定数 再跑。如果这都能出问题,那再去考虑别的东西写穿了这个数组  详情 回复 发表于 2016-3-21 10:27
点赞 关注
 

回复
举报

9794

帖子

24

TA的资源

版主

沙发
 
Lost[]没有初始化?
Lost[]下边的数组溢出?
此帖出自stm32/stm8论坛

点评

lost初始化了。 lost下面的数组溢出还不敢确定,我找一下啊。不过应该是lost上面的数组溢出导致的吧?  详情 回复 发表于 2016-3-21 10:21
 
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 

回复

3404

帖子

6

TA的资源

裸片初长成(初级)

板凳
 
littleshrimp 发表于 2016-3-21 10:18
Lost[]没有初始化?
Lost[]下边的数组溢出?

lost初始化了。
lost下面的数组溢出还不敢确定,我找一下啊。不过应该是lost上面的数组溢出导致的吧?
此帖出自stm32/stm8论坛

点评

对,上边,我说错了。 其它地方对Lost[]做处理了吗?  详情 回复 发表于 2016-3-21 10:22
 
 

回复

9794

帖子

24

TA的资源

版主

4
 
jishuaihu 发表于 2016-3-21 10:21
lost初始化了。
lost下面的数组溢出还不敢确定,我找一下啊。不过应该是lost上面的数组溢出导致的吧?

对,上边,我说错了。
其它地方对Lost[]做处理了吗?
此帖出自stm32/stm8论坛

点评

其他的地方就一个清零。 我大概知道上面原因了。我对另外的一个数组复制的时候没有判断数组标号,应该是那儿的问题,我加一个判断试试啊。 谢谢  详情 回复 发表于 2016-3-21 10:24
 
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 

回复

3404

帖子

6

TA的资源

裸片初长成(初级)

5
 
littleshrimp 发表于 2016-3-21 10:22
对,上边,我说错了。
其它地方对Lost[]做处理了吗?

其他的地方就一个清零。
我大概知道上面原因了。我对另外的一个数组复制的时候没有判断数组标号,应该是那儿的问题,我加一个判断试试啊。
谢谢
此帖出自stm32/stm8论坛
 
 
 

回复

7815

帖子

56

TA的资源

裸片初长成(中级)

6
 
先试一下强行写成一个固定数 再跑。如果这都能出问题,那再去考虑别的东西写穿了这个数组
此帖出自stm32/stm8论坛

点评

搞定了,谢谢 littleshrimp说的对,是其他的数组越限了  详情 回复 发表于 2016-3-21 10:32
 
 
 

回复

3404

帖子

6

TA的资源

裸片初长成(初级)

7
 
本帖最后由 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数据异常,则直接丢弃这一包数据。避免最开始的情况。
大家也帮忙看看修改后的代码有没有问题没有,
此贴到此也算是结贴了吧。从提出问题到现在基本半个小时
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表