Benchmark库的建立06:变量溢出 Bug

来源:互联网 发布:ps ef grep java 编辑:程序博客网 时间:2024/05/22 03:28

Bug类型

  1. 变量溢出 Bug

正确版本程序

  1. apps/benchmark/TestOverflow

程序描述

  1. 传感器每0.1S采集数据并保存到的buffer[2]数组中;
  2. 传感器采集数据成功,切换LED0的状态,并提交
    computeTask任务,采集失败则切换LED1的状态;
  3. 任务computeTask中计算结果如果大于uint16_t则发生溢出,切换LED2的状态。

Avrora运行程序

  1. cd /opt/tinyos-2.x/apps/benchmark/TestOverflow
  2. alias avrora=’java -jar avrora-beta-1.7.113.jar -colors=false -banner=false’
  3. SENSORBOARD=mts300 make mica2
  4. mv build/mica2/main.exe tof.elf
  5. avrora -platform=mica2 -monitors=leds -seconds=2 -simulation=sensor-network -nodecount=1 -sensor-data=”“light”“:0:. tof.elf

这里写图片描述

运行结果分析(正确版本)

  1. LED0切换结果正确;
  2. LED1、LED2不发生切换。

bug版本程序

  1. /apps/benchmark/bm_TestOverflow

程序修改的部分

  1. computeTask任务中将简单的数据求和改成求积运算。

bug的显现条件

  1. 运算结果大于uint16_t的最大取值时

Bug症状

  1. LED0正常切换。LED1不切换,LED2也会发生切换(表示计算结果发生溢出);

  2. 运行net.tinyos.tools.PrintClient程序会显示变量溢出信息:Error:Variable Overflow!

备注

  1. 正确版本的TestOverflow程序也有可能出现
    Bug,只不过求和溢出的概率比较低而已。
0 0