日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

嵌入式Linux C的基本知識點詳解

Q4MP_gh_c472c21 ? 來源:未知 ? 作者:胡薇 ? 2018-10-15 09:20 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

嵌入式系統(tǒng)專業(yè)是綜合了計算機硬件技術、計算機軟件技術以及電子電路技術的一門綜合學科,所涉及的內涵和知識非常廣泛,包括:數(shù)字電路,模擬電路,計算機組成原理,單片機基礎,C語言基礎,操作系統(tǒng),數(shù)據(jù)結構,編譯原理,計算機控制,計算機網(wǎng)絡等知識。

在真正學習嵌入式開發(fā)之前,首先要打好基礎。其中最重要的是C語言基礎、數(shù)字電路、計算機組成原理三門課程。下面我們就來講下嵌入式Linux C的基本知識點。

一、 基本開發(fā)環(huán)境

Linux下C語言開發(fā)環(huán)境

使用工具:程序生成工具GCC、程序調試工具GDB、工程管理工具為make和Makefile。 開發(fā)流程:使用編輯工具編寫C語言源文件,然后編譯生成機器代碼為主的二進制可執(zhí)行程序。 編譯流程:C語言經(jīng)過編譯-匯編-鏈接,最終生成可執(zhí)行程序格式??蓤?zhí)行程序包含兩部分內容:程序頭和程序主體。

嵌入式C語言的開發(fā)環(huán)境

程序的生成一般使用的是從x86到目標機的編譯工具,程序的開發(fā)工具是運行于x86機器上的可執(zhí)行程序,而是用開發(fā)工具生成的目標是以目標機器代碼為實體的映像文件或者可執(zhí)行程序,這個工程稱為“交叉編譯“。

和普通Linux環(huán)境下開發(fā)相比,更需要掌握一些幾點:

* 庫函數(shù)和系統(tǒng)調用 * C語言高級應用* C語言在嵌入式中的特殊語法(大小端,內存對齊等)* 資源性能考慮(運行效率與存儲空間)

二、 基本開發(fā)工具

Linux文本編輯工具VI

主要這個掌握VI三種模式的切換:命令模式、文本輸入模式、和末行模式,以及VI編輯器的各種命令與操作。 學習VIM的使用,編輯vimrc文件,gedit ~./vimrc修改功能(比如顯示行數(shù)、顏色加亮等)。

GCC程序開發(fā)工具

GCC能完成從C、C++、Objective-C等源文件向運行在特定CPU硬件上的目標代碼的轉換。對于通用計算機,一般使用GCC生成x86的可執(zhí)行代碼;對于嵌入式開發(fā)系統(tǒng)使用交叉編譯的GCC,生成目標機可以運行的程序。

利用GCC/G++生成應用程序可以分為以下四步:(1) 預處理:生成.i文件(預處理器cpp) (2) 編譯:將預處理后的文件轉換為匯編語言,生成.s文件(編譯器gcc) (3) 匯編:由匯編代碼生成目標代碼,即機器代碼,生成.o文件(匯編器as) (4) 鏈接:由各個文件的目標代碼,生成可執(zhí)行程序(鏈接器ld) 這里涉及到另外一個知識點就是靜態(tài)鏈接庫和動態(tài)鏈接庫的生成。

Make工程管理工具

Makefile是一個決定怎樣編譯工程的文本文件,有一定的書寫規(guī)則。在工程更新的時候,使用GNU的make工具根據(jù)當前的Makefile對工程進行有選擇的編譯。

自動生成Makefile的工具有autoconf、automake。其他的類似工具比如cMake等。

GDB調試工具

在使用GDB之前,需要對源程序增加-g編譯選項,此時編譯出來的程序包含需要調試的信息,可以利用GDB進行調試。主要使用的命令是run(開始運行程序)、break(設置斷點)、next(執(zhí)行一行且不進入函數(shù))、step(進入函數(shù))、continue(繼續(xù)程序運行)。

調試分為本地GDB調試和遠程GDB調試,遠程GDB更適合嵌入式系統(tǒng)的調試手段,使用個目標機端的GDB服務器和主機端的GDB調試器完成調試工作。

三、 基本學習函數(shù)

C語言標準庫函數(shù)

(1) 標準輸入/輸出類函數(shù) scanf printf putchar getchar putc getc puts ungetc等。(2) 字符處理及轉換函數(shù) isdigit isalpha sprint strncat stncpy strlen strchr strstr strrev memset memmove memcpy memcpy等。(3) 數(shù)學計算類函數(shù) div acos/asin pow exp log ceil abs floor fmod等(4) 數(shù)據(jù)結構和算法類函數(shù) bsearch lfind lsearch qsort rand srand等(5) 文件I/O操作類函數(shù) fopen fclose fgetc fputs fseek fwrite ffush等(6) 時間日期類函數(shù) clock time gmttime mktime asctime 等(7) 錯誤處理及工具函數(shù) clearer feof perror errno assert setjmp longjmp等

