大家好,我是無際,
也有很多天沒水文了,最近在規劃第七期的事情,也新增了一個lora模塊專案,
看別人的專案程式是一個工程師必經的程序,雖然比自己寫還痛苦,
不過這也是提升自己水平最好的方式,如果有程式作者的指導,如虎添翼~
我第一次看大佬寫的程式,沒人指導純死磕,幾年時間才完全吃透,也總結了一些經驗,
今天就通過我們最復雜的wifi主機專案作為案例,給大家分享下,要如何正確地去學習別人的專案程式,
如果學習方式不對,會浪費大量的時間,也很難學會,
相信無際單片機編程有些基礎比較差的學員,剛開始學我們主機專案的時候都一臉懵逼,很迷茫,
為什么我學了課程以后,讓我自己去寫,還是一頭霧水,沒有思路,不知道怎么去下手,
如果你有這些問題和焦慮都是正常的,也是必經的程序,千萬不要灰心,不要逃避,我們花了幾年時間,修改幾十次總結出來的東西不可能你看個教程就能學會的,想突破就必須經歷痛苦的死磕程序,
只要按照我們的正確流程來學習,絕對讓你少走幾年的彎路,
一、如何正確地學習主機程式?
第一步:玩熟功能
課程先不急著搞代碼,你先把主機每個功能玩熟了,這個產品的功能對大家來說還是有那么復雜的,如果連產品什么功能都不知道,就更不可能去寫代碼實作功能了,
一個功能的正確實作流程:
先熟悉功能->自己想功能實作思路/參考我們的代碼思路->反復寫代碼除錯->功能完成
熟悉功能可以看【1.WIFI報警器功能演示】和【6.Wifi報警主機功能拆解】的教程,
第二步:看懂電路原理
不要想著自己怎么去設計,這是硬體工程師的職責,同時讓你搞硬體和軟體,會加重你學習的負擔和周期,硬體是需要經歷很多實際專案去積累的,不是靠一個視頻教程能學會的,
比如說我們這兩個專案的一些電源電路、三極管的一些應用等等,這些就是你的積累,你后面開發新產品有用到同樣需求的時候,你就可以直接用這個電路了,
不是說什么自己重新去設計,現在大多數都是基于現成的修改優化,而不是重頭設計,這樣能最大程度也降低出問題的風險,從而縮短開發周期,
新手最大的誤區就是喜歡鉆牛角尖,比如說這個濾波電容為什么要用0.1uF,那個上拉電阻為什么要用4.7K,為什么別人用10K?這些都是硬體工程師要考慮的范疇,
而實際也簡單,像濾波這種,我們開發產品的時候,都是直接測驗的,比如說0.1uF濾波效果不夠,那我們就換大一點的,然后用示波器看看電源的波形,有沒有毛刺那些,就是這樣一步步調到最佳的一個容值,而不是說用亂七八糟的公式理論來算的,即便算出來,實際很大可能也是有誤差的,這樣太浪費時間了,
其實剛開始不用深入到這么細節,我們先要搞懂單片機怎么去控制,信號輸入到單片機我們怎么通程序式采集就完事了,把主要的精力放在軟體上,這是剛需,
硬體設計,畫PCB會只是你的加分項,不是必須條件,你先把軟體都搞定了,至少給你任何一款產品功能,你都知道怎么用程式去實作,這時候再進階全堆疊,再針對性去學硬體,這個順序一定要搞對,
我們的目標是以最快速度用這個技能去找份作業掙錢,有了穩定收入,你學啥都方便,前面你啥都想學,往往是還沒學會就已經餓死了,
一定要回圈漸進,一個個突破,不要貪!
第三步:學習產品代碼
第三步就是整個課程的重點和難點,
我們這個產品是基于模塊化編程的思維,也就是不同的功能模塊拼湊起來,最后拼湊成完整的產品功能,
這樣的好處就是移植維護起來很方便,每個功能稍作修改就可以直接用在不同的產品上,比如說按鍵檢測功能、LED特效功能,基本上每個產品多多少少都會有LED指示燈、按鍵,這個時候直接把我們的代碼移植過去改一下LED的個數,按鍵的個數就能馬上把功能做出來,
我們先把我們產品的程式剖析一下:
二、主機程式的整體架構

