經驗分享:單片機程序開發中初級工程師常犯的錯誤
發布時間: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();//等待數據處理完畢
……
……
}
zhelishuozhegegongchengshijibenshangduiyuzijishejidechanpinmeiyourenhedezhengtigainian,huozheshuoduizijikaifadechengxuyongdaoshejishanghuiyouzenyangdeshijixiaoguogenbenjiubuqingchu。
他犯了幾個我們在程序開發過程中最忌諱的幾個問題:
1、 delay(死等)這類函數隻在應該實驗室驗證某個功能過程中用到,在實際的產品開發時無論是主循環while中,還是其調用的函數中,亦或是中斷服務程序中絕對不可以用到。
2、 產品設計的各個子模塊之間的邏輯關係太強,例如:必須等待播音完畢才能讀卡進入下一步操作等。
我們講,產品設計中隻有各個事件處理模塊間的邏輯關係弱化,才能更加靈活的進行處理。例如:兩個事件A和B,如果程序開發時將A做成B事件的必要條件,B事件的觸發就必須等待A事件的發生。反之如果A事件作為B事件處理的一個特殊情況,那麼程序開發起來就變得靈活很多。
3、 沒有考慮到單片機本身是一個單核單任務的架構,每一個事件都會獨占CPU內核,當多個任務模塊同時存在時我們應該對各個事件進行區分,我們應當分情況、分事件實時性要求等區分對待。
那麼針對於這樣的問題,或者是遇到類似的項目我們應該如何處理呢?
我提幾條建議:
1、將jiang硬ying件jian係xi統tong區qu分fen為wei獨du立li單dan元yuan單dan獨du做zuo成cheng底di層ceng驅qu動dong函han數shu和he應ying用yong函han數shu,並bing且qie函han數shu正zheng常chang應ying該gai有you參can數shu和he返fan回hui值zhi,其qi中zhong返fan回hui值zhi是shi必bi要yao的de。如ru何he衡heng量liang這zhe類lei函han數shu呢ne?這zhe類lei函han數shu可ke移yi植zhi性xing強qiang,隻zhi要yao一yi個ge.h文件和一個.c文件就可以隨意放到任何工程中。例如:語音播放、M1讀卡、485處理等等。
2、將1中的所有函數進行時間評估,評估點有兩個。一個是函數的執行時間t,第二個是函數的周期性發生的時間T,一個最基本的條件是t < T,理想情況應該是t << T。
3、建立一個集中邏輯處理函數,在這個函數中對1zhongdegegehanshujinxingtiaodu。zhegehanshufahuidezuoyongxiangdangyuqianrushixitongzhongdexitongtiaodu。zhezhongtiaodushizhenggeyingjianluojizhongsuoyoushijianchulidetiaodu,tademudeshiwanchengyigechuliguocheng,danshijuebuyilaiyurenyishijiandebiyaochuliguocheng。zheyangjiujiangwenti2中提到的事件間的邏輯關係弱化了,處理起來變得十分靈活,使得各個關係不在相互必要。
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慮lv5-10ms。按照實際需求將N個定時器中斷定義為一個事件處理的周期TT,這個周期應該保證處理完最惡劣情況可能發生的所有t,且保證TT < T。
5、 這其中也有例外,一些實時性要求高的事件應當用中斷完成。其中中斷處理函數的處理事件應盡量短,時間要求參見2。
特別推薦
- 噪聲中提取真值!瑞盟科技推出MSA2240電流檢測芯片賦能多元高端測量場景
- 10MHz高頻運行!氮矽科技發布集成驅動GaN芯片,助力電源能效再攀新高
- 失真度僅0.002%!力芯微推出超低內阻、超低失真4PST模擬開關
- 一“芯”雙電!聖邦微電子發布雙輸出電源芯片,簡化AFE與音頻設計
- 一機適配萬端:金升陽推出1200W可編程電源,賦能高端裝備製造
技術文章更多>>
- 貿澤EIT係列新一期,探索AI如何重塑日常科技與用戶體驗
- 算力爆發遇上電源革新,大聯大世平集團攜手晶豐明源線上研討會解鎖應用落地
- 創新不止,創芯不已:第六屆ICDIA創芯展8月南京盛大啟幕!
- AI時代,為什麼存儲基礎設施的可靠性決定數據中心的經濟效益
- 矽典微ONELAB開發係列:為毫米波算法開發者打造的全棧工具鏈
技術白皮書下載更多>>
- 車規與基於V2X的車輛協同主動避撞技術展望
- 數字隔離助力新能源汽車安全隔離的新挑戰
- 汽車模塊拋負載的解決方案
- 車用連接器的安全創新應用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall
熱門搜索
微波功率管
微波開關
微波連接器
微波器件
微波三極管
微波振蕩器
微電機
微調電容
微動開關
微蜂窩
位置傳感器
溫度保險絲
溫度傳感器
溫控開關
溫控可控矽
聞泰
穩壓電源
穩壓二極管
穩壓管
無焊端子
無線充電
無線監控
無源濾波器
五金工具
物聯網
顯示模塊
顯微鏡結構
線圈
線繞電位器
線繞電阻