Linux C中C語言的擴展庫函數(shù)

(1) 文件I/O操作函數(shù) open close read write lseek ioctl fcntl mmap dup create等(2) 文件權限相關函數(shù) access chown chmod utime umask link stat unlink等(3) 用戶操作函數(shù) getgid/setgid getegid/setegid geteuid/seteuid 等(4) 信號及進程類函數(shù) kill raise alarm signal getpid fork sleep exec _exit等

四、 C語言高級編程

C語言運行過程中所使用的內存總體分為靜態(tài)存儲區(qū)和動態(tài)存儲區(qū)兩種。

靜態(tài)存儲區(qū)

C語言程序中靜態(tài)數(shù)據(jù)存儲區(qū)分為三類:只讀存儲器(RO)、已初始化讀寫數(shù)據(jù)區(qū)(RW Data)、未初始化讀寫存儲器(BSS)。在程序運行初始化階段開辟,在運行過程中不會變化(大小和位置固定),程序退出時被系統(tǒng)回收。

動態(tài)存儲區(qū)

動態(tài)存儲區(qū)分為堆和棧兩類,在程序運行過程中動態(tài)分配(位置和大小動態(tài)變化),常見動態(tài)內存管理是棧內存從高地址向低地址分配,堆內存從低地址向高地址分配,一般來說堆使用鏈表實現(xiàn),棧使用線性存儲方式。 在C語言程序中,??臻g是由編譯器管理的,在程序中可以體現(xiàn)??臻g使用的例子是參數(shù)的傳遞、返回值的使用以及自動變量空間。一般來說如果棧空間是從高地址向低地址增長的。

參數(shù)入棧的順序是:后面的參數(shù)在高地址處、前面的參數(shù)在低地址處。

自動變量在??臻g,前面的變量放入棧的高地址,后面的自動變量放入棧的低地址。

在函數(shù)退出時函數(shù)棧上的內容將被釋放。因此,自動變量的地址不可以作為函數(shù)返回值

在C語言中,堆內存區(qū)域的分配和釋放是通過調用庫函數(shù)完成的,malloc、calloc、realloc、free4個庫函數(shù)實現(xiàn)堆內存的分配、釋放和管理。分配內存后要記得手動釋放,否則其資源是不會被系統(tǒng)回收的,會造成內存泄漏。同時指針被釋放后,指針應該被設置為NULL,避免野指針。 總的來說,棧內存是由編譯器分配和釋放,堆內存是由程序分配和釋放。

函數(shù)指針的使用

函數(shù)指針是一個指向函數(shù)的指針(本質上是一個代碼區(qū)的地址),而函數(shù)本身代表了算法,此時C語言的算法就可以通過指針的形式,像普通變量一樣被使用。函數(shù)指針可以作為一個結構體的成員,也可也作為一個參數(shù)傳遞給其他的函數(shù),同樣也可以作為函數(shù)的返回值。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 嵌入式
    +關注

    關注

    5210

    文章

    20680

    瀏覽量

    337410
  • Linux
    +關注

    關注

    88

    文章

    11822

    瀏覽量

    219605

原文標題:送給初學者:嵌入式Linux C入門大全

