當前位置:首頁 » 編程語言 » 學c語言嵌入式要學哪些硬體知識
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

學c語言嵌入式要學哪些硬體知識

發布時間: 2022-07-25 22:15:30

1. 嵌入式開發要學那些

嵌入式開發的學習其實並沒有那麼難,只要了解學習的體系,掌握正確的學習方法,學習起來並不難。來講一下嵌入式開發都要學些啥!

嵌入式開發的主要學習內容:

  • C,Java核心編程:c語言核心編程,Java核心編程;

  • Linux核心操作與演算法:Linux系統使用,Linux-c編程核心技術,精品數據結構,Linux-c編程精髓;

  • 核心操作與演算法:Linux系統編程,Linux網路編程核心技術,UI編程,Java核心編程,安卓核心技術;

  • ARM+Linux底層開發:數字電路,ARM編程核心,Linux系統開發,嵌入式Linux驅動開發;

  • 大型項目實踐:每期安排各類型真實的項目

  • 互聯網行業目前還是最熱門的行業,學習IT技能之後足夠優秀是有機會進入騰訊、阿里、網易等互聯網大廠高薪就業的,發展前景非常好,普通人也可以學習。

    想要系統學習,你可以考察對比一下開設有IT專業的熱門學校,好的學校擁有根據當下企業需求自主研發課程的能力,建議實地考察對比一下。

    祝你學有所成,望採納。

2. 嵌入式需要學什麼嵌入式需要學哪些課程和內容

1.1 有哪些設備使用單片機或Linux

