Bug类型
- 变量溢出 Bug
正确版本程序
- apps/benchmark/TestOverflow
程序描述
- 传感器每0.1S采集数据并保存到的buffer[2]数组中;
- 传感器采集数据成功,切换LED0的状态,并提交
computeTask任务,采集失败则切换LED1的状态; - 任务computeTask中计算结果如果大于uint16_t则发生溢出,切换LED2的状态。
Avrora运行程序
- cd /opt/tinyos-2.x/apps/benchmark/TestOverflow
- alias avrora=’java -jar avrora-beta-1.7.113.jar -colors=false -banner=false’
- SENSORBOARD=mts300 make mica2
- mv build/mica2/main.exe tof.elf
- avrora -platform=mica2 -monitors=leds -seconds=2 -simulation=sensor-network -nodecount=1 -sensor-data=”“light”“:0:. tof.elf
运行结果分析(正确版本)
- LED0切换结果正确;
- LED1、LED2不发生切换。
bug版本程序
- /apps/benchmark/bm_TestOverflow
程序修改的部分
- computeTask任务中将简单的数据求和改成求积运算。
bug的显现条件
- 运算结果大于uint16_t的最大取值时
Bug症状
LED0正常切换。LED1不切换,LED2也会发生切换(表示计算结果发生溢出);
运行net.tinyos.tools.PrintClient程序会显示变量溢出信息:Error:Variable Overflow!
备注
- 正确版本的TestOverflow程序也有可能出现
Bug,只不过求和溢出的概率比较低而已。