Hello embedded !
- 我記憶中最早的嵌入式設備
- 嵌入式是個啥
- 從用戶到底層,從底層到用戶
- 嵌入式還要干些啥
大約從幾年前起,我就想寫一篇關于嵌入式(Embedded)的相關總結,它可以是敘述性的解釋和聊天,也可以是技術性的報告或者是探討,估計這個程序會在開始的時候非常有趣,至于之后,誰又能想到呢,但是既然和很多人一樣選擇了這個行當,分享自己的認識,分享自己的所聞所見和技識訓累,那就是一件義不容辭的事情了,opensource也包括了想法的開源,
我的朋友應該都知道,我在本科時候學的是資訊系統,那是一個偏向互聯網行業的技術,其實非常有趣的事情是,在我接觸嵌入式這個專業之前及之后,我對“軟體”和“硬體”的認知程序其實是非常有趣的,我覺得有必要和大家分享一下,相信會有些共鳴,
此外!!此外!!!我想宣告,這篇文章的內容會偏向介紹給小白,可能是技術小白,也可能是行業外從事別的作業的同事,也或許是對物聯網,互聯網有些了解但是不深入的朋友,甚至可以是公務員,銀行上班族等等,我會講的比較深入簡出,給大家一個方便理解的感受,幫助你們平日里吹牛逼哈哈哈哈(重點是學習),
還有一個此外!那啥這個文內我主要以自己的閱歷和理解給介紹一下,嚴謹的東西我盡量努力,但也不保證會有人以不同的理解表達不同的想法和見解,站的位置和領域不同產生的見解是有顯著差異性的,歡迎大家和我討論,
其實吧,我第一次接觸這個嵌入式,還是在課程名中見到的,當時叫embedded wireless system(嵌入式無線系統)專業名,隸屬我當時的學院,電子電氣工程學院,大家知道,我是本科學的前端后端這一方向的,跟這個完全是兩個天地,當時看到這個名字的時候,第一反應自然是語文上的理解,嵌入式,嵌哪兒?說真的,我當時就都沒想的很多,簡單的以為是設備與設備之間的嵌合,當然這是其中的一部分但是甚微,具體的嵌入式我想后面再細說它,總之現在回頭想,回頭看會覺得自己好幼稚,觀眾姥爺別笑,這種感覺我相信每一個,記住是每一個開發者都會有過的,開發某一個產品之前覺得它難于上青天,登完了以后感覺這就是個弟弟,登這個弟弟還費了我這么久時間,我也簡直就是個湊弟弟了,
為了更好的理解嵌入式,我覺得有必要從頭將它掰扯掰扯才能更好被理解
我記憶中最早的嵌入式設備

我記憶里第一次接觸到的設備應該是我爺爺當年做的一個家用掛歷了,有點類似圖片中的這個,但是沒有這么精細,那會兒還都是木質外觀,但是例外精準,小時候就記憶里有爺爺拿著電烙鐵在家,用放大鏡焊接的場景,歷歷在目,
有點offtopic了,不過我想說的是,嵌入式這個行當的歷史應該是非常非常久了,或者說它就是現代計算機的另一個分支,
我們總說嵌入式,嵌入式,其實有一個名詞我一直沒提,就是單片機,或者說單片機更貼近大部分人的生活一點,尤其是學生,
說道單片機,那必然要和開發板一塊扯扯淡,其實是一類東西,單片機也能敲代碼,也能燒程式(下載程式),但是開發板能做更多事情,理解起來就像是,我能用諾基亞發短信,打電話,玩游戲,但是我的華為還能用語音發短信,用文字轉語音打電話,用手機背板玩游戲,更強大的功能,導致了更多的場景可以被應用,
嵌入式是個啥
我記得在我讀書的時候,最常遇到的場景:
同學:同學,你是學什么的呀
我: 嵌入式的,不知道你有沒有聽過
同學:沒有,那是個啥
我:編程的一種
同學:噢噢噢,IT程式員
我:其實不是的,你知道單片機嗎
同學:不知道
我:那集成電路呢
同學:不知道
我:KEIL,IAR?(這個我通常問一些有些了解的人)
同學:沒聽說過
我:…
備注(我之所以不愿意承認程式員這個問題,是因為很多人,或許說98%的人理解的程式員是我們互聯網的開發者,也就是一臺電腦,一杯咖啡,敲一天代碼的那種,我本科學的那個,所以我理解的會比較深刻,但是嵌入式軟體工程師的生活可不是這樣的)
大概經過了幾十次類似的問話以后吧,我也學會了“見人說人話,見鬼說鬼話”的打工人必備技能!
沒辦法,真的很難和領域外的人解釋,但是嵌入式又不是那么難那么復雜的東西,只是大部分人不想理解,那么我就在這里解釋一下嵌入式究竟在實際開發中擔任了什么樣的角色,