1.硬體層驅動
1.1)單片機外設(STM32韌體庫)
這塊不是我們學習的重點,但是必須要去學習,學到什么程度呢?
我們能把這個產品需要用到的單片機外設用起來就夠了,具體要學要用哪些外設,跟著我們課程順序做就行,
剩下的外設以后開發新產品用到了再學習,因為不是所有的產品都會用STM32的,如果你花很多精力去學這個單片機外設,那一換單片機你大多數精力不是白費了?
這塊,如果我們教程講的不夠詳細,可以配合原子和野火的視頻去理解,效果會更好一點,
1.2)功能驅動
比如喇叭報警功能、IIC讀寫系統引數功能、按鍵檢測功能、LED特效功能、OLED顯示功能、RFD軟解碼功能、定時器矩陣功能、LED特效功能、串口除錯功能,
硬體層的驅動代碼,通用性其實都比較強,大家稍作修改都可以直接移植到以后自己的產品上,所以個人建議大家在前期為了節約時間,可以直接拿來當做自己的”武器庫”,前期自己寫不出來沒關系,但是一定要會用會改,
慢慢你經歷的專案多了,代碼經驗豐富了,到時候再自己寫就容易很多了,
,這就是所謂的回圈漸進,在正確的階段做正確的事情,效率才會高,
我的要求:
第一遍寫不出來,不要死磕,不要糾結自己寫不出來,先學會用,并且能舉一反三的用,
怎么用?直接拷貝我的代碼,會修改關鍵的地方方便以后應用在自己產品中就行了,
比如說LED特效,我們是一個LED燈,幾種特效功能,你可以加多幾個燈,增加幾種特效試試,
比如說按鍵檢測功能,你可以去掉幾個按鍵,或者再增加幾個按鍵,又或者是加復合鍵(就是幾個按鍵一起按下的時候)的功能試試,
我們需要達到這個程度,而不是你從頭到尾寫代碼實作,
第二遍就是用自己的思維寫一下,然后再對比我的代碼,各有什么優缺點,
第二遍我們最好到實際作業中再去提升,這樣性價比高,一邊賺錢一邊繼續提升,因為你第一遍會用已經能解決很多產品功能了,而且這種硬體驅動一但寫好,后面就是復制粘貼,很少再去重寫,
2.系統內核
系統內核的作用是讓不同的功能模塊(LED特效、按鍵檢測、RFD解碼、串口Debug、喇叭報警功能、產品功能邏輯)執行起來更加靈活可控一點,
系統內核我是做了5,6年以后才寫出來的,其實也不難,無非就是對結構體陣列進行系列的操作,
第一遍大家不要重頭自己寫,一是浪費時間,而是經驗不足很難寫出來,
這個不是剛需,這個系統內核通用性很強,基本不受限于單片機, FLASH有個10K的51單片機都可以用,所以學會移植基本夠用了,
等你整個專案做完了,代碼水平和思維都會提升,到時候再回來研究怎么寫就輕松很多了,
這個系統內核我們也有系統的教程,大家后面想自己寫的時候可以去看一下,找無際單片機編程拿就行了,

3.產品功能
產品功能不具備通用性,相當于對前面每個功能模塊代碼的整合,所以第一遍就要自己動手寫一下,如果前面寫不出來,可以參考我的代碼一邊寫一邊思考,
最后總結:
不要想著看一遍視頻教程就全會了,越復雜的專案越需要自己動手做寫代碼實踐,
實踐的程序會產生大量的問題,把這些問題都解決了,思維和水平就提升了,
要學會舉一反三,這樣你到你專案的時候才知道怎么用,
Ok,今天分享就到這里,這篇文章肝了3,4個小時,有幫助的老鐵安排個三連,謝謝啦~
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/310619.html
標籤:其他
上一篇:MyBatis實作增刪改查&優化
