日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

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

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

如何寫出穩(wěn)定的單片機代碼

無際單片機編程 ? 來源:無際單片機編程 ? 2024-11-15 16:40 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

這篇文章分享怎么寫出穩(wěn)定的單片機代碼。

我對優(yōu)秀代碼的理解,大體分為兩個部分:高效和穩(wěn)定。 兩者都能做到很好的,如果靠自己摸索,沒有刻意去練習,可能需要花10年,甚至更久。

對于單片機產(chǎn)品來說,高效可能不是剛需。

高效寫法和低效寫法,在很多功能上看不出區(qū)別,代碼執(zhí)行效率快個納秒、微秒、甚至是毫秒的時間差,對功能本身并無影響。

所以在高效和穩(wěn)定之間,我建議先提升怎么把程序寫穩(wěn)定,再進一步優(yōu)化程序效率。

如果當下覺得自己寫的代碼比較爛,也沒關系,先多寫,再多學習高手寫的代碼,你就能看出其中的精華。

經(jīng)驗不足的時候,哪怕別人直接給你答案,你也不知道他為什么要這樣做。

我很多代碼思維和技巧,都是學習同事的代碼,我看到他們的代碼時,和無際項目特訓營老鐵看我們代碼的感覺是一樣的,先是一臉懵逼,有些工作后,接觸項目多了,才領悟其中的精髓。

剛開始我也不能理解他們的代碼,感覺寫的很復雜,搞不懂明明可以寫的很簡單,為什么要繞一個彎。

不過我把他們的代碼保存起來了。

后面跳槽又做了幾年,有次,領導安排了一個復雜點的新項目,需要自己獨立從頭到尾去做。

很多功能沒做過,不知道怎么下手,摸著石頭過河,用最笨的辦法,先把功能實現(xiàn)。

后面把代碼組織在一起的時候,又發(fā)現(xiàn)整個邏輯異?;靵y和沖突。

舉個簡單的例子,一個LED燈指示設備聯(lián)網(wǎng)狀態(tài),未接連上時,每200ms閃一次,連接上wifi時,每400ms閃一次,連接上路由器時,每600ms閃一次,連接上服務器時,常亮。

固定的閃爍效果,簡單,但要考慮到通用性和擴展性,就難很多了。

為什么我要專門給點燈,寫一個程序架構?

是因為LED需求太多了,LED大多數(shù)產(chǎn)品都有,而且每個產(chǎn)品LED數(shù)量,需要的閃爍效果都不同,每次重復去寫,費時費力。

所以我把LED閃爍,設計成獨立的功能模塊,并考慮到了擴展性和移植性。

需要修改LED數(shù)量,直接修改枚舉量就好了,需要增加LED閃爍效果,直接添加一個波形數(shù)組就好了,后續(xù)算法會根據(jù)數(shù)組的值,自動輸出相應的波形。

架構定好,下次類似產(chǎn)品功能的需求,我改一下,只需要幾分鐘。

所以,程序寫的咋樣,不是看代碼寫得多漂亮,或者用了什么高級語法,而是看是否精準解決需求。

除此以外,所有花里胡哨的技巧,都是脫褲子放屁。

代碼穩(wěn)定性,主要體現(xiàn)在一些復雜的項目上,一些簡單的項目,沒多少功能,硬調(diào)也能調(diào)出來。

所以,我覺得,想把代碼寫穩(wěn)定,最主要的就是程序架構的設計。

如果架構設計不好,會導致代碼難以維護、容易出錯、功能擴展困難、穩(wěn)定性差、調(diào)試困難、硬件兼容性差等問題。

好的程序架構,我覺得核心是要把控兩點:

一、程序"地基"也就是整個項目,所有功能的"管理者"。比如RTOS,就是充當這樣的角色。

很多復雜的單片機項目,都會上RTOS,就是保證地基是穩(wěn)定,降低對工程師的技能要求。

寫一個系統(tǒng),和移植一個系統(tǒng)用,完全不是一個難度級別。

不過,我還是比較喜歡用"裸機"寫程序,然后采用自己設計的輕量任務調(diào)度系統(tǒng)。

08e4ed92-907a-11ef-a511-92fbcf53809c.png

