日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > > 嵌入式微處理器
[導讀]這里利用一個實際發(fā)生的例子,針對初級工程師經(jīng)常犯的一個小錯誤,或者經(jīng)常要走的一個彎路,做了針對性的糾正。希望可以幫到大家,文筆不好文章中有敘述不清的地方大家多多指教。


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

這篇文章我不是想說編程的規(guī)范性的東西,如果你想讓自己的程序文件最起碼直觀的看起來美觀、可讀性強,推薦找華為的“C語言編程規(guī)范”。我只想說一說當我們的單片機遇到多個模塊的數(shù)據(jù)需要處理,類似于“多任務”時我們應該怎么辦?

背景是這樣的,去年9月份開始安排一個工程師開始做電動汽車交流充電樁,機械設計部分由公司機械結構部門負責。充電樁的電子部分總體上分為X個部分(用到的資源),電阻觸摸屏(RS232),M1卡讀寫(RS232),電能計量表(RS485),語音提示(SPI),電力開關(繼電器IO),通訊接口(RS485、CAN)。

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

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

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

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

  While1  {  //上電進入主程序 或 觸發(fā)觸摸屏  //播放提示語音  Delay();//等待播放完畢  //讀取M1卡信息  Delay();//等待讀卡數(shù)據(jù)返回  //播放提示語音  Delay();//等待播放完畢  //M1卡數(shù)據(jù)交互,判定下一步操作及提示  Delay();//等待數(shù)據(jù)處理完畢  ……  ……  }

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

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

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

2、 產(chǎn)品設計的各個子模塊之間的邏輯關系太強,例如:必須等待播音完畢才能讀卡進入下一步操作等。

我們講,產(chǎn)品設計中只有各個事件處理模塊間的邏輯關系弱化,才能更加靈活的進行處理。例如:兩個事件A和B,如果程序開發(fā)時將A做成B事件的必要條件,B事件的觸發(fā)就必須等待A事件的發(fā)生。反之如果A事件作為B事件處理的一個特殊情況,那么程序開發(fā)起來就變得靈活很多。
  
3、 沒有考慮到單片機本身是一個單核單任務的架構,每一個事件都會獨占CPU內(nèi)核,當多個任務模塊同時存在時我們應該對各個事件進行區(qū)分,我們應當分情況、分事件實時性要求等區(qū)分對待。
  
那么針對于這樣的問題,或者是遇到類似的項目我們應該如何處理呢?
  
我提幾條建議:
  
1、將硬件系統(tǒng)區(qū)分為獨立單元單獨做成底層驅(qū)動函數(shù)和應用函數(shù),并且函數(shù)正常應該有參數(shù)和返回值,其中返回值是必要的。如何衡量這類函數(shù)呢?這類函數(shù)可移植性強,只要一個.h文件和一個.c文件就可以隨意放到任何工程中。例如:語音播放、M1讀卡、485處理等等。
  
2、將1中的所有函數(shù)進行時間評估,評估點有兩個。一個是函數(shù)的執(zhí)行時間t,第二個是函數(shù)的周期性發(fā)生的時間T,一個最基本的條件是t < T,理想情況應該是t << T。
  
3、建立一個集中邏輯處理函數(shù),在這個函數(shù)中對1中的各個函數(shù)進行調(diào)度。這個函數(shù)發(fā)揮的作用相當于嵌入式系統(tǒng)中的系統(tǒng)調(diào)度。這種調(diào)度是整個硬件邏輯中所有事件處理的調(diào)度,它的目的是完成一個處理過程,但是絕不依賴于任意事件的必要處理過程。這樣就將問題2中提到的事件間的邏輯關系弱化了,處理起來變得十分靈活,使得各個關系不在相互必要。
  
4、為了保證前面內(nèi)容的正常實施還需要針對各類事件的周期,建立一個必要的時間管理函數(shù),時間函數(shù)的基礎一般情況下由一個內(nèi)部定時器的中斷來完成,中斷的周期一般我們考慮5-10ms。按照實際需求將N個定時器中斷定義為一個事件處理的周期TT,這個周期應該保證處理完最惡劣情況可能發(fā)生的所有t,且保證TT < T。
  
5、 這其中也有例外,一些實時性要求高的事件應當用中斷完成。其中中斷處理函數(shù)的處理事件應盡量短,時間要求參見2。

END

作者:handong

版權歸原作者所有,如有侵權,請聯(lián)系刪除。

推薦閱讀

成功為華為“續(xù)命:中國芯片之父張汝京

一個工程師的“噩夢”:剛分清CPU和GPU,卻發(fā)現(xiàn)還有……

這位“華為天才少年”,竟然要我用“充電寶”打《只狼》

免責聲明:本文內(nèi)容由21ic獲得授權后發(fā)布,版權歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

嵌入式ARM

掃描二維碼,關注更多精彩內(nèi)容

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權益,請及時聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀

在高性能網(wǎng)絡編程領域,事件驅(qū)動模型以其高效的I/O多路復用能力成為主流范式。不同于傳統(tǒng)的多線程/多進程阻塞模型,事件驅(qū)動通過單一線程監(jiān)聽多個文件描述符的狀態(tài)變化,以非阻塞方式處理I/O事件,顯著減少了上下文切換開銷和資源...

關鍵字: 事件驅(qū)動 C語言

嵌入式系統(tǒng)開發(fā)中,內(nèi)存碎片化始終是困擾程序員的難題。以某工業(yè)控制器項目為例,系統(tǒng)需連續(xù)運行5年以上,期間頻繁分配/釋放不同大小的內(nèi)存塊(從16字節(jié)到4KB不等)。傳統(tǒng)malloc/free機制在運行3年后導致內(nèi)存利用率驟...

關鍵字: 自定義內(nèi)存池設 C語言

在C語言開發(fā)的HTTP服務器項目中,通信異常是常見的調(diào)試挑戰(zhàn)。Wireshark作為網(wǎng)絡協(xié)議分析領域的“瑞士軍刀”,通過捕獲和分析數(shù)據(jù)包,能夠精準定位HTTP通信中的異常環(huán)節(jié)。本文結合實際案例,闡述如何利用Wiresha...

關鍵字: Wireshark C語言

在物聯(lián)網(wǎng)設備數(shù)量突破200億的今天,數(shù)據(jù)傳輸安全已成為開發(fā)者無法回避的核心命題。某智慧農(nóng)業(yè)項目曾因未加密通信導致傳感器數(shù)據(jù)被篡改,造成300畝農(nóng)田灌溉系統(tǒng)癱瘓。而通過30分鐘集成OpenSSL庫,同樣的設備實現(xiàn)了TLS加...

關鍵字: OpenSSL C語言

當MobileNet在STM32H7上完成單張圖像推理需要1.2秒時,工程師們意識到:要讓AI真正落地嵌入式設備,必須突破浮點計算的桎梏。量化技術通過將32位浮點參數(shù)轉換為8位整數(shù),在ARM Cortex-M7處理器上實...

關鍵字: C語言 神經(jīng)網(wǎng)絡

在C語言的江湖中,內(nèi)存管理如同行走于刀尖之上——稍有不慎,便可能陷入內(nèi)存泄漏的深淵。紅黑樹作為高效的數(shù)據(jù)結構,其復雜的節(jié)點分配與釋放邏輯更易成為內(nèi)存泄漏的重災區(qū)。而Valgrind,這位內(nèi)存調(diào)試領域的“福爾摩斯”,憑借其...

關鍵字: Valgrind C語言

紅黑樹作為自平衡二叉搜索樹的代表,其設計靈感源于對2-3-4樹的二叉化改造。通過將多路節(jié)點轉換為二叉樹結構中的顏色標記,紅黑樹在保持O(log n)時間復雜度的同時,避免了復雜的節(jié)點分裂操作。本文將從2-3-4樹的平衡原...

關鍵字: 紅黑樹 C語言

當某智能攝像頭廠商將服務器架構從多線程切換為單線程事件驅(qū)動模型后,設備在2G網(wǎng)絡環(huán)境下的并發(fā)連接數(shù)從8個躍升至1200個,同時內(nèi)存占用銳減76%。這個戲劇性轉變揭示了一個被廣泛忽視的真相:在資源受限的嵌入式場景中,線程模...

關鍵字: 單線程 多線程 C語言

嵌入式開發(fā),HTTP服務器作為數(shù)據(jù)交互的核心組件,其功耗特性直接影響設備續(xù)航能力。傳統(tǒng)HTTP服務器依賴持續(xù)運行模式,導致能量浪費嚴重。本文提出一種基于C語言的超低功耗HTTP服務器架構,通過RTC(實時時鐘)喚醒機制實...

關鍵字: C語言 HTTP
關閉