http://blog.21ic.com/more.asp?name=hotpower&id=31019
HotPower 發(fā)表于 2006-10-22 22:27 侃單片機(jī) ←返回版面 舉報(bào)該貼
最近看了很多的研究生編的程序很是"難受"~~~
例:
count ++;
if (count == 128) count = 0;
粗看上去沒任何問題.但在MCU/DSP/ARM的編程中就大不相同了.
這在PC中沒問題,但在工業(yè)現(xiàn)場問題就來了.
大家都知道可能在出現(xiàn)干擾時(shí),RAM是會"被改寫"的.
假如count是個(gè)long型的或即使是char型的.
令count初值=0,那么在count在128前有可能被改寫為大于128的值.
這樣將會帶來不可預(yù)測的后果,最簡單的就是數(shù)組的溢出或延時(shí)控制設(shè)備不能被及時(shí)關(guān)閉...
再者,在有流水線的CPU中,jmp/call等改變PC的操作都會破壞流水線,這樣就降低了程序運(yùn)行的效率.
故應(yīng)該這樣改為好(防止數(shù)組的溢出時(shí)常用):
count ++;
count &= 0x7f;
若在滿足條件且需處理其他事件或任務(wù)時(shí),則必須使用這樣的語句.
但也要這樣改為好:
count ++;
if (count >= 128) {
/*-----在此處理其他事件或任務(wù)*/
count = 0;
}
注意這里將==改為>=了.
改動雖小,但可靠性提高了很多.特別在防止數(shù)組的溢出時(shí)很有必要.
像ARM/DSP經(jīng)常在RAM中運(yùn)行,代碼和數(shù)據(jù)是"粘連"的,RAM"數(shù)據(jù)"的毀壞難道
RAM"程序"能有好日子過嗎???
所以要從"小事"做起,不要以后老"跪求bug"~~~
http://hotpower.21ic.org
MCU編寫程序要注重效率和穩(wěn)定及可靠性
全部回復(fù)(3)
正序查看
倒序查看
@wayhe
好貼,頂一下.
哈哈~~~這里真不是學(xué)習(xí)MCU的地方~~~
http://www.daxia.com/bbs/search2.asp?word=hotpower&sele=2
http://bbs.21ic.com/club/bbs/ShowAnnounce.asp?id=2302245
http://www.daxia.com/bbs/search2.asp?word=hotpower&sele=2
http://bbs.21ic.com/club/bbs/ShowAnnounce.asp?id=2302245
0
回復(fù)