chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

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

無(wú)際單片機(jī)編程 ? 來(lái)源:無(wú)際單片機(jī)編程 ? 2024-11-15 16:40 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

對(duì)于單片機(jī)產(chǎn)品來(lái)說(shuō),高效可能不是剛需。

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

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

如果當(dāng)下覺(jué)得自己寫(xiě)的代碼比較爛,也沒(méi)關(guān)系,先多寫(xiě),再多學(xué)習(xí)高手寫(xiě)的代碼,你就能看出其中的精華。

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

我很多代碼思維和技巧,都是學(xué)習(xí)同事的代碼,我看到他們的代碼時(shí),和無(wú)際項(xiàng)目特訓(xùn)營(yíng)老鐵看我們代碼的感覺(jué)是一樣的,先是一臉懵逼,有些工作后,接觸項(xiàng)目多了,才領(lǐng)悟其中的精髓。

剛開(kāi)始我也不能理解他們的代碼,感覺(jué)寫(xiě)的很復(fù)雜,搞不懂明明可以寫(xiě)的很簡(jiǎn)單,為什么要繞一個(gè)彎。

不過(guò)我把他們的代碼保存起來(lái)了。

后面跳槽又做了幾年,有次,領(lǐng)導(dǎo)安排了一個(gè)復(fù)雜點(diǎn)的新項(xiàng)目,需要自己獨(dú)立從頭到尾去做。

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

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

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

固定的閃爍效果,簡(jiǎn)單,但要考慮到通用性和擴(kuò)展性,就難很多了。

為什么我要專(zhuān)門(mén)給點(diǎn)燈,寫(xiě)一個(gè)程序架構(gòu)?

是因?yàn)長(zhǎng)ED需求太多了,LED大多數(shù)產(chǎn)品都有,而且每個(gè)產(chǎn)品LED數(shù)量,需要的閃爍效果都不同,每次重復(fù)去寫(xiě),費(fèi)時(shí)費(fèi)力。

所以我把LED閃爍,設(shè)計(jì)成獨(dú)立的功能模塊,并考慮到了擴(kuò)展性和移植性。

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

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

所以,程序?qū)懙恼?,不是看代碼寫(xiě)得多漂亮,或者用了什么高級(jí)語(yǔ)法,而是看是否精準(zhǔn)解決需求。

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

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

所以,我覺(jué)得,想把代碼寫(xiě)穩(wěn)定,最主要的就是程序架構(gòu)的設(shè)計(jì)。

如果架構(gòu)設(shè)計(jì)不好,會(huì)導(dǎo)致代碼難以維護(hù)、容易出錯(cuò)、功能擴(kuò)展困難、穩(wěn)定性差、調(diào)試?yán)щy、硬件兼容性差等問(wèn)題。

好的程序架構(gòu),我覺(jué)得核心是要把控兩點(diǎn):

一、程序"地基"也就是整個(gè)項(xiàng)目,所有功能的"管理者"。比如RTOS,就是充當(dāng)這樣的角色。

很多復(fù)雜的單片機(jī)項(xiàng)目,都會(huì)上RTOS,就是保證地基是穩(wěn)定,降低對(duì)工程師的技能要求。

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

不過(guò),我還是比較喜歡用"裸機(jī)"寫(xiě)程序,然后采用自己設(shè)計(jì)的輕量任務(wù)調(diào)度系統(tǒng)。

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

這是一個(gè)簡(jiǎn)單的輪詢(xún)式任務(wù)調(diào)度系統(tǒng),通過(guò)一個(gè)定時(shí)器中斷來(lái)觸發(fā)任務(wù)調(diào)度。相對(duì)RTOS來(lái)說(shuō),有以下優(yōu)勢(shì):

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

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

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

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

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

這個(gè)架構(gòu)也有配套的開(kāi)源視頻,是我2018年錄著玩的,不過(guò)代碼已申請(qǐng)版權(quán),非學(xué)員不能直接用于自己項(xiàng)目,可以學(xué)習(xí)這種編程思維,要的找我安排。

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

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

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