文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    如何在Zynq UltraScale+ MPSoC平臺上通過JTAG啟動嵌入式Linux鏡像

    在之前文章中,我們介紹了如何使用 XSCT 工具通過 JTAG 在 Zynq SoC 上啟動嵌入式 Linux 鏡像(從 JTAG 啟動 Zynq-7000 嵌入式 Linux:使用
    的頭像 發(fā)表于 01-13 11:45 ?5095次閱讀

    從小白到大牛:Linux嵌入式系統(tǒng)開發(fā)的完整指南

    從小白到大牛:Linux嵌入式系統(tǒng)開發(fā)的完整指南 一、小白入門:搭建 Linux 嵌入式開發(fā)的認知地基? 對于零基礎學習者,首先要打破 “嵌入式
    發(fā)表于 12-16 10:42

    系統(tǒng)嵌入式的學習路線

    知識太多,太雜,太廣,很多嵌入式初學者陷入嵌入式知識的海洋中,東學一,西學一,找不到學習的
    發(fā)表于 12-16 07:49

    嵌入式應掌握的幾種能力

    1. 編程語言 基本掌握嵌入式必備的編程語言。C語言為主,C++為輔。在資源有限的情況下,大多數(shù)嵌入式產(chǎn)品還是使用C語言為主的,特別是底層
    發(fā)表于 12-08 06:05

    CW32嵌入式軟件開發(fā)的必備知識

    的數(shù)據(jù)手冊及用戶手冊,查找所需外設工作原理。 4、 嵌入式操作系統(tǒng)(深入知識點) 掌握常用的嵌入式操作系統(tǒng),如μC/OS、FREERTOS等,了解其內核、進程管理、內存管理、設備管理和
    發(fā)表于 11-28 07:48

    嵌入式與FPGA的區(qū)別

    分為算法和控制,而算法的工資會比控制高,因為技術含量比控制高得多,但算法適合高數(shù)比較好的人學。 ?最后在了解下入行門檻? ?1、嵌入式系統(tǒng)的門檻比較低,不管是嵌入式linux還是純軟,開發(fā)語言遠遠
    發(fā)表于 11-20 07:12

    嵌入式開發(fā)的關鍵介紹

    嵌入式開發(fā)在現(xiàn)代科技中扮演著非常重要的角色。隨著物聯(lián)網(wǎng)的發(fā)展,嵌入式系統(tǒng)的需求也越來越大。嵌入式開發(fā)不僅需要開發(fā)人員具備深入的硬件知識和編程經(jīng)驗,還需要不斷學習新的技術和工具,以滿足不
    發(fā)表于 11-13 08:12

    嵌入式需要掌握哪些核心技能?

    嵌入式需要掌握哪些核心技能? 若想通過學習嵌入式技術提升就業(yè)競爭力,需重點掌握C語言、嵌入式硬件架構、RTOS/Linux開發(fā)、通信協(xié)議四
    發(fā)表于 10-21 16:25

    嵌入式達到什么水平才能就業(yè)?

    :包括GPIO、定時器、中斷、ADC 等外設的配置與調試,能實現(xiàn)如溫濕度采集、電機控制等功能掌握嵌入式 Linux 驅動開發(fā)基礎:能編寫簡單字符設備驅動,實現(xiàn)設備的初始化、讀寫操作,會用內核調試
    發(fā)表于 09-15 10:20

    盤點嵌入式就業(yè)所需要的技能有哪些?

    ,把握未來的職業(yè)機遇。 1.智能汽車行業(yè): - 熟悉嵌入式編程語言,如C/C++、Python等。 - 掌握嵌入式系統(tǒng)設計與開發(fā)流程,了解汽車電子控制系統(tǒng)的基本原理。 - 具備良好的
    發(fā)表于 08-11 15:43

    入行嵌入式應該怎么準備?

    知識: 一、C/C++編程C/C++是嵌入式系統(tǒng)開發(fā)中最常用的編程語言。熟練掌握
    發(fā)表于 08-06 10:34

    【「Yocto項目實戰(zhàn)教程:高效定制嵌入式Linux系統(tǒng)」閱讀體驗】+基礎概念學習理解

    。為了對珠峰更了解些,開始接觸 Linux 系統(tǒng)開發(fā),并逐漸認識到 Yocto 項目在定制嵌入式 Linux 系統(tǒng)方面的重要性。所以很想拜讀下此書。 二、書籍內容概述 基礎知識 書中首
    發(fā)表于 08-04 22:29

    Linux嵌入式和單片機嵌入式的區(qū)別?

    : 單片機嵌入式 :開發(fā)環(huán)境相對簡單,通常使用C語言或匯編語言進行編程,開發(fā)工具包括Keil、IAR等。 Linux嵌入式 :開發(fā)環(huán)境較為復雜,除了需要掌握
    發(fā)表于 06-20 09:46

    【書籍評測活動NO.61】Yocto項目實戰(zhàn)教程:高效定制嵌入式Linux系統(tǒng)

    新的浪潮,嵌入式 Linux 系統(tǒng)已廣泛應用于國產(chǎn)芯片、智能家居、工業(yè)控制、智能汽車等領域,并在 AIoT(人工智能物聯(lián)網(wǎng))、邊緣計算、智能醫(yī)療等方向發(fā)揮著關鍵作用。 然而,嵌入式 Linux
    發(fā)表于 05-21 10:00

    嵌入式開發(fā)入門指南:從零開始學習嵌入式

    特定功能的計算機系統(tǒng),廣泛應用于智能家居、工業(yè)控制、醫(yī)療設備、車載系統(tǒng)等領域。 2. 學習嵌入式開發(fā)的前置知識熟悉C語言編程掌握基本的數(shù)據(jù)結構與算法了解數(shù)字電路與微控制器原理熟悉Linux
    發(fā)表于 05-15 09:29
    汽车| 上思县| 绥德县| 岐山县| 罗定市| 内乡县| 句容市| 肃宁县| 驻马店市| 竹溪县| 许昌市| 宜昌市| 抚远县| 汕头市| 泸州市| 铜陵市| 哈尔滨市| 日照市| 公安县| 和田县| 卫辉市| 灵石县| 涿鹿县| 临汾市| 荔浦县| 庄河市| 景泰县| 刚察县| 探索| 安国市| 连城县| 莱西市| 威海市| 长泰县| 定结县| 合水县| 灵宝市| 称多县| 邵阳县| 香港| 色达县|