相信許多電影里場景,一談到高科技就整點這樣的圖片出來,給人一種高端大氣上檔次的感覺,哈哈哈哈是的,我第一次看到的時候內心也是“真他娘的帥”,這些秘密麻麻的紋路其實就是我們集成電路的走線了,每一個設備打開以后基本也都是這個樣子,只是這個看上去比較抽象罷了,一塊看上去完整的板子里面有許許多多的元器件,電阻,電容,兩極管,光耦等等:
1.有的是用來提供降壓的(這個不難理解,我們給一個設備通電的時候不是一般都只有一個電源的嘛,那不同的元器件它需要的電壓是不同的,所以有些電阻需要用來降壓),
2.有的比如電容它還除了能用來提供電壓,還可以用來給我們做測驗debug用,許多硬體工程師在設計PCB的時候會在某些電源檢測的地方分一個電容,這樣我們在開發的時候就可以直接量這個電容兩端的電壓,來校對程式運行程序中的電壓檢測是不是準確,這是極大地幫助了軟體工程師的元件設計(respect HW Engineer),
3.光耦,也是比較常見的一種元器件,通常用來做隔離和導通,作業的邏輯和繼電器是一樣的,單路導通引發作業路導通,很香,很實用,
也就是說有各種各樣的元器件需要相互連接和協作,那么就出現了各種各樣的線路,此外,這個PCB解釋起來很容易,但是真正要學會它,沒有若干年的功夫是不可能的,PCB也是我認為最深奧的一門學科了,真的相當深奧,那可是所有設備的底啊,PCB畫不好,什么設備都跑不動,電腦都起不來,也就別談什么別的東西了,重要的是,它不像我們寫代碼,還有個編譯器給你debug一下,告訴你哪哪行代碼錯了,有啥毛病要去修改,人家可是元器件,直愣愣的就是冰冷的材料,它可不會說話,一旦遇到問題,沒有能力可咬不動這塊骨頭,哎,順帶吐槽一下資本市場,我就奇了怪,為什么PCB這么難的東西,招聘的時候待遇卻這么一般,難道大家都不打算設計自己的板子,或者是不打算開拓嗎,資本控制知識太可怕了(可怕),

換一個比較契合現實的集成電路給大家看一下,這就是我們一般生活中應用比較的電路板的模樣了,通常有cpu(Central Processing Unit),用來組成全部代碼邏輯,有的還有雙CPU,一個主(Master)一個從(Slave),這個完全看設計需要了,其他的元器件就是電阻那些東西, 當然也有別的芯片,一般這些芯片我們并不直接往里面燒代碼,但是會通過拉低拉高它的管腳(PIN)來達到我們想要的功能,但是這一類芯片也是問題比較多的,主要體現在它的性能上,我們常說國產化的東西不太行,國產芯片怎么怎么如何如何,很大的根源就在這里,這個問題我會在后面聊一下,
好了,大部分的嵌入式作業都是基于這個展開的,那么問題來了,我相信有很多不太了解我們的人會想知道,一個產品它的根源在這里,那么是如何運行起來的呢,我想在后一節,以一個例子來解釋,從一個用戶的行為,一直到芯片命令底層元器件的作業,最終給用戶一個反饋,這樣一個流程會涉及到信號學,通信協議等等,這些如果講起來估計沒個幾天幾夜我講不清楚,還是給我自己留個肝過過小日子吧,畢竟打工人,不是人上人哈哈哈,
從用戶到底層,從底層到用戶
場景:用戶手持一個測量環境引數(濕度傳感器)設備,資料在設備螢屏上顯示,
| 物件 | 動作 |
|---|---|
| 人 | 點擊按鈕開始 |
| CPU | 收到命令,發布命令 |
| 傳感器 | 采樣,回傳資料 |
整個流程不算復雜,我用比較容易理解的方式將它分層說明:
1.用戶按下設備按鈕的時候,設備的按鈕本身就是一個元器件,他會產生一個電流信號,根據之前我解釋的那個走線,按鈕也是和我們的CPU,通過某些元器件的連接,或許把信號隔離或者不隔離/1/,然后傳到主CPU,
2.當CPU收到這個信號后,他會根據自己的代碼邏輯,在預先寫好的管腳內發送特定的信號/2/,或者干脆拉低某個管腳,總之這些行為都是根據你要命令的傳感器/3/來預先編程的,
3.當傳感器收到信號后,他會開始采樣,把環境溫度濕度等等他能獲得的資料以信號,以特定的通信方式告知CPU,CPU就可以分析/4/出來是什么樣的東西,然后反饋給我們的用戶,反饋方式也很多,有的直接在本設備的LED上顯示,也可以無線傳輸出去(那么就要額外配置一些元器件或無線模塊了),
流程很簡單易懂,里面的注釋內容才是我想拓展和交流給大家的,
/1/信號為什么要隔離?
其實原理也很容易,初中物理的電生磁,這么一說大家就懂了,都是在線路里,不管多小的電流都會產生磁場的,所以我們一般要做隔離,畢竟那么小的一塊板子嘛,
/2/特定的信號指的是什么?
總體上來講,信號,有很多種,PWM(pulse)脈沖信號,AD信號和DA信號(數模,模數),太多了,講不完的,
我有自己的一套最直觀的理解,所謂的信號不過是電流,不過你是脈沖的(其實就是信號隨時間的走向是一個正弦波),或者是AD(analog to digital)模擬轉數字信號,或者DA,其實已經是表象上的東西了,就像是刺繡,有的人手巧一點可以秀一對兒鴛鴦,很鮮活很好看,那有的人腦子不太行,想秀鴛鴦結果修成了蛤蟆,可是說到底,他們都是用的同一個線在畫布上秀來秀去的,同樣的,我們的電流本質是一樣,只是他們波動的形狀不太一樣,當我們把波動的電流隨著時間軸的拉長或壓縮,那就會有不同的形狀了,