1.硬件層主要是單片機(jī)外設(shè),以及一些外圍芯片的驅(qū)動(dòng)程序,比如定時(shí)器、LED、語(yǔ)音輸出、按鍵、串口、ADC、EEPROM。

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

然后不同的硬件驅(qū)動(dòng)程序也是相互獨(dú)立的。

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

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

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

不同的功能程序也是相互獨(dú)立的。

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

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

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

我們?cè)谧龉δ艿臅r(shí)候,也要有架構(gòu)的思維,需要考慮到后續(xù)功能的擴(kuò)展和移植。

比如我們做菜單的時(shí)候,會(huì)考慮到后期如果項(xiàng)目需要增加或刪減界面,怎么設(shè)計(jì)比較方便靈活。

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

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

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

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

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

一般流程是這樣的。1.先實(shí)現(xiàn)功能先不要考慮架構(gòu),先把功能實(shí)現(xiàn)出來(lái),再?gòu)墓δ芾锩嬲乙?guī)律。

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

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

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

    關(guān)注

    6074

    文章

    45368

    瀏覽量

    664627
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4947

    瀏覽量

    73291

原文標(biāo)題:如何編寫(xiě)穩(wěn)定的單片機(jī)代碼?

文章出處:【微信號(hào):nanshuqg,微信公眾號(hào):無(wú)際單片機(jī)編程】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    51單片機(jī)RS485編程實(shí)例資料

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

    單片機(jī)原理及應(yīng)用詳解

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

    什么單片機(jī)比較耐用

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

    單片機(jī)的儲(chǔ)存優(yōu)點(diǎn)是什么

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

    單片機(jī)采用什么電流輸出

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

    怎么測(cè)單片機(jī)系統(tǒng)頻率

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

    單片機(jī)怎么驅(qū)動(dòng)電機(jī)?

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

    單片機(jī)怎么燒程序

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

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

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

    給予單片機(jī)的溫度控制系統(tǒng)設(shè)計(jì)

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

    晶振受到電磁干擾對(duì)單片機(jī)的影響

    單片機(jī)可以正常運(yùn)行的一個(gè)因素就是晶振的穩(wěn)定性。在工作過(guò)程中,晶振可能會(huì)受到電磁干擾的影響,導(dǎo)致單片機(jī)發(fā)生故障,甚至出現(xiàn)死機(jī)的情況。
    的頭像 發(fā)表于 03-20 18:01 ?1029次閱讀

    基于瑞薩RA8單片機(jī)的智能小車(chē)項(xiàng)目方案 附源代碼

    基于瑞薩RA8單片機(jī),e2studio開(kāi)發(fā)環(huán)境,給大家講述一下智能小車(chē)項(xiàng)目的方案,并附上主要的源代碼。
    的頭像 發(fā)表于 03-07 14:36 ?2158次閱讀
    基于瑞薩RA8<b class='flag-5'>單片機(jī)</b>的智能小車(chē)項(xiàng)目方案 附源<b class='flag-5'>代碼</b>

    單片機(jī)學(xué)習(xí)—C51源代碼和Proteus仿真文件

    單片機(jī)學(xué)習(xí)—C51源代碼和Proteus仿真文件.zip, 有各種例子
    發(fā)表于 02-10 13:46 ?2次下載

    怎么提升單片機(jī)代碼執(zhí)行效率

    ? 提升單片機(jī)代碼執(zhí)行效率需要從多個(gè)方面入手,包括代碼優(yōu)化、硬件資源利用、編譯器設(shè)置、中斷處理優(yōu)化以及其他技巧等。在實(shí)際應(yīng)用中,需要根據(jù)具體需求和硬件條件綜合考慮這些因素,以實(shí)現(xiàn)最佳的性能表現(xiàn)。 ?
    的頭像 發(fā)表于 01-10 11:06 ?959次閱讀

    如何寫(xiě)出ADC的分時(shí)復(fù)用?

    我想問(wèn)一下如何寫(xiě)出ADC的分時(shí)復(fù)用,我要用來(lái)量測(cè)不同引腳/物理路的連續(xù)AD值 我用的是CC1310 LAUNCHPAD,文擋是用ADCBUF...... 我遇到的問(wèn)題大致有: 1.
    發(fā)表于 12-20 07:41