所有的電子產品,所用技術都可以認為要麼是單片機,要麼是Linux;GUI方面主要是QT/Android,它們都是運行於Linux之上的。我們說的單片機不使用操作系統,但是使用單片機設備肯定遠遠超過Linux。很多人也是先學習單片機,從單片機進入電子工程師行業,日常生活中,有哪些產品使用單片機、Linux呢?下面舉一些例子:

  • 下面我們用類比和邏輯推導出嵌入式Linux系統的組成,沒錯,「推導」。
    從上圖可以知道:

  • 組成:嵌入式Linux系統= bootloader + linux內核 + 根文件系統(裡面含有APP)。

  • bootloader:它的目的是啟動內核,去哪等讀內核?讀到哪裡?去Flash等外設讀內核,存到內存里去。所以需要有Flash里外設的驅動能力,為了調試方便還會有網路功能。所以,可以認為 booloader = 裸機集合,它就是一個復雜的單片機程序。

  • Linux內核:Linux內核的最主要目的是去啟動APP,APP保存在哪裡?保存在「根文件系統」里。「根文件系統」又保存在哪裡?在Flash、SD卡等設備里,甚至可能在網路上。所以Linux內核要有這些Flash、SD卡里設備的驅動能力。

  • 不僅如此,Linux內核還有進程調度能力、內存管理等功能。

  • 所以:Linux內核 = 驅動集合 + 進程調度 + 內存管理等。

  • 2.3 要學習bootloader嗎

  • Bootloader有很多種,常用的叫u-boot。

  • 在實際工作中,對於u-boot基本上是修修改改,甚至不改。但是u-boot本身是很復雜的,比如為了便於調試,它支持網路功能;有些內核是保存在FAT32分區里,於是它要能解析FAT32分區,讀FAT32分區的文件。

  • 花那麼多精力去學習u-boot,但是工作中基本用不到,這對初學者很不友善。

  • 所以,對於初學者,我建議:理解u-boot的作用、會使用u-boot的命令,這就可以了。

  • 如果你的工作就是修改、完善bootloader,那麼再去研究它吧。

  • 2.4 要學習Linux內核、要學習驅動程序嗎

  • 之前我們說過Linux內核 = 驅動集合 + 進程調度 + 內存管理等,如果要學習Linux內核,從驅動程序入手是一個好辦法。

  • 但是人人都要學習Linux內核、人人都要學習Linux驅動嗎?顯然不是。

  • 作為初學者,懂幾個簡單的驅動程序,有利於工作交流;理解中斷、進程、線程的概念,無論是對驅動開發、應用程序開發,都是很有好處的。

  • 所以對於初學者,建議前期只學習這幾個驅動:LED、按鍵、中斷。

  • LED驅動程序:這是最簡單的驅動程序。

  • 按鍵驅動程序:它也比較簡單,從它引入「中斷」。

  • 中斷:從「中斷」它可以引入:休眠-喚醒、進程/線程、POLL機制、非同步通知等概念。這些概念無論是對驅動開發,還是對應用開發,都很重要。

  • 所以,對於初學者,我建議必須學習這幾個驅動:LED、按鍵、中斷。

  • 入門之後,如果你想從事內核開發、驅動開發,那麼可以去鑽研幾個驅動程序(輸入系統、I2C匯流排、SPI匯流排等),掌握若干個大型驅動程序後,你對內核的套路就有所了解了,再去研究其他部分(比如進程管理、文件系統)時你會發現套路是如此通用。

  • 攝像頭(VL42)、音效卡ALSA驅動是Linux中比較復雜的2類驅動,它們是很難的,如果工作與此相關再去研究。

  • 2.5,要學習Linux應用程序嗎?先學一些基礎技能

  • 要學,即使以後你只想研究內核,一些基本的應用開發編寫能力也是需要的:

  • 基本設備的訪問,比如LCD、輸入設備

  • 進程、線程、進程通信、線程同步與互斥

  • 休眠-喚醒、POLL機制、信號

  • 網路編程

  • ①②③部分的知識,跟驅動有密切的關系,它們是相輔相承的。

  • 掌握了基本驅動開發能力、基本應用開發能力之後,在工作中你就可以跟別人友好溝通了,不至於一臉懵逼。

  • 2.6,應用程序是怎麼啟動的?要了解一下根文件系統

  • 你辛辛苦苦寫出了應用程序,怎麼把它放到板子上,讓它開機就自動啟動?

  • 你寫的程序,它依賴於哪些庫,這些庫放到板子上哪個目錄?

  • 怎麼做一個可升級的系統?即使升級中途斷電了,也要保證程序至少還可以運行老的版本?

  • 這些都需要我們了解一下根文件系統。

  • 先了解一下init進程:它要讀取配置文件,根據配置文件啟動各個APP。

  • 了解了init進程,你就了解了根文件系統的組成,就可以隨心所欲裁剪系統,為你的項目製作出最精簡的系統。

  • 第3章 學習方法

    3.1 先不要打破砂鍋問到底

  • 嵌入式涉及的東西太多太雜了,如果心裡沒有主線,碰到什麼都要去研究個透徹,最終反而忘記自己要學什麼了。

  • 嵌入式涉及硬體知識、軟體知識,軟體里涉及匯編、ARM架構、C語言、Makefile、Shell;又分為bootloader、內核、驅動、基本的APP、GUI。

  • 比如我們會用到Makefile,了解它的基本規則,會用我們提供的Makefile就可以。

  • 不需要深入研究那些make函數,因為在工作中都有現成的Makefile給你使用,不需要自己去編寫一套Makefile。何必花上好幾天去深入研究它呢?

  • 比如我們會用到bootloader,難道又要花上幾個月來深入研究u-boot嗎?工作中基本不需要改u-boot,會用那幾個命令就可以。

  • 甚至有些學員先去買本shell的書來學習shell命令,何必?我們在視頻中用到什麼命令,你不懂時再去網路一下這些命令就可以了。

  • 不要脫離初學者的主線:應用基礎、驅動基礎。有了這2個基礎後,你想深入研究某部分時,再去花時間吧。

  • 3.2 思路要清晰,不怕抄代碼

  • 視頻里的代碼,請你一定要自己去寫一次、寫多次。為什麼我現在寫驅動那麼熟?我2009年在華清遠見上課時,

  • 每次上課我都要給學生寫一次那些驅動,十幾次下來閉著眼睛都知道內核的套路了。

  • 記不住那些函數?我也記不住,我都是去參考同類的驅動程序,這又不是閉卷考試。

  • 但是要理清楚思路,你寫這個程序要完成什麼功能、怎麼實現這些功能?這個要弄清楚。

  • 有了思路後再寫代碼,不知道怎麼寫?沒關系,看看視頻,看看示例,然後關閉視頻看看能否自己寫出來。

  • 3.3 對自己的方向很了解,我只能帶你到這里了

  • 我的專長是操作系統,是快速地帶領大家掌握一些項目開發的基礎知識。

  • 如果你決定深入研究某方面時,我並不能帶你多久。你要去看源碼,去看這方面的專業書籍。

  • 比如想深入鑽研內核的內存管理時,它有頁表映射(你需要閱讀ARM架構的手冊)、SLAB分配器、vmalloc/malloc實現、mmap實現、缺頁中斷、父進程子進程之間的頁面管理等等,內容非常多。有時候連書籍都沒有,你需要直接啃代碼。

  • 當你想從事某個行業時,就需要深入研究行業相關的知識。

  • 比如CAN匯流排,它可以寫成一本書:CAN協議、CAN報文、Socket CAN、車身網路拓撲結構,CAN應用報文,CAN網路管理報文,CAN診斷報文。

  • 想做物聯網網關,需要深入研究MQTT,MQTT協議相對簡單,但是MQTT英文原版協議有130多頁,中文版有近100頁,是一本小書了。

  • 每個行業都有自己的業務邏輯,在掌握基本的編程能力之一,你需要結合具體的業務去深入學習。

  • 3. 嵌入式開發需要學什麼

    嵌入式開發要學哪些?在這個技術瞬息萬變的年代,嵌入式技術毫無疑問也得緊跟技術發展,這對於初涉行業的新人而言,擺在面前的問題很明顯,嵌入式開發我得學習哪些技術點才能跟隨企業的腳步呢?我願意談談我接近十年對嵌入式開發的看法。
    我的職業生涯起步於嵌入式開發,那時候在日企從事汽車的嵌入式開發,最後也曾當過三年的講師。不過現在依然混跡於嵌入式底層,以及android底層研發。可能還是覺得研發才是我的最愛。那麼針對嵌入式開發要學哪些我簡單的說一下,僅代表當前主流觀點。
    嵌入式開發作為新人,第一步C語言,有很多人自認為自己C語言很厲害,但是實際上一個從事嵌入式開發的老人,至少需要3-5年你才敢對C語言說精通,特別涉及到的常用的指針、數組、數據類型、運算符與表達式、控制語句時?你真的都懂么?這些是學習嵌入式最基礎的知識。
    第二步,有了這些代碼的基礎你才能能根據需求寫程序,也就是常說的應用層,應用層是相對簡單的。要有理解和編碼調試的能力,如系統編程、標準的I/O,文件I/O,庫的製作等等。一般而言這種應用層開發有1-2個月的時間都能學會。剩下的就是大量的編碼來提升自己的經驗。但只會這些也能找到工作,但我相信你看完下面的發現那絕對不是你的夢想!
    第三步,更高級的內容也是最難的內容,前兩步更多是讓你會根據需求編碼,但是如何能讓你的程序能在硬體平台上運行,這才是真正的難題。所以每當再進一步的話,我們會發現我們什麼有很多的東西都運行的是Linux系統,可是他們和我的PC運行的Linux有什麼區別呢,為什麼我電腦要用風扇而手機不用風扇呢,我們打開網頁查找手機的詳細參數的時候,會看到Cortex-A15
    、四核
    、ARM等等字眼,什麼是ARM,什麼是Cortex-A15,這需要進一步的了解。
    了解完ARM之後,就需要利用開發板了。這時操作系統的移植又成了一個比較重要的內容了,什麼是bootloader,什麼是kernel,什麼是rootfs等等……。
    花了很長時間系統做好了,發現板子上很多的什麼不能用,怎麼辦呢?這時我們需要寫一些驅動來驅動這些設備,這時我們需要知道,什麼是字元設備驅動、塊設備驅動、網路設備驅動,為了更好的寫驅動我們需要了解更多的硬體相關的東西,我們需要看懂晶元手冊,我們需要看懂原理圖,只有我們懂我們的設備,才能更好的驅動它。等等,這里就列舉更多的內容了,因為還有很多。
    所以對於嵌入式開發者來說,他們都經歷了學習的痛苦。有句話說的好,不經歷風雨怎麼見彩虹。對於學習嵌入式我比較不贊成自學,他不同於一般的應用層開發。你會面臨很多問題。問網路?太慢了!來機構學習雖然花了一部分錢,從時間成本和效率上來講,無疑還是比較值得的。

    4. 學習嵌入式開發要學習哪些知識

    首先需要C語言基礎,數據結構,linux命令,網路編程,操作系統,資料庫,移植內核,驅動編程,各種匯流排知識,通信協議,硬體和軟體知識,上層和底層的軟體知識都需要有所了解,就算你不做具體的編程,也要知道一點工作原理,因為嵌入式開發需要考慮的是整個程序

    5. 嵌入式技術需要學習什麼

    嵌入式系統軟體工程 方法實用技術及應用,免費下載

    鏈接:https://pan..com/s/10No3IypKyLg01bV4T9b22w

    提取碼:56st

    《嵌入式系統軟體工程:基礎知識、方法和應用》系統地闡述嵌入式系統軟體工程所涉及的過程、方法、內容,以及在典型工業領域中的應用。全書內容分為兩大部分:第一部分介紹嵌入式系統軟體工程方法論,主要包括嵌入式軟體的開發過程(需求工程、軟體和系統體系結構、編程和測試等內容),開發和測試中所採用的標准,與安全性相關的軟體系統的准入,以及嵌入式軟體所涉及的法律問題:第二部分介紹嵌入式系統軟體在汽車領域、軌道交通領域、航天領域、醫療器械、工業自動化、通信系統中的應用,在每個應用領域重點介紹具體應用領域的一些特定需求、技術和限制條件,以及它們對於嵌入式系統軟體開發過程的影響。

    6. 學習嵌入式,需要具備什麼基本的知識

    1.掌握C語言高級編程。無論是對嵌入式軟體還是硬體開發編程,都是不可缺少的一部分。因此不管您是自尋、還是拜師我堅信這都是他們教您的第一步。
    2. 要了解嵌入式Linux操作系統。你得首先對這個系統有一定的認識,就好比你想蓋房子、你得需要水泥、磚頭、鋼筋。那麼嵌入式Linux系統同樣如此。這個比喻也許很粗糙,但容易理解。
    3.了解Linux或者wince下的編程。
    4.具有單機片或者ARM或者MIPS等相關基礎。
    5.其他知識的擴充。我們還可以通過閱讀一些優秀的代碼,了解UBOOT的源代碼,或者是學習下linux的源代碼等等。
    以上就是學嵌入式需要的一些基礎,如果你基礎不牢固,也不要擔心。一點一點的學習嘛。華清遠見星創客,是面向中高端嵌入式工程師的培訓,對基礎有一點的限制,因為是長期就業課程體系,不管你多厲害,還是多麼小白,但都要從基礎學起。這樣有基石才能對後續的課程保證不掉隊。

    7. 嵌入式學習內容有哪些嵌入式要學什麼

    大致分為三個階段:基礎篇、進階篇、大咖篇。

    入門嵌入式工程師

    此階段主要是前期的入門過程,主要針對入行沒多久的新人。其實成功沒有捷徑,所以打好基礎才是關鍵。嵌入式開發要學什麼主要包含以下4個方面的內容:

    1.電路知識 首先你要學習電路、模電、數電,認識電阻、電容、三極體,基礎器件要知道,放大電路、集成運放、時序電路基本電路能看懂,不然看電路圖一定是雲里霧里,也就無法進行後續的工作。硬體產品的設計實現,包括器件選型、原理圖和PCB設計、電路調試,都需要過硬的電路基礎。

    2.C語言

    C語言是嵌入式開發中最重要的編程語言,要對這門語言有深入的理解,畢竟不僅僅要會寫程序,看懂他人程序也很重要。最基本的數據類型、數組、指針、結構體,鏈表、文件操作等都要會,掌握基本語法和語句,不然你要能區分指針數組與數組指針嗎?

    3.單片機 單片機入門相對簡單,通過單片機的學習可以熟悉單片機的硬體結構,包括I/O口、AD轉換、通信(串口、並口、I2C、CAN、USB、乙太網、ZigBee技術等)、顯示(LED、LCD等)、控制(PWM等控制技術)、數據處理(圖形、圖像、語音、視頻等的處理或識別)等,學好單片機可以為採用嵌入式系統奠定良好的基礎。

    4Linux基礎

    Linux的源碼和架構都是開放的,在嵌入式系統中應用尤為廣泛,學習Linux對於系統的開發會有很大的幫助。詳細了解Linux下的目錄結構、基本命令、編輯器VI、編譯器GCC、調試器GDB和 Make 項目管理工具,Shell Makefile腳本編寫等知識,以及嵌入式開發環境的搭建。

    中級嵌入式工程師

    經過第一個階段的學習,你已經可以進行嵌入式開發工作了,但是要進階依舊還有很多知識要學,而這個階段也將是第一個分水嶺,使得優秀的嵌入式工程師得以脫穎而出。此階段雖然只有三項,但涉及的知識非常廣,要想學好需要花費大量的精力。

    1.Linux編程

    系統編程可以直接跟內核及核心系統程序庫對話,深入了解Linux內核。掌握Linux系統編程主要提升對Linux應用開發的理解和代碼調試的能力。由於網路應用開發越來越廣泛,通過Linux網路發展、TCP/IP協議、socket編程、TCP網路編程、UDP網路編程、Web編程開發等方面入手,可以全面了解Linux網路應用程序開發。

    2數據結構與演算法 數據結構及演算法在嵌入式底層驅動、通信協議及各種引擎開發中得到了廣泛的應用,語言編譯要使用棧、散列表以及語法樹;操作系統中用隊列、存儲管理表及目錄樹等;資料庫系統運用線型表、多鏈表及索引表進行數據管理等等,對其掌握的好壞直接影響程序的效率、簡潔及健壯性。

    3.QT、DSP、FPGA

    Linux沒有自己界面,學習QT編程可以創建藝術級的圖形用戶界面所需的所有功能,從而更好的實現人機交互控制。而如今用戶對於圖形圖像的要求也越來越高,這就需要DSP、FPGA技術來設計開發更好的嵌入式視覺系統。

    高級嵌入式工程師

    學習了前兩個階段的知識,你已經可以勝任大部分嵌入式工作了,但是距離大咖仍有一定的差距,其實已經到了第二個分水嶺。這部分更多涉及系統層面,沒有全方位的知識將會很難下手。

    1操作系統平台開發 除了Linux外,嵌入式操作系統還有ARM、WINCE、uC/OS II、Vxworks、uClinux等,不同的系統有著不同的使用環境,你需要學習掌握系統的各個模塊,為底層平台搭建做好准備。熟悉各個操作系統的特點以及系統的內核移植,確保操作系統能在某個微處理器或微控制器上運行。隨著手機智能硬體的快速興起,Android操作系統開發也越來越重要。

    2驅動開發 驅動程序設計是嵌入式Linux開發工作中非常重要的一部分。不僅要熟悉Linux的內核機制、驅動程序與用戶級應用程序的介面,掌握系統對設備的並發操作。還要具備ARM硬體介面的基礎知識,熟悉ARM Cortex處理器各資源、掌握Linux設備驅動原理框架,以及工程中常見Linux高級字元設備、塊設備、網路設備、USB設備的驅動開發。

    當你到達這個位置的時候,可以說你已經是一個人生贏家了,而真正的學習過程如同一場漫長的修行,在這個過程中,必定有各種各樣的困難。當然了,嵌入式工作中更多的需要實踐以及經驗的積累,相信守得雲開見月明,你也可成為一名優秀的嵌入式工程師。需要嵌入式培訓,可以來到華清的星創客精英訓練營,專門培訓中高端嵌入式工程師。