色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

開發單片機程序時常犯的一個錯誤

GReq_mcu168 ? 來源:cg ? 2018-12-23 14:11 ? 次閱讀

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

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

背景是這樣的,去年9月份開始安排一個工程師開始做電動汽車交流充電樁機械設計部分由公司機械結構部門負責。充電樁的電子部分總體上分為X個部分(用到的資源),電阻觸摸屏(RS232),M1卡讀寫(RS232),電能計量表(RS485),語音提示(SPI),電力開關(繼電器IO),通訊接口(RS485、CAN)。工程師做的過程非常勤奮,期間也是困難重重,改了很多個版本,總算今年6月把充電樁立起來了。咱們來驗收一下吧,結果發現讀卡的時候不能處理觸摸屏,播放語音的時候不能處理讀卡,語音播放不能打斷或者跳躍,反正就是所有事件必須一個一個按部就班的來,一旦操作錯誤就需要多次執行、等待、甚至重新來過。一個工作3年多的工程師怎么會把產品做成這樣呢?看看程序吧!一看不要緊,嚇一跳!整個的程序是沒有邏輯的,一條線就往下寫……

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

這里說這個工程師基本上對于自己設計的產品沒有任何的整體概念,或者說對自己開發的程序用到設計上會有怎樣的實際效果根本就不清楚。他犯了幾個我們在程序開發過程中最忌諱的幾個問題:

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

2、 產品設計的各個子模塊之間的邏輯關系太強,例如:必須等待播音完畢才能讀卡進入下一步操作等。我們講,產品設計中只有各個事件處理模塊間的邏輯關系弱化,才能更加靈活的進行處理。例如:兩個事件A和B,如果程序開發時將A做成B事件的必要條件,B事件的觸發就必須等待A事件的發生。反之如果A事件作為B事件處理的一個特殊情況,那么程序開發起來就變得靈活很多。

3、 沒有考慮到單片機本身是一個單核單任務的架構,每一個事件都會獨占CPU內核,當多個任務模塊同時存在時我們應該對各個事件進行區分,我們應當分情況、分事件實時性要求等區分對待。那么針對于這樣的問題,或者是遇到類似的項目我們應該如何處理呢?我提幾條建議:

1、將硬件系統區分為獨立單元單獨做成底層驅動函數和應用函數,并且函數正常應該有參數和返回值,其中返回值是必要的。如何衡量這類函數呢?這類函數可移植性強,只要一個.h文件和一個.c文件就可以隨意放到任何工程中。例如:語音播放、M1讀卡、485處理等等。

2、將1中的所有函數進行時間評估,評估點有兩個。一個是函數的執行時間t,第二個是函數的周期性發生的時間T,一個最基本的條件是t < T,理想情況應該是t << T。

3、建立一個集中邏輯處理函數,在這個函數中對1中的各個函數進行調度。這個函數發揮的作用相當于嵌入式系統中的系統調度。這種調度是整個硬件邏輯中所有事件處理的調度,它的目的是完成一個處理過程,但是絕不依賴于任意事件的必要處理過程。這樣就將問題2中提到的事件間的邏輯關系弱化了,處理起來變得十分靈活,使得各個關系不在相互必要。

4、為了保證前面內容的正常實施還需要針對各類事件的周期,建立一個必要的時間管理函數,時間函數的基礎一般情況下由一個內部定時器的中斷來完成,中斷的周期一般我們考慮5-10ms。按照實際需求將N個定時器中斷定義為一個事件處理的周期TT,這個周期應該保證處理完最惡劣情況可能發生的所有t,且保證TT < T。

5、 這其中也有例外,一些實時性要求高的事件應當用中斷完成。其中中斷處理函數的處理事件應盡量短,時間要求參見2。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6039

    文章

    44575

    瀏覽量

    636387
  • 程序
    +關注

    關注

    117

    文章

    3791

    瀏覽量

    81156

原文標題:單片機程序開發時,初級工程師常犯的一個錯誤

