国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

3天內不再提示

如何寫出穩定的單片機代碼

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

掃碼添加小助手

加入工程師交流群

這篇文章分享怎么寫出穩定的單片機代碼。

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

對于單片機產品來說,高效可能不是剛需。

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

所以在高效和穩定之間,我建議先提升怎么把程序寫穩定,再進一步優化程序效率。

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

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

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

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

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

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

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

后面把代碼組織在一起的時候,又發現整個邏輯異常混亂和沖突。

舉個簡單的例子,一個LED燈指示設備聯網狀態,未接連上時,每200ms閃一次,連接上wifi時,每400ms閃一次,連接上路由器時,每600ms閃一次,連接上服務器時,常亮。

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

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

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

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

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

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

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

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

代碼穩定性,主要體現在一些復雜的項目上,一些簡單的項目,沒多少功能,硬調也能調出來。

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

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

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

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

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

寫一個系統,和移植一個系統用,完全不是一個難度級別。

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

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

這是一個簡單的輪詢式任務調度系統,通過一個定時器中斷來觸發任務調度。相對RTOS來說,有以下優勢:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

3.應用層就是具體的產品邏輯功能實現代碼,比如菜單系統,防盜報警模式邏輯等等。

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

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

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

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

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

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

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

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

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

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

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

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

    關注

    6076

    文章

    45494

    瀏覽量

    670262
  • 代碼
    +關注

    關注

    30

    文章

    4967

    瀏覽量

    73956

原文標題:如何編寫穩定的單片機代碼?

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

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    單片機C語言的誤區介紹

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

    51單片機RS485編程實例資料

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

    單片機原理及應用詳解

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

    單片機用什么封裝

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

    什么單片機比較耐用

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

    單片機的儲存優點是什么

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

    單片機采用什么電流輸出

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

    怎么測單片機系統頻率

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

    單片機怎么驅動電機?

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

    單片機怎么燒程序

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

    單片機直流電機調速原理

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

    給予單片機的溫度控制系統設計

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

    單片機科普總結,建議收藏!

    單片機(MicrocontrollerUnit,MCU)作為嵌入式系統的核心之一,在現代電子產品中無處不在。從智能家居、汽車電子,到工業控制、醫療設備,單片機支撐著無數智能化應用的發展。對于初學者
    的頭像 發表于 04-07 11:58 ?5622次閱讀
    <b class='flag-5'>單片機</b>科普總結,建議收藏!

    晶振受到電磁干擾對單片機的影響

    單片機可以正常運行的一個因素就是晶振的穩定性。在工作過程中,晶振可能會受到電磁干擾的影響,導致單片機發生故障,甚至出現死機的情況。
    的頭像 發表于 03-20 18:01 ?1171次閱讀

    基于瑞薩RA8單片機的智能小車項目方案 附源代碼

    基于瑞薩RA8單片機,e2studio開發環境,給大家講述一下智能小車項目的方案,并附上主要的源代碼
    的頭像 發表于 03-07 14:36 ?2564次閱讀
    基于瑞薩RA8<b class='flag-5'>單片機</b>的智能小車項目方案 附源<b class='flag-5'>代碼</b>