這是一個簡單的輪詢式任務調(diào)度系統(tǒng),通過一個定時器中斷來觸發(fā)任務調(diào)度。相對RTOS來說,有以下優(yōu)勢:

①簡單,資源占用少不需要復雜的任務管理數(shù)據(jù)結構和調(diào)度算法,因此占用的內(nèi)存和CPU資源較少,特別適合資源受限的單片機,之前這個架構多次用于51單片機的項目。

②能完全掌控代碼都是自己寫的,相對移植RTOS來說,更能掌控,減少由于對系統(tǒng)不熟,給產(chǎn)品埋雷的風險。任務也是按順序執(zhí)行的,沒有復雜的任務切換,調(diào)試時更容易跟蹤和分析問題。 ③任務分離通過任務創(chuàng)建函數(shù)OS_CreatTask,將不同的功能分配給不同的任務。這種分離確保了每個任務只關注一件事情,提高了代碼的可讀性和可維護性。

④靈活性創(chuàng)建任務時,可以為每個任務分配不同執(zhí)行頻率,從而調(diào)整任務執(zhí)行順序,可以很靈活地控制任務執(zhí)行,也非常適合周期性的任務。

⑤減少CPU占用,響應更快雖然在這個架構中沒有明確的任務優(yōu)先級,但可以通過調(diào)整任務的執(zhí)行頻率或順序,來間接實現(xiàn)優(yōu)先級控制。

傳統(tǒng)while(1)死循環(huán)的用法,CPU一直在忙碌地執(zhí)行某個代碼塊,而輪詢式架構可以讓CPU在沒有任務執(zhí)行時,處于空閑狀態(tài),一旦任務準備好執(zhí)行,它可以立即開始運行,減少響應時間。 不過有一點,需要人為控制每個任務的代碼效率,盡量不要有延時高的代碼。 ⑤擴展性強雖然架構簡單,但通過增加任務和調(diào)整調(diào)度邏輯,系統(tǒng)仍然可以擴展以支持更多的功能,比如增加現(xiàn)場切換功能和任務優(yōu)先級管理,即是最精簡的RTOS系統(tǒng)。 這種輪詢式任務調(diào)度系統(tǒng),雖然不支持真正的并發(fā)執(zhí)行,但以更簡單,高效的方式來管理多個任務,對于大多數(shù)的單片機項目來說,其實也夠了。至少我還沒碰到過,非要上RTOS才能完成的產(chǎn)品。

這個架構也有配套的開源視頻,是我2018年錄著玩的,不過代碼已申請版權,非學員不能直接用于自己項目,可以學習這種編程思維,要的找我安排。

0908968e-907a-11ef-a511-92fbcf53809c.png

二、功能模塊化如果是項目功能比較多,一定要采用模塊化的方式,以便于后期的代碼維護和移植。 拿我們無際特訓營項目6的代碼舉例,創(chuàng)建了3個任務,分別管理硬件層、中間層、應用層的功能。

092258bc-907a-11ef-a511-92fbcf53809c.png

1.硬件層主要是單片機外設,以及一些外圍芯片的驅動程序,比如定時器、LED、語音輸出、按鍵、串口、ADC、EEPROM。

0944ae76-907a-11ef-a511-92fbcf53809c.png

然后不同的硬件驅動程序也是相互獨立的。

0967c7da-907a-11ef-a511-92fbcf53809c.png

2.中間層主要是一些協(xié)議的解析,比如mqtt、lora4G等,還有就是一些硬件層的應用程序,比如屏顯示圖案,電池電量檢測邏輯,外電檢測邏輯等。

097537c6-907a-11ef-a511-92fbcf53809c.png

不同的功能程序也是相互獨立的。

0999d27a-907a-11ef-a511-92fbcf53809c.png

3.應用層就是具體的產(chǎn)品邏輯功能實現(xiàn)代碼,比如菜單系統(tǒng),防盜報警模式邏輯等等。

09a701f2-907a-11ef-a511-92fbcf53809c.png

我們在做功能的時候,也要有架構的思維,需要考慮到后續(xù)功能的擴展和移植。

比如我們做菜單的時候,會考慮到后期如果項目需要增加或刪減界面,怎么設計比較方便靈活。

我們目前的做法是通過結構體數(shù)組來管理每個界面,然后通過雙向鏈表讓各界面建立聯(lián)系。

