經(jīng)驗(yàn)分享:單片機(jī)程序開發(fā)中初級工程師常犯的錯誤
發(fā)布時間:2015-05-15 責(zé)任編輯:sherry
【導(dǎo)讀】這里利用一個實(shí)際發(fā)生的例子,針對初級工程師經(jīng)常犯的一個小錯誤,或者經(jīng)常要走的一個彎路,做了針對性的糾正。希望可以幫到大家,文筆不好文章中有敘述不清的地方大家多多指教。
這篇文章我不是想說編程的規(guī)范性的東西,如果你想讓自己的程序文件最起碼直觀的看起來美觀、可讀性強(qiáng),推薦找華為的“C語言編程規(guī)范”。我只想說一說當(dāng)我們的單片機(jī)遇到多個模塊的數(shù)據(jù)需要處理,類似于“多任務(wù)”時我們應(yīng)該怎么辦?
背景是這樣的,去年9月份開始安排一個工程師開始做電動汽車交流充電樁,機(jī)械設(shè)計(jì)部分由公司機(jī)械結(jié)構(gòu)部門負(fù)責(zé)。充電樁的電子部分總體上分為X個部分(用到的資源),電阻觸摸屏(RS232),M1卡讀寫(RS232),電能計(jì)量表(RS485),語音提示(SPI),電力開關(guān)(繼電器IO),通訊接口(RS485、CAN)。
工程師做的過程非常勤奮,期間也是困難重重,改了很多個版本,總算今年6月把充電樁立起來了。
咱們來驗(yàn)收一下吧,結(jié)果發(fā)現(xiàn)讀卡的時候不能處理觸摸屏,播放語音的時候不能處理讀卡,語音播放不能打斷或者跳躍,反正就是所有事件必須一個一個按部就班的來,一旦操作錯誤就需要多次執(zhí)行、等待、甚至重新來過。
一個工作3年多的工程師怎么會把產(chǎn)品做成這樣呢?看看程序吧!
一看不要緊,嚇一跳!整個的程序是沒有邏輯的,一條線就往下寫……
While(1)
{
//上電進(jìn)入主程序 或 觸發(fā)觸摸屏
//播放提示語音
Delay();//等待播放完畢
//讀取M1卡信息
Delay();//等待讀卡數(shù)據(jù)返回
//播放提示語音
Delay();//等待播放完畢
//M1卡數(shù)據(jù)交互,判定下一步操作及提示
Delay();//等待數(shù)據(jù)處理完畢
……
……
}
這里說這個工程師基本上對于自己設(shè)計(jì)的產(chǎn)品沒有任何的整體概念,或者說對自己開發(fā)的程序用到設(shè)計(jì)上會有怎樣的實(shí)際效果根本就不清楚。
他犯了幾個我們在程序開發(fā)過程中最忌諱的幾個問題:
1、 delay(死等)這類函數(shù)只在應(yīng)該實(shí)驗(yàn)室驗(yàn)證某個功能過程中用到,在實(shí)際的產(chǎn)品開發(fā)時無論是主循環(huán)while中,還是其調(diào)用的函數(shù)中,亦或是中斷服務(wù)程序中絕對不可以用到。
2、 產(chǎn)品設(shè)計(jì)的各個子模塊之間的邏輯關(guān)系太強(qiáng),例如:必須等待播音完畢才能讀卡進(jìn)入下一步操作等。
我們講,產(chǎn)品設(shè)計(jì)中只有各個事件處理模塊間的邏輯關(guān)系弱化,才能更加靈活的進(jìn)行處理。例如:兩個事件A和B,如果程序開發(fā)時將A做成B事件的必要條件,B事件的觸發(fā)就必須等待A事件的發(fā)生。反之如果A事件作為B事件處理的一個特殊情況,那么程序開發(fā)起來就變得靈活很多。
3、 沒有考慮到單片機(jī)本身是一個單核單任務(wù)的架構(gòu),每一個事件都會獨(dú)占CPU內(nèi)核,當(dāng)多個任務(wù)模塊同時存在時我們應(yīng)該對各個事件進(jìn)行區(qū)分,我們應(yīng)當(dāng)分情況、分事件實(shí)時性要求等區(qū)分對待。
那么針對于這樣的問題,或者是遇到類似的項(xiàng)目我們應(yīng)該如何處理呢?
我提幾條建議:
1、將硬件系統(tǒng)區(qū)分為獨(dú)立單元單獨(dú)做成底層驅(qū)動函數(shù)和應(yīng)用函數(shù),并且函數(shù)正常應(yīng)該有參數(shù)和返回值,其中返回值是必要的。如何衡量這類函數(shù)呢?這類函數(shù)可移植性強(qiáng),只要一個.h文件和一個.c文件就可以隨意放到任何工程中。例如:語音播放、M1讀卡、485處理等等。
2、將1中的所有函數(shù)進(jìn)行時間評估,評估點(diǎn)有兩個。一個是函數(shù)的執(zhí)行時間t,第二個是函數(shù)的周期性發(fā)生的時間T,一個最基本的條件是t < T,理想情況應(yīng)該是t << T。
3、建立一個集中邏輯處理函數(shù),在這個函數(shù)中對1中的各個函數(shù)進(jìn)行調(diào)度。這個函數(shù)發(fā)揮的作用相當(dāng)于嵌入式系統(tǒng)中的系統(tǒng)調(diào)度。這種調(diào)度是整個硬件邏輯中所有事件處理的調(diào)度,它的目的是完成一個處理過程,但是絕不依賴于任意事件的必要處理過程。這樣就將問題2中提到的事件間的邏輯關(guān)系弱化了,處理起來變得十分靈活,使得各個關(guān)系不在相互必要。
4、為了保證前面內(nèi)容的正常實(shí)施還需要針對各類事件的周期,建立一個必要的時間管理函數(shù),時間函數(shù)的基礎(chǔ)一般情況下由一個內(nèi)部定時器的中斷來完成,中斷的周期一般我們考慮5-10ms。按照實(shí)際需求將N個定時器中斷定義為一個事件處理的周期TT,這個周期應(yīng)該保證處理完最惡劣情況可能發(fā)生的所有t,且保證TT < T。
5、 這其中也有例外,一些實(shí)時性要求高的事件應(yīng)當(dāng)用中斷完成。其中中斷處理函數(shù)的處理事件應(yīng)盡量短,時間要求參見2。
特別推薦
- 噪聲中提取真值!瑞盟科技推出MSA2240電流檢測芯片賦能多元高端測量場景
- 10MHz高頻運(yùn)行!氮矽科技發(fā)布集成驅(qū)動GaN芯片,助力電源能效再攀新高
- 失真度僅0.002%!力芯微推出超低內(nèi)阻、超低失真4PST模擬開關(guān)
- 一“芯”雙電!圣邦微電子發(fā)布雙輸出電源芯片,簡化AFE與音頻設(shè)計(jì)
- 一機(jī)適配萬端:金升陽推出1200W可編程電源,賦能高端裝備制造
技術(shù)文章更多>>
- AI引爆電子設(shè)計(jì)革命!莫仕點(diǎn)出十大方向,這些行業(yè)最先受益
- 對標(biāo)EN ISO 15118-20:2022 歐盟準(zhǔn)入級智能交流充電樁技術(shù)方案
- 進(jìn)迭時空發(fā)布 K3 芯片 以 RISC-V 架構(gòu)賦能智能計(jì)算新場景
- 意法半導(dǎo)體公布2025年第四季度及全年財報
技術(shù)白皮書下載更多>>
- 車規(guī)與基于V2X的車輛協(xié)同主動避撞技術(shù)展望
- 數(shù)字隔離助力新能源汽車安全隔離的新挑戰(zhàn)
- 汽車模塊拋負(fù)載的解決方案
- 車用連接器的安全創(chuàng)新應(yīng)用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall
熱門搜索
音頻IC
音頻SoC
音頻變壓器
引線電感
語音控制
元件符號
元器件選型
云電視
云計(jì)算
云母電容
真空三極管
振蕩器
振蕩線圈
振動器
振動設(shè)備
震動馬達(dá)
整流變壓器
整流二極管
整流濾波
直流電機(jī)
智能抄表
智能電表
智能電網(wǎng)
智能家居
智能交通
智能手機(jī)
中電華星
中電器材
中功率管
中間繼電器



