色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          "); //-->

          博客專欄

          EEPW首頁 > 博客 > 嵌入式開發(fā)如何快速進(jìn)階?有捷徑?

          嵌入式開發(fā)如何快速進(jìn)階?有捷徑?

          發(fā)布人:xiaomaidashu 時(shí)間:2023-09-08 來源:工程師 發(fā)布文章

          嵌入式軟件開發(fā)有沒有什么捷徑?不定期會(huì)收到類似的問題,我只想說:嵌入式軟件開發(fā)沒有捷徑

          說實(shí)話,有這種想法的人,我其實(shí)想勸你放棄。對(duì)于絕大多數(shù)普通人,一步一個(gè)腳印就是捷徑。

          當(dāng)然,這個(gè)問題可以換個(gè)方式問,比如:如何才能提升自己編程水平?或者:如何提升自己技能?

          對(duì)于大部分人,特別是初學(xué)者,我覺得應(yīng)該從兩個(gè)方面提升自己技能:

          1.多參考、多閱讀優(yōu)秀的開源代碼;

          2.多實(shí)踐,動(dòng)手敲代碼;

          圖片


          為啥要參考別人的代碼?

          圖片

          你要相信,這個(gè)世界上大部分人都是普通人,你的寫代碼的很多想法別人都已經(jīng)想過,而且實(shí)踐驗(yàn)證過。

          最終能保留下來的,而且運(yùn)用在優(yōu)秀開源項(xiàng)目中的代碼,這種代碼就具有參考價(jià)值。

          肯定有人會(huì)反駁,認(rèn)為**代碼很La圾,自己寫的代碼肯定比**代碼要好。有這種想法的人,往往自己很菜,卻非要認(rèn)為自己很牛逼。

          當(dāng)然,不排除有那種確實(shí)很牛逼的人,但這種人又有多少呢,反正我自認(rèn)為我是一個(gè)普通人,我要向優(yōu)秀的人學(xué)習(xí)的地方還有很多。

          圖片

          何為優(yōu)秀的代碼?

          圖片

          何為優(yōu)秀的代碼?可能每個(gè)人的定義不同,每個(gè)人的側(cè)重點(diǎn)也不同。

          易讀易懂、結(jié)構(gòu)清晰、邏輯清晰、方便移植......等等包含了所有優(yōu)點(diǎn)的代碼,就是優(yōu)秀的代碼?我覺得不是!

          人無完人,代碼也肯定多少都存在“瑕疵”,或者說多少存在有你認(rèn)為不滿意的地方。

          我認(rèn)為優(yōu)秀的代碼,首先,它能被許多人使用,并運(yùn)用在許多成功的項(xiàng)目中。比如:一套控制算法代碼,能成功應(yīng)用在機(jī)械臂、機(jī)器人、無人機(jī)等項(xiàng)目中,它就是優(yōu)秀的代碼。

          其次,它具有優(yōu)秀代碼的一些基本特性,比如上面說的易讀易懂、代碼清晰、方便移植等。

          這種對(duì)于學(xué)習(xí)者不排斥的代碼也算得上優(yōu)秀的代碼,比如:一個(gè)模塊的驅(qū)動(dòng)程序、一套串口通信協(xié)議。

          再次,就是代碼更多細(xì)節(jié),比如:代碼排版格式、注釋、命名等。

          圖片

          哪里有優(yōu)秀的代碼?

          圖片

          我覺得程序員不應(yīng)該問這樣的問題。我反過來問你吧,你看大家一般把代碼開源在什么地方?

          當(dāng)然是代碼托管的網(wǎng)站啊,GitHub是目前世界上最大的代碼托管平臺(tái):

          https://github.com/

          當(dāng)然,除了GitHub之外,還有國(guó)內(nèi)的Gitee代碼托管平臺(tái):

          https://gitee.com/

          這倆代碼托管平臺(tái)眾多大公司都在上面貢獻(xiàn)了優(yōu)秀的代碼,微軟、谷歌、騰訊、阿里這些公司都有代碼庫。

          同時(shí),你會(huì)發(fā)現(xiàn)平時(shí)我們使用的一些開源代碼,在GitHub平臺(tái)上都有。比如:RTOS內(nèi)核及組件、MCU廠家驅(qū)動(dòng)代碼、通信協(xié)議等源代碼。

          圖片

          多動(dòng)手寫代碼

          圖片

          實(shí)踐是檢驗(yàn)真理的唯一標(biāo)準(zhǔn),這句話相信大家都聽說過。

          如果只看書不動(dòng)手敲代碼就能掌握程序開發(fā),你覺得這個(gè)程序員能寫出好的代碼嗎?很多人基礎(chǔ)理論很不錯(cuò),但實(shí)踐操作起來各種問題、各種不懂。

          比如下面這樣寫:





          if(i = 1){  //...}

          你可能認(rèn)為是對(duì)的,編譯也是對(duì)的,但實(shí)際這代碼有bug。

          編程是一個(gè)很注重實(shí)踐的工作,因?yàn)楝F(xiàn)實(shí)中存在各種不確定的因素,比如:你寫的函數(shù),有可能因?yàn)閭魅氲膮?shù)過大導(dǎo)致內(nèi)存溢出。

          代碼寫出來了還不算有本事,編譯0警告0錯(cuò)誤,并成功運(yùn)行起來,你學(xué)的理論知識(shí)才發(fā)揮了作用。

          圖片

          編程習(xí)慣

          圖片

          這里說的多動(dòng)手寫代碼,不只是為了寫代碼而寫代碼,寫代碼的同時(shí),要培養(yǎng)良好的編程習(xí)慣。

          如果養(yǎng)成了不良的編程習(xí)慣,后期改變可能很難。

          比如函數(shù)、變量以“中文字母”方式命名:




          int DianYa;int CaiJiDianYa(void);

          還比如:不寫注釋、源代碼不分類、命名混亂等。

          很多人初學(xué)的時(shí)候可能都沒有意識(shí),想到什么就寫什么,所有功能在main中就實(shí)現(xiàn)了。

          這里就要回到上面的內(nèi)容,多參考別人優(yōu)秀的代碼。當(dāng)然,不同階段參考的代碼不同,初學(xué)者可以參考一些基礎(chǔ)教程配套的代碼,有工作經(jīng)驗(yàn)的工程師應(yīng)該多參看成功項(xiàng)目的源代碼。

          看看別人怎樣命名、怎么寫注釋、怎么將代碼分類等。

          圖片

          編程思維

          圖片

          做小項(xiàng)目時(shí),可能幾百行代碼,一個(gè)main就搞定了,這時(shí)你可能覺得編程思維不重要好。

          但項(xiàng)目做大了,你就會(huì)發(fā)現(xiàn)以小項(xiàng)目的編程方式不能完成了,這個(gè)時(shí)候就要考慮軟件架構(gòu)、結(jié)構(gòu)化、模塊化了。

          對(duì)于初學(xué)者來說,一下就要掌握軟件架構(gòu)、模塊化設(shè)計(jì)可能有點(diǎn)難,但是,可以慢慢培養(yǎng)自己的編程思維。

          舉一個(gè)簡(jiǎn)單的模塊化的例子,你做一個(gè)小車,你把“運(yùn)動(dòng)部分”的代碼歸為一類(模塊化),對(duì)應(yīng)的文件命名可以為 bsp_motion, app_motion,函數(shù)命名為 Motion_xxx 等。

          當(dāng)然,還有很多地方,你可以都?xì)w類為 Motion,比如:











          #define MOTION_PWM_TIMx              TIM9#define MOTION_PWM_TIM_CLK           RCC_APB2Periph_TIM9#define MOTION_PWM_TIM_GPIO_CLK      RCC_AHB1Periph_GPIOE#define MOTION_PWM_TIM_PIN           GPIO_Pin_5#define MOTION_PWM_TIM_GPIO_PORT     GPIOE#define MOTION_PWM_TIM_SOURCE        GPIO_PinSource5#define MOTION_PWM_TIM_AF            GPIO_AF_TIM9#define MOTION_PWM_TIM_OCxInit       TIM_OC1Init#define MOTION_PWM_TIM_SetComparex   TIM_SetCompare1#define MOTION_PWM_COUNTER_CLOCK     10000000

          其實(shí),說的再多,看的再多,不如自己行動(dòng)起來敲代碼,過程中你肯定會(huì)遇到各種各樣的問題。

          你用心解決這些問題的過程,就是你成長(zhǎng)的過程。最后,如何證明你編碼水平提升了? 答:回看自己以前代碼,如果覺得爛,那就說明你提升了。


          *博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。



          關(guān)鍵詞: 嵌入式

          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