09c88174-907a-11ef-a511-92fbcf53809c.png

類似的還有很多,比如說LED,按鍵這種,基本也是每個產(chǎn)品的剛需。

三、怎么去鍛煉架構思維和能力?一般的工程師,會在工作了3,4年左右,才能意識到程序架構的必要性,也取決于你什么時候能有機會獨立完成復雜的項目,這個時候你會發(fā)現(xiàn),原來的知識體系不夠用。

心態(tài)上不用太著急和焦慮,按照正確的方向努力,很快就能具備架構設計能力。

一般流程是這樣的。1.先實現(xiàn)功能先不要考慮架構,先把功能實現(xiàn)出來,再從功能里面找規(guī)律。

比如一個按鍵檢測代碼,和10個按鍵,其實也就是加個for循環(huán),代碼就能復用。

比如LED燈的特效,其本質就是輸出的高低電平波形持續(xù)的時間不一樣,我們是否能用一個數(shù)組來存儲波形數(shù)據(jù),通過定時器配合小算法來輸出波形呢? 這些代碼,都是要一步步迭代的,可能修改10次,就比較完美了,不要要求一寫就接近完美,容易自閉。 還有就是多接觸優(yōu)秀的工程師和項目,沒條件的可以看看STM32固件庫代碼,看看藍牙協(xié)議棧,看看RTOS,這些都是開源的產(chǎn)品級代碼。

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

    關注

    6078

    文章

    45590

    瀏覽量

    673939
  • 代碼
    +關注

    關注

    30

    文章

    4977

    瀏覽量

    74416

原文標題:如何編寫穩(wěn)定的單片機代碼?

