搜索
bottom↓
回复: 9

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

[复制链接]

出0入0汤圆

发表于 2006-10-22 22:41:00 | 显示全部楼层 |阅读模式
最近看了很多的研究生编的程序很是"难受"~~~



例:



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"~~~



菜地公告

出0入0汤圆

发表于 2007-4-5 22:04:04 | 显示全部楼层
支持!

这条讲的我也有心得!

我现在都是这样做的!个人本来的出发点也是认为这样修改后抗干扰会增强!

没想到前辈都上升到理论高度了!

出10入95汤圆

发表于 2007-4-27 15:13:18 | 显示全部楼层
好,定一下!我就是这么写的,呵呵,是我一个老师傅看我写的程序,就这样给我说过,我这辈子都不会忘的!

出0入0汤圆

发表于 2007-5-18 20:28:01 | 显示全部楼层
受教了, 这种科学种菜的讲座对俺们农民兄弟真是太有用了!希望hotpower大侠以后多开这样的讲座:-)顶

出0入0汤圆

发表于 2007-8-12 11:21:26 | 显示全部楼层
谢谢前辈指点

出0入0汤圆

发表于 2007-8-14 13:03:10 | 显示全部楼层
汗,RAM会被攺写,即采用这种编程手法,也没有办法解决。。。。。

出0入4汤圆

发表于 2012-8-13 08:43:09 | 显示全部楼层
遇到过了,有体会

出0入10汤圆

发表于 2012-8-13 08:47:36 | 显示全部楼层
老一辈就说过了,这样的,弄个半区间,安全

出0入0汤圆

发表于 2012-8-13 14:31:05 | 显示全部楼层
这个深有体会, 以前也那样写,然后出现这莫名的死循环了,这才知道,这有可能想不到事,然后就益出了,找了好久
都不知道为什么?好不起眼的东西,有时候都是要命的
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-7 21:19

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表