經驗分享:單片機程序開發中初級工程師常犯的錯誤
發布時間:2015-05-15 責任編輯:sherry
【導讀】這(zhe)裏(li)利(li)用(yong)一(yi)個(ge)實(shi)際(ji)發(fa)生(sheng)的(de)例(li)子(zi),針(zhen)對(dui)初(chu)級(ji)工(gong)程(cheng)師(shi)經(jing)常(chang)犯(fan)的(de)一(yi)個(ge)小(xiao)錯(cuo)誤(wu),或(huo)者(zhe)經(jing)常(chang)要(yao)走(zou)的(de)一(yi)個(ge)彎(wan)路(lu),做(zuo)了(le)針(zhen)對(dui)性(xing)的(de)糾(jiu)正(zheng)。希(xi)望(wang)可(ke)以(yi)幫(bang)到(dao)大(da)家(jia),文(wen)筆(bi)不(bu)好(hao)文(wen)章(zhang)中(zhong)有(you)敘(xu)述(shu)不(bu)清(qing)的(de)地(di)方(fang)大(da)家(jia)多(duo)多(duo)指(zhi)教(jiao)。
這篇文章我不是想說編程的規範性的東西,如果你想讓自己的程序文件最起碼直觀的看起來美觀、可讀性強,推薦找華為的“C語言編程規範”。我隻想說一說當我們的單片機遇到多個模塊的數據需要處理,類似於“多任務”時我們應該怎麼辦?
背景是這樣的,去年9月份開始安排一個工程師開始做電動汽車交流充電樁,機械設計部分由公司機械結構部門負責。充電樁的電子部分總體上分為X個部分(用到的資源),電阻觸摸屏(RS232),M1卡讀寫(RS232),電能計量表(RS485),語音提示(SPI),電力開關(繼電器IO),通訊接口(RS485、CAN)。
工程師做的過程非常勤奮,期間也是困難重重,改了很多個版本,總算今年6月把充電樁立起來了。
咱zan們men來lai驗yan收shou一yi下xia吧ba,結jie果guo發fa現xian讀du卡ka的de時shi候hou不bu能neng處chu理li觸chu摸mo屏ping,播bo放fang語yu音yin的de時shi候hou不bu能neng處chu理li讀du卡ka,語yu音yin播bo放fang不bu能neng打da斷duan或huo者zhe跳tiao躍yue,反fan正zheng就jiu是shi所suo有you事shi件jian必bi須xu一yi個ge一yi個ge按an部bu就jiu班ban的de來lai,一yi旦dan操cao作zuo錯cuo誤wu就jiu需xu要yao多duo次ci執zhi行xing、等待、甚至重新來過。
一個工作3年多的工程師怎麼會把產品做成這樣呢?看看程序吧!
一看不要緊,嚇一跳!整個的程序是沒有邏輯的,一條線就往下寫……
While(1)
{
//上電進入主程序 或 觸發觸摸屏
//播放提示語音
Delay();//等待播放完畢
//讀取M1卡信息
Delay();//等待讀卡數據返回
//播放提示語音
Delay();//等待播放完畢
//M1卡數據交互,判定下一步操作及提示
Delay();//等待數據處理完畢
……
……
}
這zhe裏li說shuo這zhe個ge工gong程cheng師shi基ji本ben上shang對dui於yu自zi己ji設she計ji的de產chan品pin沒mei有you任ren何he的de整zheng體ti概gai念nian,或huo者zhe說shuo對dui自zi己ji開kai發fa的de程cheng序xu用yong到dao設she計ji上shang會hui有you怎zen樣yang的de實shi際ji效xiao果guo根gen本ben就jiu不bu清qing楚chu。
他犯了幾個我們在程序開發過程中最忌諱的幾個問題:
1、 delay(死等)這類函數隻在應該實驗室驗證某個功能過程中用到,在實際的產品開發時無論是主循環while中,還是其調用的函數中,亦或是中斷服務程序中絕對不可以用到。
2、 產品設計的各個子模塊之間的邏輯關係太強,例如:必須等待播音完畢才能讀卡進入下一步操作等。
我們講,產品設計中隻有各個事件處理模塊間的邏輯關係弱化,才能更加靈活的進行處理。例如:兩個事件A和B,如果程序開發時將A做成B事件的必要條件,B事件的觸發就必須等待A事件的發生。反之如果A事件作為B事件處理的一個特殊情況,那麼程序開發起來就變得靈活很多。
3、 沒有考慮到單片機本身是一個單核單任務的架構,每一個事件都會獨占CPU內核,當多個任務模塊同時存在時我們應該對各個事件進行區分,我們應當分情況、分事件實時性要求等區分對待。
那麼針對於這樣的問題,或者是遇到類似的項目我們應該如何處理呢?
我提幾條建議:
1、jiangyingjianxitongqufenweidulidanyuandanduzuochengdicengqudonghanshuheyingyonghanshu,bingqiehanshuzhengchangyinggaiyoucanshuhefanhuizhi,qizhongfanhuizhishibiyaode。ruhehengliangzheleihanshune?zheleihanshukeyizhixingqiang,zhiyaoyige.h文件和一個.c文件就可以隨意放到任何工程中。例如:語音播放、M1讀卡、485處理等等。
2、將1中的所有函數進行時間評估,評估點有兩個。一個是函數的執行時間t,第二個是函數的周期性發生的時間T,一個最基本的條件是t < T,理想情況應該是t << T。
3、建立一個集中邏輯處理函數,在這個函數中對1中(zhong)的(de)各(ge)個(ge)函(han)數(shu)進(jin)行(xing)調(tiao)度(du)。這(zhe)個(ge)函(han)數(shu)發(fa)揮(hui)的(de)作(zuo)用(yong)相(xiang)當(dang)於(yu)嵌(qian)入(ru)式(shi)係(xi)統(tong)中(zhong)的(de)係(xi)統(tong)調(tiao)度(du)。這(zhe)種(zhong)調(tiao)度(du)是(shi)整(zheng)個(ge)硬(ying)件(jian)邏(luo)輯(ji)中(zhong)所(suo)有(you)事(shi)件(jian)處(chu)理(li)的(de)調(tiao)度(du),它(ta)的(de)目(mu)的(de)是(shi)完(wan)成(cheng)一(yi)個(ge)處(chu)理(li)過(guo)程(cheng),但(dan)是(shi)絕(jue)不(bu)依(yi)賴(lai)於(yu)任(ren)意(yi)事(shi)件(jian)的(de)必(bi)要(yao)處(chu)理(li)過(guo)程(cheng)。這(zhe)樣(yang)就(jiu)將(jiang)問(wen)題(ti)2中提到的事件間的邏輯關係弱化了,處理起來變得十分靈活,使得各個關係不在相互必要。
4、為(wei)了(le)保(bao)證(zheng)前(qian)麵(mian)內(nei)容(rong)的(de)正(zheng)常(chang)實(shi)施(shi)還(hai)需(xu)要(yao)針(zhen)對(dui)各(ge)類(lei)事(shi)件(jian)的(de)周(zhou)期(qi),建(jian)立(li)一(yi)個(ge)必(bi)要(yao)的(de)時(shi)間(jian)管(guan)理(li)函(han)數(shu),時(shi)間(jian)函(han)數(shu)的(de)基(ji)礎(chu)一(yi)般(ban)情(qing)況(kuang)下(xia)由(you)一(yi)個(ge)內(nei)部(bu)定(ding)時(shi)器(qi)的(de)中(zhong)斷(duan)來(lai)完(wan)成(cheng),中(zhong)斷(duan)的(de)周(zhou)期(qi)一(yi)般(ban)我(wo)們(men)考(kao)慮(lv)5-10ms。按照實際需求將N個定時器中斷定義為一個事件處理的周期TT,這個周期應該保證處理完最惡劣情況可能發生的所有t,且保證TT < T。
5、 這其中也有例外,一些實時性要求高的事件應當用中斷完成。其中中斷處理函數的處理事件應盡量短,時間要求參見2。
特別推薦
- 噪聲中提取真值!瑞盟科技推出MSA2240電流檢測芯片賦能多元高端測量場景
- 10MHz高頻運行!氮矽科技發布集成驅動GaN芯片,助力電源能效再攀新高
- 失真度僅0.002%!力芯微推出超低內阻、超低失真4PST模擬開關
- 一“芯”雙電!聖邦微電子發布雙輸出電源芯片,簡化AFE與音頻設計
- 一機適配萬端:金升陽推出1200W可編程電源,賦能高端裝備製造
技術文章更多>>
- 一秒檢測,成本降至萬分之一,光引科技把幾十萬的台式光譜儀“搬”到了手腕上
- AI服務器電源機櫃Power Rack HVDC MW級測試方案
- 突破工藝邊界,奎芯科技LPDDR5X IP矽驗證通過,速率達9600Mbps
- 通過直接、準確、自動測量超低範圍的氯殘留來推動反滲透膜保護
- 從技術研發到規模量產:恩智浦第三代成像雷達平台,賦能下一代自動駕駛!
技術白皮書下載更多>>
- 車規與基於V2X的車輛協同主動避撞技術展望
- 數字隔離助力新能源汽車安全隔離的新挑戰
- 汽車模塊拋負載的解決方案
- 車用連接器的安全創新應用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall
熱門搜索