網上找來一張圖,大家只看上面的地方就可以了,
這是一種Digital,數字信號,
我簡單解釋一下數字信號和模擬信號,也就是AD和DA,有的地方是ADC,C是轉換convert,
所謂數字型號簡單的說就是它只產生高電平或者低電平,也就是如圖里面的,模擬信號呢會有一個順滑的曲線,比如我們的正弦波就很絲滑,
換一個方式說,我們的溫度從0慢慢升高的時候,我們需要的是模擬信號吧,讓他從0, 1 ,2, 3這樣一點一點的,有程序的升高比較符合我們現實生活;如果這時候我們強行給他來數字信號呢,那我們就只能得到0攝氏度,100攝氏度這樣的兩個值,這顯然不太靠譜,
但是我們撕開它以后其實還是能得到我們想要的絲綢,也就是說,總歸來說還是電流,沒有什么特別的,
/3/什么是傳感器
其實傳感器和元器件的有點類似,或者說就是一類東西,元器件呢,電阻電容,感覺比較low,傳感器呢,其實給他扒開衣服也是這點東西,只是已經被廠家給修正了,會根據不同的場景產生不同信號,
打個比方,我們有運動傳感器motion sensor,他里面的組成部分有一個擴增,用來放大光信號,然后就是接受光信號的元器件,當外部信號變化(人走來走去會有陰影的嘛),特殊的元器件會產生電流的變化(光敏電阻建議大家去看一下作業原理,另外感慨一下,材料學才是萬物之源),根據這些變化我們就能知道環境有了什么變化,
/4/分析啥,怎么分析
前面我們說到,傳感器或元器件回傳來的都是根據溫度環境產生變化而變化的電流引數,也就是說,我環境溫度35度,其實我采集到的信號可能是一堆二進制模樣的電流,CPU這里看到的也是一堆數字(如果我預先配置的是AD哈),其實是不能被直接使用和理解的,這時候我們需要一些簡單的演算法,這些演算法通常都在傳感器產品的說明書里會寫,
extra:閱讀文獻和檔案也是嵌入式的必備技能,基本是全英文的,
有了演算法我們就能將這些看不懂的數字對應到合理的溫度表達了,基本任務也就完成了,
嵌入式還要干些啥
太多了,由于嵌入式是屬于偏向底層的編程開發,那么很自然的你需要閱讀硬體原理圖(別指望你的硬體工程師啥都要告訴你,人家也是人上人),還有全英文的技術檔案和手冊,里面涵蓋了芯片概要設計,暫存器手冊等等,
要寫的東西太多了,今天先這樣吧,
算是給我自己轉正前的想法做一個匯總,有些東西過了這個時間就容易被遺忘,好記性不如爛筆頭,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/200557.html
標籤:其他
上一篇:ROS2與Arduino串口和WiFi測驗記錄(Due和ESP32)
下一篇:樹莓派+新型混合無人機
