91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

3天內(nèi)不再提示

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

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

掃碼添加小助手

加入工程師交流群

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

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

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

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

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

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

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

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

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

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

Linux文本編輯工具VI

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

GCC程序開發(fā)工具

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

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

Make工程管理工具

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

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

GDB調(diào)試工具

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

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

三、 基本學(xué)習(xí)函數(shù)

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

(1) 標準輸入/輸出類函數(shù) scanf printf putchar getchar putc getc puts ungetc等。(2) 字符處理及轉(zhuǎn)換函數(shù) isdigit isalpha sprint strncat stncpy strlen strchr strstr strrev memset memmove memcpy memcpy等。(3) 數(shù)學(xué)計算類函數(shù) div acos/asin pow exp log ceil abs floor fmod等(4) 數(shù)據(jù)結(jié)構(gòu)和算法類函數(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) 文件權(quán)限相關(guān)函數(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語言運行過程中所使用的內(nèi)存總體分為靜態(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)內(nèi)存管理是棧內(nèi)存從高地址向低地址分配,堆內(nèi)存從低地址向高地址分配,一般來說堆使用鏈表實現(xiàn),棧使用線性存儲方式。 在C語言程序中,棧空間是由編譯器管理的,在程序中可以體現(xiàn)??臻g使用的例子是參數(shù)的傳遞、返回值的使用以及自動變量空間。一般來說如果??臻g是從高地址向低地址增長的。

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

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

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

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

函數(shù)指針的使用

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

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

    關(guān)注

    5198

    文章

    20445

    瀏覽量

    333994
  • Linux
    +關(guān)注

    關(guān)注

    88

    文章

    11758

    瀏覽量

    219009

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

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

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

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    系統(tǒng)嵌入式的學(xué)習(xí)路線

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

    嵌入式應(yīng)掌握的幾種能力

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

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

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

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

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

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

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

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

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

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

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

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

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

    入行嵌入式應(yīng)該怎么準備?

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

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

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

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

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

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

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

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

    特定功能的計算機系統(tǒng),廣泛應(yīng)用于智能家居、工業(yè)控制、醫(yī)療設(shè)備、車載系統(tǒng)等領(lǐng)域。 2. 學(xué)習(xí)嵌入式開發(fā)的前置知識熟悉C語言編程掌握基本的數(shù)據(jù)結(jié)構(gòu)與算法了解數(shù)字電路與微控制器原理熟悉Linux
    發(fā)表于 05-15 09:29

    嵌入式適合自學(xué)嗎?

    構(gòu)、時鐘系統(tǒng)、電源管理、存儲映射等。 嵌入式必學(xué)技術(shù)↓↓↓ 1硬件與軟件的結(jié)合 2實時性要求與資源限制 3跨領(lǐng)域知識整合 4調(diào)試與測試困難 二)缺乏專業(yè)指導(dǎo) 1)容易走彎路:自學(xué)嵌入
    發(fā)表于 04-27 09:54

    嵌入式硬件雜談:推挽、開漏、高阻態(tài)、上拉電阻

    對于嵌入式硬件這個龐大的知識體系而言,太多離散的知識點很容易疏漏,因此對于這些容易忘記甚至不明白的知識點做成一個梳理,供大家參考以及學(xué)習(xí),本文主要針對推挽、開漏、高阻態(tài)、上拉電阻這些
    的頭像 發(fā)表于 04-17 19:31 ?2143次閱讀
    <b class='flag-5'>嵌入式</b>硬件雜談:推挽、開漏、高阻態(tài)、上拉電阻