主頁 > 後端開發 > 從學生到社會人_EmbeddedLove

從學生到社會人_EmbeddedLove

2020-11-02 15:01:05 後端開發

Hello embedded !

    • 我記憶中最早的嵌入式設備
    • 嵌入式是個啥
    • 從用戶到底層,從底層到用戶
    • 嵌入式還要干些啥

大約從幾年前起,我就想寫一篇關于嵌入式(Embedded)的相關總結,它可以是敘述性的解釋和聊天,也可以是技術性的報告或者是探討,估計這個程序會在開始的時候非常有趣,至于之后,誰又能想到呢,但是既然和很多人一樣選擇了這個行當,分享自己的認識,分享自己的所聞所見和技識訓累,那就是一件義不容辭的事情了,opensource也包括了想法的開源,

我的朋友應該都知道,我在本科時候學的是資訊系統,那是一個偏向互聯網行業的技術,其實非常有趣的事情是,在我接觸嵌入式這個專業之前及之后,我對“軟體”和“硬體”的認知程序其實是非常有趣的,我覺得有必要和大家分享一下,相信會有些共鳴,

此外!!此外!!!我想宣告,這篇文章的內容會偏向介紹給小白,可能是技術小白,也可能是行業外從事別的作業的同事,也或許是對物聯網,互聯網有些了解但是不深入的朋友,甚至可以是公務員,銀行上班族等等,我會講的比較深入簡出,給大家一個方便理解的感受,幫助你們平日里吹牛逼哈哈哈哈(重點是學習),
還有一個此外!那啥這個文內我主要以自己的閱歷和理解給介紹一下,嚴謹的東西我盡量努力,但也不保證會有人以不同的理解表達不同的想法和見解,站的位置和領域不同產生的見解是有顯著差異性的,歡迎大家和我討論,

其實吧,我第一次接觸這個嵌入式,還是在課程名中見到的,當時叫embedded wireless system(嵌入式無線系統)專業名,隸屬我當時的學院,電子電氣工程學院,大家知道,我是本科學的前端后端這一方向的,跟這個完全是兩個天地,當時看到這個名字的時候,第一反應自然是語文上的理解,嵌入式,嵌哪兒?說真的,我當時就都沒想的很多,簡單的以為是設備與設備之間的嵌合,當然這是其中的一部分但是甚微,具體的嵌入式我想后面再細說它,總之現在回頭想,回頭看會覺得自己好幼稚,觀眾姥爺別笑,這種感覺我相信每一個,記住是每一個開發者都會有過的,開發某一個產品之前覺得它難于上青天,登完了以后感覺這就是個弟弟,登這個弟弟還費了我這么久時間,我也簡直就是個湊弟弟了,

Alt

為了更好的理解嵌入式,我覺得有必要從頭將它掰扯掰扯才能更好被理解

我記憶中最早的嵌入式設備

在這里插入圖片描述
我記憶里第一次接觸到的設備應該是我爺爺當年做的一個家用掛歷了,有點類似圖片中的這個,但是沒有這么精細,那會兒還都是木質外觀,但是例外精準,小時候就記憶里有爺爺拿著電烙鐵在家,用放大鏡焊接的場景,歷歷在目,
有點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/houduan/199535.html

標籤:python

上一篇:[1]無線通信--介紹基本概念

下一篇:樹莓派+新型混合無人機

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more