国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

電子工程網(wǎng)

標(biāo)題: 單片機(jī)程序開發(fā)時(shí),初級工程師常犯的一個(gè)錯(cuò)誤 [打印本頁]

作者: 技術(shù)小白    時(shí)間: 2017-7-20 09:30
標(biāo)題: 單片機(jī)程序開發(fā)時(shí),初級工程師常犯的一個(gè)錯(cuò)誤
單片機(jī)程序開發(fā)時(shí),初級工程師常犯的一個(gè)錯(cuò)誤

這里利用一個(gè)實(shí)際發(fā)生的例子,針對初級工程師經(jīng)常犯的一個(gè)小錯(cuò)誤,或者經(jīng)常要走的一個(gè)彎路,做了針對性的糾正。希望可以幫到大家,文筆不好文章中有敘述不清的地方大家多多指教。

這篇文章我不是想說編程的規(guī)范性的東西,如果你想讓自己的程序文件最起碼直觀的看起來美觀、可讀性強(qiáng),推薦找華為的“C語言編程規(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),語音提示(SPI),電力開關(guān)(繼電器IO),通訊接口(RS485、CAN)。

工程師做的過程非常勤奮,期間也是困難重重,改了很多個(gè)版本,總算今年6月把充電樁立起來了。

咱們來驗(yàn)收一下吧,結(jié)果發(fā)現(xiàn)讀卡的時(shí)候不能處理觸摸屏,播放語音的時(shí)候不能處理讀卡,語音播放不能打斷或者跳躍,反正就是所有事件必須一個(gè)一個(gè)按部就班的來,一旦操作錯(cuò)誤就需要多次執(zhí)行、等待、甚至重新來過。

一個(gè)工作3年多的工程師怎么會把產(chǎn)品做成這樣呢?看看程序吧!

一看不要緊,嚇一跳!整個(gè)的程序是沒有邏輯的,一條線就往下寫……

While(1)

{

//上電進(jìn)入主程序 或 觸發(fā)觸摸屏

//播放提示語音

Delay();//等待播放完畢

//讀取M1卡信息

Delay();//等待讀卡數(shù)據(jù)返回

//播放提示語音

Delay();//等待播放完畢

//M1卡數(shù)據(jù)交互,判定下一步操作及提示

Delay();//等待數(shù)據(jù)處理完畢

……

……

}

這里說這個(gè)工程師基本上對于自己設(shè)計(jì)的產(chǎn)品沒有任何的整體概念,或者說對自己開發(fā)的程序用到設(shè)計(jì)上會有怎樣的實(shí)際效果根本就不清楚。

他犯了幾個(gè)我們在程序開發(fā)過程中最忌諱的幾個(gè)問題:

1、 delay(死等)這類函數(shù)只在應(yīng)該實(shí)驗(yàn)室驗(yàn)證某個(gè)功能過程中用到,在實(shí)際的產(chǎn)品開發(fā)時(shí)無論是主循環(huán)while中,還是其調(diào)用的函數(shù)中,亦或是中斷服務(wù)程序中絕對不可以用到。

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è)事件都會獨(dú)占CPU內(nèi)核,當(dāng)多個(gè)任務(wù)模塊同時(shí)存在時(shí)我們應(yīng)該對各個(gè)事件進(jìn)行區(qū)分,我們應(yīng)當(dāng)分情況、分事件實(shí)時(shí)性要求等區(qū)分對待。

那么針對于這樣的問題,或者是遇到類似的項(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文件就可以隨意放到任何工程中。例如:語音播放、M1讀卡、485處理等等。

2、將1中的所有函數(shù)進(jìn)行時(shí)間評估,評估點(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ù)中對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í)施還需要針對各類事件的周期,建立一個(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。


想學(xué)習(xí)的你和我聯(lián)系預(yù)約就可以免費(fèi)聽課了。
以下課程可免費(fèi)試聽C語言、電子、PCB、STM32、Linux、FPGA、JAVA、安卓等。
宋工企鵝號:3524-6590-88   Tel/WX:173--1795--1908




作者: ttlaoya    時(shí)間: 2017-7-20 13:45

作者: 1238    時(shí)間: 2017-10-16 08:33
謝謝分享!學(xué)習(xí)了。
作者: 1238    時(shí)間: 2017-10-16 08:36
新手小白來論壇學(xué)習(xí)學(xué)習(xí)。




歡迎光臨 電子工程網(wǎng) (http://m.qingdxww.cn/) Powered by Discuz! X3.4
主站蜘蛛池模板: 国产成人精品三级在线 | 国内精品一区二区三区 | 欧美a图 | 欧美性高清在线视频 | 日韩天堂网 | 麻豆国内精品欧美在线 | 成人黄色在线视频 | 欧美视频第一区 | h在线免费视频 | 久久久噜久噜久久综合 | 自拍偷自拍亚洲精品情侣 | 日韩成人av在线 | 老司机精品福利视频 | 午夜色婷婷 | 91手机在线视频观看 | 欧美日韩国产另类在线观看 | 免费看一区二区三区 | 四虎永久免费地址在线网站 | 草莓视频免费下载观看丝瓜 | 91麻豆高清国产在线播放 | 色屋网| 国产性精品| 午夜网站在线播放 | 手机看片日韩日韩国产在线看 | 色综合久久88色综合天天 | 在线毛片观看 | 日韩在线观看视频网站 | 女人洗澡一级特黄毛片 | 美女脱了内裤张开腿让女人添软件 | 亚洲日韩精品欧美一区二区一 | 男人色综合 | 精品久久久久久中文字幕2017 | mitunav.xyyx| 色爱五月天 | 欧美亚洲另类在线 | 四虎国产精品永久免费网址 | 亚洲大片免费 | 天天操一操 | 九九色视频在线观看 | 最近高清免费观看日本 | 日韩成人黄色 |