文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    關于C語言編程時常犯錯誤匯總

    17C語言新手編程時常犯錯誤及解決方式
    的頭像 發表于 06-26 09:19 ?6150次閱讀
    關于C語言編程<b class='flag-5'>時常犯</b>的<b class='flag-5'>錯誤</b>匯總

    18C語言新手編程時常犯錯誤及解決方式

    ,經常會出些連自己都不知道錯在哪里的錯誤。看著有錯的程序,不知該如何改起,本人通過對C的學習,積累了些C編程時常犯
    發表于 01-03 15:35 ?1049次閱讀

    單片機程序開發時,常犯錯誤

    果A事件作為B事件處理的特殊情況,那么程序開發起來就變得靈活很多。3、 沒有考慮到單片機本身是
    發表于 05-05 11:53

    請問怎樣使用eclipse去開發單片機程序

    怎樣使用eclipse去開發單片機程序?在使用Eclipse新建工程時,記錄碰到的問題都是怎么解決的?
    發表于 07-01 06:01

    開發單片機過程中有哪些步驟

    就兩步驟,程序代碼的編寫與程序的燒錄(將單片機程序寫入開發板的ROM中),分別在以下兩款軟件中
    發表于 07-13 09:18

    開發單片機程序時碰到編譯錯誤

    我們在開發單片機程序的時候,經常會碰到編譯沒有錯誤程序代碼反復的檢查,但就是找不到問題所在,不知道問題到底出現在哪里了?這個時候的心情就會特別煩躁,
    發表于 11-18 07:30

    擺脫仿真器的AVR單片機程序開發設計

    開發單片機程序時,有許多人依賴于仿真旦離開了仿真開發
    發表于 02-11 08:46 ?1033次閱讀

    C語言編程時常犯的18種錯誤

    C語言的最大特點是:功能強、使用方便靈活。C編譯的程序對語法檢查并不象其它高級語言那么嚴格,這就給編程人員留下“靈活的余地”,但還是由于這個靈活給程序的調試帶來了許多不便,尤其對初學C語言的人來說,經常會出些連自己都不知道錯在
    的頭像 發表于 02-27 14:51 ?6309次閱讀

    17C語言新手編程時常犯錯誤及解決方式

    。看著有錯的程序,不知該如何改起,通過對C的學習,積累了些C編程時常犯錯誤,以供參考。 1、書寫標識符時,忽略了大小寫字母的區別。 main() { int a=5; printf
    發表于 09-06 12:57 ?474次閱讀

    快速的開發單片機的技巧分享

    作為單片機開發的老司機,在這里告訴大家如何快速的開發單片機,完成自己的項目。
    的頭像 發表于 02-07 07:30 ?2789次閱讀

    開發單片機的集成開發環境工具(IDE)有哪些?

    IDE:Integrated Development Environment,集成開發環境。 IDE指用于軟件開發的工具,通常包含編輯器、編譯器、調試器、圖形用戶界面等集成多種工具的應用程序
    的頭像 發表于 06-29 11:22 ?1.7w次閱讀

    開發單片機常見的IDE有哪些?

    開發單片機常見的IDE有哪些?(點擊鏈接閱讀原文)
    發表于 11-13 12:36 ?12次下載
    <b class='flag-5'>開發單片機</b>常見的IDE有哪些?

    如何使用eclipse開發單片機程序

    如何使用eclipse開發單片機程序
    發表于 11-13 12:51 ?6次下載
    如何使用eclipse<b class='flag-5'>開發單片機</b><b class='flag-5'>程序</b>

    在Visual Studio Code上開發單片機程序(基于IAR msp430)

    在Visual Studio Code上開發單片機程序(基于IAR msp430)
    發表于 11-15 15:51 ?55次下載
    在Visual Studio Code上<b class='flag-5'>開發單片機</b><b class='flag-5'>程序</b>(基于IAR msp430)

    選擇示波器探頭時常犯錯誤(下)

    前面我們講了關于選擇示波器探頭的常犯3點錯誤,那么除了前面講的那些問題點外,我們還需要注意選擇示波器探頭時常犯錯誤呢?下面西安普科科技小編和大家講講:
    的頭像 發表于 11-11 14:47 ?1999次閱讀
    選擇示波器探頭<b class='flag-5'>時常犯</b>的<b class='flag-5'>錯誤</b>(下)
    主站蜘蛛池模板: 日韩吃奶摸下AA片免费观看| 18美女腿打开无遮软件| 哺乳期妇女挤奶水36d| 让人爽到湿的小黄书| 国产69精品久久久久妇女| 無码一区中文字幕少妇熟女H| 国产欧洲野花A级| 真实处破女全过程完免费观看| 欧美日韩一区二区三区四区| 国产GV无码A片在线观看| 亚洲精品午睡沙发系列| 男女牲交大战免费播放| 国产精品成人无码免费视频| 岳扒开让我添| 神马电影院午 夜理论| 久久精品一区二区三区资源网| 边摸边吃奶边做下面视频| 亚洲精品高清在线观看| 欧美精品一区二区蜜臀亚洲| 国产亚洲精品线观看不卡| AV无码久久无遮挡国产麻豆| 亚洲高清在线mv| 欧式午夜理伦三级在线观看| 国产亚洲美女在线视频视频| 99视频精品在线| 亚洲成人精品| 全黄H全肉细节文短篇| 精品国产精品人妻久久无码五月天 | 久久黄色免费| 中文无码不卡的岛国片国产片| 欧美123区| 解开美女胸衣2破解版| 成人中文字幕在线观看| 在线看免费毛片| 玩两个少妇女邻居| 欧美日韩中文在线字幕视频| 九九黄色大片| 国产免费人视频在线观看免费| qvod在线观看| 2017最新伦理伦理片67| 亚洲免费精品|