文章出處:【微信號:nanshuqg,微信公眾號:無際單片機編程】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    項目選型必看:單片機與PLC究竟該怎么選?

    單片機更便宜、更靈活,但在工業(yè)現(xiàn)場,PLC的可靠性、穩(wěn)定性、易用性和高維護性是單片機難以替代的。 PLC = 單片機 + 工業(yè)電源 + IO隔離 + 工業(yè)外殼 + 實時操作系統(tǒng) + 通
    的頭像 發(fā)表于 03-27 15:47 ?256次閱讀
    項目選型必看:<b class='flag-5'>單片機</b>與PLC究竟該怎么選?

    紐扣電池給單片機供電問題

    差異性,導致單片機的供電可能是3.1V,也可能是2.9V,這樣的差異會影響到單片機的基準電壓導致adc采樣值不穩(wěn)定。對于這種情況,我該如何處理,使得使用不同紐扣電池時,adc采樣值盡可能穩(wěn)定
    發(fā)表于 03-14 14:57

    單片機C語言的誤區(qū)介紹

    經(jīng)常見網(wǎng)友們說,代碼不能寫太多了包括注釋,單片機的ROM只有幾個K的空間,其實這是表面問題的誤解。 1、注釋是寫不進去hex文件的,下載到芯片里的只有你的有效代碼匯編以后生成的機器碼,注釋自動編譯器
    發(fā)表于 12-22 12:45

    51單片機RS485編程實例資料

    詳細介紹51單片機RS485通信接線和編程代碼
    發(fā)表于 10-20 14:57 ?6次下載

    單片機原理及應用詳解

    單片機(Microcontroller Unit, MCC) ?是一種集成計算機核心功能(CPU、存儲器、I/O接口等)的微型芯片,廣泛應用于嵌入式系統(tǒng)中。以下是其原理及應用的詳細介紹: 一、單片機
    的頭像 發(fā)表于 08-11 13:57 ?2833次閱讀

    單片機用什么封裝

    單片機封裝是將芯片內(nèi)部電路與外部引腳連接并包裹保護的結構,不僅影響單片機的安裝方式、適用場景,還與電路設計的緊湊性、散熱性能密切相關。不同封裝類型各有特點,適配從簡單電路到復雜系統(tǒng)的多樣化需求
    的頭像 發(fā)表于 08-01 13:47 ?1624次閱讀

    什么單片機比較耐用

    ? ? ? ? 在工業(yè)控制、戶外設備、醫(yī)療儀器等場景中,單片機的耐用性直接決定了設備的穩(wěn)定運行與維護成本。耐用的單片機通常具備寬溫工作范圍、強抗干擾能力、穩(wěn)定的電源適應性和長壽命的硬件
    的頭像 發(fā)表于 07-31 13:48 ?925次閱讀

    單片機的儲存優(yōu)點是什么

    場景。深圳市安凱星科技有限公司在單片機應用開發(fā)中,充分利用這些儲存優(yōu)點,為拓邦、朗科、安徽龍多等客戶打造了高效穩(wěn)定的解決方案。 1.集成度高,節(jié)省硬件空間 單片機將程序存儲器(ROM)、數(shù)據(jù)存儲器(RAM)與 CPU、I/O 接
    的頭像 發(fā)表于 07-31 10:09 ?835次閱讀

    單片機采用什么電流輸出

    單片機的電流輸出特性與其內(nèi)部電路設計和應用場景密切相關,既包含自身工作時的微弱電流,也涉及通過外部電路擴展后的驅動電流。了解單片機的電流輸出特點,是實現(xiàn)穩(wěn)定控制外部設備的基礎。 單片機
    的頭像 發(fā)表于 07-30 11:13 ?1322次閱讀

    怎么測單片機系統(tǒng)頻率

    單片機系統(tǒng)頻率是指單片機工作時的時鐘頻率,它直接影響單片機的運行速度和處理能力,準確測量系統(tǒng)頻率對單片機應用開發(fā)、程序調(diào)試和性能優(yōu)化具有重要意義。測量
    的頭像 發(fā)表于 07-25 11:39 ?1100次閱讀

    單片機怎么驅動電機?

    在各類自動化設備和智能裝置中,電機是重要的執(zhí)行部件,而單片機作為控制核心,需要通過特定的方式驅動電機運轉。單片機驅動電機并非直接連接即可,而是要根據(jù)電機類型和功率,搭配合適的驅動電路,才能實現(xiàn)穩(wěn)定
    的頭像 發(fā)表于 07-25 09:31 ?1348次閱讀

    單片機怎么燒程序

    單片機燒程序是將編寫好的程序代碼寫入單片機內(nèi)部存儲單元,讓單片機按照預設邏輯工作的過程,是單片機應用開發(fā)中不可或缺的環(huán)節(jié)。無論是簡單的燈光控
    的頭像 發(fā)表于 07-23 11:47 ?2062次閱讀

    單片機直流電機調(diào)速原理

    在工業(yè)自動化、智能設備等領域,直流電機的調(diào)速控制至關重要,而單片機憑借其靈活的控制能力,成為實現(xiàn)直流電機精準調(diào)速的核心部件。單片機直流電機調(diào)速技術通過程序控制,能讓電機在不同工況下保持穩(wěn)定的轉速
    的頭像 發(fā)表于 07-17 13:42 ?932次閱讀

    給予單片機的溫度控制系統(tǒng)設計

    在工業(yè)生產(chǎn)、智能家居等領域,溫度的穩(wěn)定控制至關重要,基于單片機的溫度控制系統(tǒng)憑借靈活、高效的特點被廣泛應用,其設計原理與實現(xiàn)方式值得深入探討。 基于單片機的溫度控制系統(tǒng)主要由單片機、溫
    的頭像 發(fā)表于 07-16 10:57 ?842次閱讀

    KF32A136系列單片機產(chǎn)品介紹

    F32A136 系列單片機是基于 KF32 內(nèi)核架構開發(fā)的單片機
    的頭像 發(fā)表于 06-27 11:42 ?2836次閱讀
    KF32A136系列<b class='flag-5'>單片機</b>產(chǎn)品介紹
    呼图壁县| 连云港市| 五大连池市| 阳谷县| 武乡县| 靖边县| 普宁市| 镇江市| 永善县| 余干县| 曲沃县| 株洲县| 星座| 罗田县| 永善县| 德保县| 密云县| 榆社县| 井冈山市| 武陟县| 郸城县| 金湖县| 安新县| 卓尼县| 万山特区| 库车县| 大庆市| 邵东县| 庐江县| 石楼县| 龙口市| 东乌| 滨州市| 武强县| 拉萨市| 廉江市| 阜宁县| 平邑县| 崇州市| 名山县| 祁连县|