• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

MCU编写程序要注重效率和稳定及可靠性

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
全部回复(3)
正序查看
倒序查看
wayhe
LV.4
2
2006-10-26 00:12
好贴,顶一下.
0
回复
hotpower
LV.5
3
2006-10-26 00:20
@wayhe
好贴,顶一下.
0
回复
金狐狸
LV.3
4
2006-11-14 20:52
@hotpower
哈哈~~~这里真不是学习MCU的地方~~~http://www.daxia.com/bbs/search2.asp?word=hotpower&sele=2http://bbs.21ic.com/club/bbs/ShowAnnounce.asp?id=2302245
支持一下,讲的很不错的,学习了.
0
回复