http://blog.21ic.com/more.asp?name=hotpower&id=31019
HotPower 发表于 2006-10-22 22:27 侃单片机 ←返回版面 举报该贴
最近看了很多的研究生编的程序很是"难受"~~~
例:
count ++;
if (count == 128) count = 0;
粗看上去没任何问题.但在MCU/DSP/ARM的编程中就大不相同了.
这在PC中没问题,但在工业现场问题就来了.
大家都知道可能在出现干扰时,RAM是会"被改写"的.
假如count是个long型的或即使是char型的.
令count初值=0,那么在count在128前有可能被改写为大于128的值.
这样将会带来不可预测的后果,最简单的就是数组的溢出或延时控制设备不能被及时关闭...
再者,在有流水线的CPU中,jmp/call等改变PC的操作都会破坏流水线,这样就降低了程序运行的效率.
故应该这样改为好(防止数组的溢出时常用):
count ++;
count &= 0x7f;
若在满足条件且需处理其他事件或任务时,则必须使用这样的语句.
但也要这样改为好:
count ++;
if (count >= 128) {
/*-----在此处理其他事件或任务*/
count = 0;
}
注意这里将==改为>=了.
改动虽小,但可靠性提高了很多.特别在防止数组的溢出时很有必要.
像ARM/DSP经常在RAM中运行,代码和数据是"粘连"的,RAM"数据"的毁坏难道
RAM"程序"能有好日子过吗???
所以要从"小事"做起,不要以后老"跪求bug"~~~
http://hotpower.21ic.org