在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

單片機(jī)的程序開發(fā)經(jīng)常會(huì)出現(xiàn)那些錯(cuò)誤

Wildesbeast ? 來源:網(wǎng)絡(luò)整理 ? 作者:佚名 ? 2021-01-09 10:41 ? 次閱讀

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

這篇文章我不是想說編程的規(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年多的工程師怎么會(huì)把產(chǎn)品做成這樣呢?看看程序吧!

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

While(1){//上電進(jìn)入主程序 或 觸發(fā)觸摸屏//播放提示語音Delay();//等待播放完畢//讀取M1卡信息Delay();//等待讀卡數(shù)據(jù)返回//播放提示語音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í)無論是主循環(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文件就可以隨意放到任何工程中。例如:語音播放、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。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6065

    文章

    44946

    瀏覽量

    648204
  • RS485
    +關(guān)注

    關(guān)注

    39

    文章

    1226

    瀏覽量

    83774
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7630

    瀏覽量

    140739
收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    單片機(jī)程序總跑飛?小技巧幫你忙

    經(jīng)常接觸單片機(jī)的朋友,肯定遇到過單片機(jī)程序跑飛的問題。由于程序較為復(fù)雜,所以一旦出現(xiàn)跑飛的現(xiàn)象就
    發(fā)表于 04-02 09:58 ?8740次閱讀

    單片機(jī)BootLoader的通用實(shí)現(xiàn)方式

    單片機(jī)BootLoader的通用實(shí)現(xiàn)方式(備份升級(jí),永不掛機(jī))背景介紹實(shí)現(xiàn)方式背景介紹當(dāng)我們?cè)谶M(jìn)行Linux下進(jìn)行C語言程序開發(fā)時(shí),由于C語言指針和內(nèi)存的靈活性,經(jīng)常會(huì)出現(xiàn)
    發(fā)表于 07-21 06:55

    開發(fā)單片機(jī)程序時(shí)碰到編譯錯(cuò)誤

    我們?cè)?b class='flag-5'>開發(fā)單片機(jī)程序的時(shí)候,經(jīng)常會(huì)碰到編譯沒有錯(cuò)誤程序代碼反復(fù)的檢查,但就是找不到問題所在,不知道問題到底
    發(fā)表于 11-18 07:30

    程序開發(fā)經(jīng)常容易出現(xiàn)的問題匯總

    在剛開始接觸單片機(jī)學(xué)習(xí)的時(shí)候,尤其是C語言基礎(chǔ)比較薄弱的老鐵們,經(jīng)常會(huì)碰到很多比較低級(jí)的錯(cuò)誤程序編譯錯(cuò)誤一大堆,但不知道如何解決!一、
    發(fā)表于 11-22 06:19

    使用GD芯片的AD采樣經(jīng)常會(huì)出現(xiàn)AD值為0是為什么?

    使用GD芯片的AD采樣經(jīng)常會(huì)出現(xiàn)AD值為0是為什么?
    發(fā)表于 02-16 07:50

    單片機(jī)的外部中斷使用經(jīng)常會(huì)出現(xiàn)那些問題應(yīng)該如何解決

    通過分析51單片機(jī)外中斷I/O入口的內(nèi)部結(jié)構(gòu),解釋了外中斷不能被正常響應(yīng)的原因,并提出了解決該問題的方法。
    發(fā)表于 09-09 17:26 ?1次下載
    <b class='flag-5'>單片機(jī)</b>的外部中斷使用<b class='flag-5'>經(jīng)常會(huì)出現(xiàn)</b><b class='flag-5'>那些</b>問題應(yīng)該如何解決

    51單片機(jī)經(jīng)常會(huì)出現(xiàn)的4點(diǎn)錯(cuò)誤解決方法詳細(xì)說明

    本文檔的主要內(nèi)容詳細(xì)介紹的是51單片機(jī)經(jīng)常會(huì)出現(xiàn)的4點(diǎn)錯(cuò)誤解決方法詳細(xì)說明。
    發(fā)表于 09-06 17:26 ?1次下載
    51<b class='flag-5'>單片機(jī)</b><b class='flag-5'>經(jīng)常會(huì)出現(xiàn)</b>的4點(diǎn)<b class='flag-5'>錯(cuò)誤</b>解決方法詳細(xì)說明

    JLINK_V8固件燒寫經(jīng)常會(huì)碰到那些常見的錯(cuò)誤

    本文檔的主要內(nèi)容詳細(xì)介紹的是JLINK_V8固件燒寫經(jīng)常會(huì)碰到那些常見的錯(cuò)誤
    發(fā)表于 08-16 17:32 ?4次下載
    JLINK_V8固件燒寫<b class='flag-5'>經(jīng)常會(huì)</b>碰到<b class='flag-5'>那些</b>常見的<b class='flag-5'>錯(cuò)誤</b>

    內(nèi)存經(jīng)常會(huì)出現(xiàn)那些故障?應(yīng)該如何解決

    內(nèi)存對(duì)于電腦的重要性不言而喻,缺少內(nèi)存,電腦將無法正常運(yùn)轉(zhuǎn)。如果內(nèi)存發(fā)生故障,筆記本將同樣產(chǎn)生一些令人疑惑的錯(cuò)誤。本文中,小編將對(duì)內(nèi)存可能出現(xiàn)的故障以及相應(yīng)的解決措施予以介紹。如果你對(duì)內(nèi)存具有興趣,抑或您的電腦內(nèi)存出現(xiàn)故障,不妨
    發(fā)表于 10-17 11:56 ?3993次閱讀

    2246EN開卡工具和經(jīng)常會(huì)出現(xiàn)的問題分析

    本文檔的主要內(nèi)容詳細(xì)介紹的是2246EN開卡工具應(yīng)用程序經(jīng)常會(huì)出現(xiàn)的問題分析。
    發(fā)表于 11-23 08:00 ?15次下載
    2246EN開卡工具和<b class='flag-5'>經(jīng)常會(huì)出現(xiàn)</b>的問題分析

    Python新手經(jīng)常會(huì)那些錯(cuò)誤

    當(dāng)初學(xué)Python 時(shí),想要弄懂Python 的錯(cuò)誤信息的含義可能有點(diǎn)復(fù)雜。這里列出了常見的的一些讓你程序crash 的運(yùn)行時(shí)錯(cuò)誤
    發(fā)表于 03-12 16:20 ?16次下載
    Python新手<b class='flag-5'>經(jīng)常會(huì)</b>犯<b class='flag-5'>那些</b><b class='flag-5'>錯(cuò)誤</b>

    51單片機(jī)和52單片機(jī)區(qū)別是什么?51仿真器有必要買嗎?

    我們?cè)?b class='flag-5'>開發(fā)單片機(jī)程序的時(shí)候,經(jīng)常會(huì)碰到編譯沒有錯(cuò)誤程序代碼反復(fù)的檢查,但就是找不到問題所在,不知道問題到底
    發(fā)表于 11-12 10:36 ?10次下載
    51<b class='flag-5'>單片機(jī)</b>和52<b class='flag-5'>單片機(jī)</b>區(qū)別是什么?51仿真器有必要買嗎?

    單片機(jī)初學(xué)者編程經(jīng)常會(huì)碰到的問題及處理辦法

    在剛開始接觸單片機(jī)學(xué)習(xí)的時(shí)候,尤其是C語言基礎(chǔ)比較薄弱的老鐵們,經(jīng)常會(huì)碰到很多比較低級(jí)的錯(cuò)誤程序編譯錯(cuò)誤一大堆,但不知道如何解決!一、
    發(fā)表于 11-13 14:51 ?9次下載
    <b class='flag-5'>單片機(jī)</b>初學(xué)者編程<b class='flag-5'>經(jīng)常會(huì)</b>碰到的問題及處理辦法

    單片機(jī)BootLoader的通用實(shí)現(xiàn)方式(備份升級(jí),永不掛機(jī))

    單片機(jī)BootLoader的通用實(shí)現(xiàn)方式(備份升級(jí),永不掛機(jī))背景介紹實(shí)現(xiàn)方式背景介紹當(dāng)我們?cè)谶M(jìn)行Linux下進(jìn)行C語言程序開發(fā)時(shí),由于C語言指針和內(nèi)存的靈活性,經(jīng)常會(huì)出現(xiàn)
    發(fā)表于 11-26 15:21 ?32次下載
    <b class='flag-5'>單片機(jī)</b>BootLoader的通用實(shí)現(xiàn)方式(備份升級(jí),永不掛機(jī))

    使用GD芯片的AD采樣,經(jīng)常會(huì)出現(xiàn)AD值為0

    在嵌入式開發(fā)的路上經(jīng)常會(huì)遇到一些奇怪的問題。記錄下慢慢積累。有一次在做一個(gè)電機(jī)堵轉(zhuǎn)保護(hù)的功能,是用AD采樣來實(shí)時(shí)采集 電機(jī)驅(qū)動(dòng)芯片的電流,超過5A時(shí)將電機(jī)強(qiáng)行關(guān)閉并限制相應(yīng)功能,采樣電阻為0.05歐
    發(fā)表于 12-20 19:02 ?12次下載
    使用GD芯片的AD采樣,<b class='flag-5'>經(jīng)常會(huì)出現(xiàn)</b>AD值為0
    主站蜘蛛池模板: 色视频免费看 | 小泽玛利亚厕所大喷水 | 免费公开视频人人人人人人人 | 天堂影院在线 | 午夜欧美福利视频 | 在线观看h视频 | 亚洲婷婷国产精品电影人久久 | 亚洲一区二区在线播放 | 影院午夜| 日本免费在线视频 | 国产免费久久精品 | 免费看成年视频网页 | 欧美系列在线播放 | 四虎影视免费 | 中国日韩欧美中文日韩欧美色 | 在线天堂中文官网 | 在线小毛片 | 成年视频xxxxx免费播放软件 | 欧美综合国产精品日韩一 | 天天噜天天干 | 男女交性特一级 | 网站啪啪 | 成年1314在线观看 | 五月综合久久 | 夜夜爽毛片 | 激情五月激情综合网 | 久久www免费人成高清 | 久久99精品久久久久久秒播 | 人人操在线播放 | 午夜激情福利视频 | 加勒比黑人喝羽月希奶水 | 成年1314在线观看 | 男人的天堂色偷偷之色偷偷 | 性天堂网 | 午夜黄色剧场 | 欧美性黑人十极品hd | 欧美另类videos | 奇米激情 | 天天视频色 | 中文字幕亚洲一区二区v@在线 | 一二三区视频 |