你的位置:首頁(yè) > 測(cè)試測(cè)量 > 正文
經(jīng)驗(yàn)分享:?jiǎn)纹瑱C(jī)程序開發(fā)中初級(jí)工程師常犯的錯(cuò)誤
發(fā)布時(shí)間:2015-05-15 責(zé)任編輯:sherry
【導(dǎo)讀】這里利用一個(gè)實(shí)際發(fā)生的例子,針對(duì)初級(jí)工程師經(jīng)常犯的一個(gè)小錯(cuò)誤,或者經(jīng)常要走的一個(gè)彎路,做了針對(duì)性的糾正。希望可以幫到大家,文筆不好文章中有敘述不清的地方大家多多指教。
這篇文章我不是想說編程的規(guī)范性的東西,如果你想讓自己的程序文件最起碼直觀的看起來美觀、可讀性強(qiáng),推薦找華為的“C語(yǔ)言編程規(guī)范”。我只想說一說當(dāng)我們的單片機(jī)遇到多個(gè)模塊的數(shù)據(jù)需要處理,類似于“多任務(wù)”時(shí)我們應(yīng)該怎么辦?
背景是這樣的,去年9月份開始安排一個(gè)工程師開始做電動(dòng)汽車交流充電樁,機(jī)械設(shè)計(jì)部分由公司機(jī)械結(jié)構(gòu)部門負(fù)責(zé)。充電樁的電子部分總體上分為X個(gè)部分(用到的資源),電阻觸摸屏(RS232),M1卡讀寫(RS232),電能計(jì)量表(RS485),語(yǔ)音提示(SPI),電力開關(guān)(繼電器IO),通訊接口(RS485、CAN)。
工程師做的過程非常勤奮,期間也是困難重重,改了很多個(gè)版本,總算今年6月把充電樁立起來了。
咱們來驗(yàn)收一下吧,結(jié)果發(fā)現(xiàn)讀卡的時(shí)候不能處理觸摸屏,播放語(yǔ)音的時(shí)候不能處理讀卡,語(yǔ)音播放不能打斷或者跳躍,反正就是所有事件必須一個(gè)一個(gè)按部就班的來,一旦操作錯(cuò)誤就需要多次執(zhí)行、等待、甚至重新來過。
一個(gè)工作3年多的工程師怎么會(huì)把產(chǎn)品做成這樣呢?看看程序吧!
一看不要緊,嚇一跳!整個(gè)的程序是沒有邏輯的,一條線就往下寫……
While(1)
{
//上電進(jìn)入主程序 或 觸發(fā)觸摸屏
//播放提示語(yǔ)音
Delay();//等待播放完畢
//讀取M1卡信息
Delay();//等待讀卡數(shù)據(jù)返回
//播放提示語(yǔ)音
Delay();//等待播放完畢
//M1卡數(shù)據(jù)交互,判定下一步操作及提示
Delay();//等待數(shù)據(jù)處理完畢
……
……
}
這里說這個(gè)工程師基本上對(duì)于自己設(shè)計(jì)的產(chǎn)品沒有任何的整體概念,或者說對(duì)自己開發(fā)的程序用到設(shè)計(jì)上會(huì)有怎樣的實(shí)際效果根本就不清楚。
他犯了幾個(gè)我們?cè)诔绦蜷_發(fā)過程中最忌諱的幾個(gè)問題:
1、 delay(死等)這類函數(shù)只在應(yīng)該實(shí)驗(yàn)室驗(yàn)證某個(gè)功能過程中用到,在實(shí)際的產(chǎn)品開發(fā)時(shí)無(wú)論是主循環(huán)while中,還是其調(diào)用的函數(shù)中,亦或是中斷服務(wù)程序中絕對(duì)不可以用到。
2、 產(chǎn)品設(shè)計(jì)的各個(gè)子模塊之間的邏輯關(guān)系太強(qiáng),例如:必須等待播音完畢才能讀卡進(jìn)入下一步操作等。
我們講,產(chǎn)品設(shè)計(jì)中只有各個(gè)事件處理模塊間的邏輯關(guān)系弱化,才能更加靈活的進(jìn)行處理。例如:兩個(gè)事件A和B,如果程序開發(fā)時(shí)將A做成B事件的必要條件,B事件的觸發(fā)就必須等待A事件的發(fā)生。反之如果A事件作為B事件處理的一個(gè)特殊情況,那么程序開發(fā)起來就變得靈活很多。
3、 沒有考慮到單片機(jī)本身是一個(gè)單核單任務(wù)的架構(gòu),每一個(gè)事件都會(huì)獨(dú)占CPU內(nèi)核,當(dāng)多個(gè)任務(wù)模塊同時(shí)存在時(shí)我們應(yīng)該對(duì)各個(gè)事件進(jìn)行區(qū)分,我們應(yīng)當(dāng)分情況、分事件實(shí)時(shí)性要求等區(qū)分對(duì)待。
那么針對(duì)于這樣的問題,或者是遇到類似的項(xiàng)目我們應(yīng)該如何處理呢?
我提幾條建議:
1、將硬件系統(tǒng)區(qū)分為獨(dú)立單元單獨(dú)做成底層驅(qū)動(dòng)函數(shù)和應(yīng)用函數(shù),并且函數(shù)正常應(yīng)該有參數(shù)和返回值,其中返回值是必要的。如何衡量這類函數(shù)呢?這類函數(shù)可移植性強(qiáng),只要一個(gè).h文件和一個(gè).c文件就可以隨意放到任何工程中。例如:語(yǔ)音播放、M1讀卡、485處理等等。
2、將1中的所有函數(shù)進(jìn)行時(shí)間評(píng)估,評(píng)估點(diǎn)有兩個(gè)。一個(gè)是函數(shù)的執(zhí)行時(shí)間t,第二個(gè)是函數(shù)的周期性發(fā)生的時(shí)間T,一個(gè)最基本的條件是t < T,理想情況應(yīng)該是t << T。
3、建立一個(gè)集中邏輯處理函數(shù),在這個(gè)函數(shù)中對(duì)1中的各個(gè)函數(shù)進(jìn)行調(diào)度。這個(gè)函數(shù)發(fā)揮的作用相當(dāng)于嵌入式系統(tǒng)中的系統(tǒng)調(diào)度。這種調(diào)度是整個(gè)硬件邏輯中所有事件處理的調(diào)度,它的目的是完成一個(gè)處理過程,但是絕不依賴于任意事件的必要處理過程。這樣就將問題2中提到的事件間的邏輯關(guān)系弱化了,處理起來變得十分靈活,使得各個(gè)關(guān)系不在相互必要。
4、為了保證前面內(nèi)容的正常實(shí)施還需要針對(duì)各類事件的周期,建立一個(gè)必要的時(shí)間管理函數(shù),時(shí)間函數(shù)的基礎(chǔ)一般情況下由一個(gè)內(nèi)部定時(shí)器的中斷來完成,中斷的周期一般我們考慮5-10ms。按照實(shí)際需求將N個(gè)定時(shí)器中斷定義為一個(gè)事件處理的周期TT,這個(gè)周期應(yīng)該保證處理完最惡劣情況可能發(fā)生的所有t,且保證TT < T。
5、 這其中也有例外,一些實(shí)時(shí)性要求高的事件應(yīng)當(dāng)用中斷完成。其中中斷處理函數(shù)的處理事件應(yīng)盡量短,時(shí)間要求參見2。
特別推薦
- 實(shí)現(xiàn)物流和零售自動(dòng)化——第2部分
- 提升高瞬態(tài)汽車應(yīng)用的速度和效率
- 如何優(yōu)化超低噪聲μModule穩(wěn)壓器的二階輸出濾波器
- 使用示波器對(duì)三相電機(jī)驅(qū)動(dòng)器進(jìn)行測(cè)量(上)
- 人形機(jī)器人、人工智能大模型爆了 來CITE 2025一探究竟
- 2025年及未來半導(dǎo)體行業(yè)的八大趨勢(shì)
- 圖像傳感器選擇標(biāo)準(zhǔn)多?成像性能必須排第一
技術(shù)文章更多>>
- 從自動(dòng)化到智能化,線束加工企業(yè)如何智領(lǐng)市場(chǎng)主流?
- 從光色同控AI芯片到黑曜屏Ultra:解碼海信E8Q Pro背后的技術(shù)突圍戰(zhàn)
- 低功耗MCU在智能水表場(chǎng)景中的關(guān)鍵應(yīng)用價(jià)值與實(shí)戰(zhàn)方案
- 圖像傳感器選型黃金三大標(biāo)準(zhǔn),工程師必知!
- 圖像傳感器選擇標(biāo)準(zhǔn)多?成像性能必須排第一
技術(shù)白皮書下載更多>>
- 車規(guī)與基于V2X的車輛協(xié)同主動(dòng)避撞技術(shù)展望
- 數(shù)字隔離助力新能源汽車安全隔離的新挑戰(zhàn)
- 汽車模塊拋負(fù)載的解決方案
- 車用連接器的安全創(chuàng)新應(yīng)用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall
熱門搜索
融斷電阻
柔性PCB
銳迪科
瑞薩
賽普拉斯
三端穩(wěn)壓管
三極管
色環(huán)電感
上海豐寶
攝像頭
生產(chǎn)測(cè)試
聲表諧振器
聲傳感器
濕度傳感器
石英機(jī)械表
石英石危害
時(shí)間繼電器
時(shí)鐘IC
世強(qiáng)電訊
示波器
視頻IC
視頻監(jiān)控
收發(fā)器
手機(jī)開發(fā)
受話器
數(shù)字家庭
數(shù)字家庭
數(shù)字鎖相環(huán)
雙向可控硅
水泥電阻