一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

嵌入式開(kāi)發(fā)之Linux系統(tǒng)中C程序的編譯與調(diào)試

倩倩 ? 來(lái)源:樂(lè)創(chuàng)iot ? 2020-04-21 11:31 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

我主要是做工業(yè)自動(dòng)化方面和物聯(lián)網(wǎng)方面的。了解熟悉工業(yè)自動(dòng)化領(lǐng)域的,也開(kāi)發(fā)過(guò)物聯(lián)網(wǎng)相關(guān)的產(chǎn)品。我的初衷是做工業(yè)物聯(lián)網(wǎng)的,但這個(gè)系統(tǒng)太過(guò)于龐大。所以就先做小的系統(tǒng),例如構(gòu)建一整套智能家居系統(tǒng),從硬件到軟件全系列。下面就開(kāi)始這套智能家居系統(tǒng)是如何在物聯(lián)網(wǎng)基礎(chǔ)上構(gòu)建。在這里你可以0開(kāi)始,然后到1質(zhì)變,僅僅需要一起跟我學(xué)物聯(lián)網(wǎng)系列的開(kāi)發(fā)筆記的文章。

第一節(jié)物聯(lián)網(wǎng)開(kāi)發(fā)筆記——嵌入式開(kāi)發(fā)Linux系統(tǒng)環(huán)境搭建搭建主要講解了在Windows系統(tǒng)下,用虛擬機(jī)的方法搭建環(huán)境。第二節(jié)物聯(lián)網(wǎng)開(kāi)發(fā)筆記——嵌入式開(kāi)發(fā)之Linux系統(tǒng)中文件和目錄相關(guān)命令主要講解Linux系統(tǒng)如何創(chuàng)建文件刪除修改等相關(guān)命令。第三節(jié)物聯(lián)網(wǎng)開(kāi)發(fā)筆記——嵌入式開(kāi)發(fā)之Linux系統(tǒng)Vi編輯器的使用主要講解Vi編輯器的使用。嵌入式開(kāi)發(fā)學(xué)習(xí)C語(yǔ)言打下基礎(chǔ)。本節(jié)介紹《Linux系統(tǒng)中C程序的編譯與調(diào)試》。

1 首先了解一下什么是程序設(shè)計(jì)?

1)計(jì)算機(jī)基本結(jié)構(gòu)

馮·諾依曼結(jié)構(gòu)也稱普林斯頓結(jié)構(gòu),是一種將程序指令存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器合并在一起的存儲(chǔ)器結(jié)構(gòu)。程序指令存儲(chǔ)地址和數(shù)據(jù)存儲(chǔ)地址指向同一個(gè)存儲(chǔ)器的不同物理位置,因此程序指令和數(shù)據(jù)的寬度相同,如英特爾公司的8086中央處理器的程序指令和數(shù)據(jù)都是16位寬。

計(jì)算機(jī)由以下圖中5個(gè)部分組成;存儲(chǔ)程序的思想是:系統(tǒng)的運(yùn)行過(guò)程就是按照一定的順序不斷執(zhí)行存儲(chǔ)器中程序指令的過(guò)程。

馮·諾依曼結(jié)構(gòu)

處理過(guò)程

注:MMU是Memory Management Unit的縮寫(xiě),中文名是內(nèi)存管理單元,它是中央處理器(CPU)中用來(lái)管理虛擬存儲(chǔ)器、物理存儲(chǔ)器的控制線路,同時(shí)也負(fù)責(zé)虛擬地址映射為物理地址,以及提供硬件機(jī)制的內(nèi)存訪問(wèn)授權(quán),多用戶多進(jìn)程操作系統(tǒng)。

2)什么是程序

廣義上講,為了實(shí)現(xiàn)某個(gè)特定的目標(biāo),而預(yù)先設(shè)計(jì)的一組可操作的工作步驟,稱之為程序。程序就是系統(tǒng)可以識(shí)別得一組有序的指令。存儲(chǔ)在磁盤(pán)上,被加載到內(nèi)存中執(zhí)行。

3)程序設(shè)計(jì)語(yǔ)言的發(fā)展

A機(jī)器語(yǔ)言

機(jī)器語(yǔ)言(machine language)是一種指令集的體系。這種指令集,稱機(jī)器碼(machine code),是電腦的CPU可直接解讀的數(shù)據(jù)。機(jī)器碼有時(shí)也被稱為原生碼(Native Code),這個(gè)名詞比較強(qiáng)調(diào)某種編程語(yǔ)言或庫(kù),它與運(yùn)行平臺(tái)相關(guān)的部份。

雖然大多數(shù)的語(yǔ)言可以既可被編譯(Compiled)又可被解譯(interpreted),但大多數(shù)只在一種情況下能夠良好運(yùn)行。在一些編程系統(tǒng)中,程序要經(jīng)過(guò)幾個(gè)階段的編譯,一般而言,后階段的編譯往往更接近機(jī)器語(yǔ)言。這種常用的使用技巧最早在1960年代末用于BCPL,編譯程序先編譯一個(gè)叫做“0代碼”的轉(zhuǎn)換程序(representation),然后再使用虛擬器轉(zhuǎn)換到可以運(yùn)行于機(jī)器上的真實(shí)代碼。這種成功的技巧之后又用于Pascal和P-code,以及Smalltalk和二進(jìn)制碼,雖然在很多時(shí)候,中間過(guò)渡的代碼往往是解譯,而不是編譯的。

B匯編語(yǔ)言

匯編語(yǔ)言(assembly language)是一種用于電子計(jì)算機(jī)、微處理器、微控制器或其他可編程器件的低級(jí)語(yǔ)言,亦稱為符號(hào)語(yǔ)言。在匯編語(yǔ)言中,用助記符(Mnemonics)代替機(jī)器指令的操作碼,用地址符號(hào)(Symbol)或標(biāo)號(hào)(Label)代替指令或操作數(shù)的地址。在不同的設(shè)備中,匯編語(yǔ)言對(duì)應(yīng)著不同的機(jī)器語(yǔ)言指令集,通過(guò)匯編過(guò)程轉(zhuǎn)換成機(jī)器指令。普遍地說(shuō),特定的匯編語(yǔ)言和特定的機(jī)器語(yǔ)言指令集是一一對(duì)應(yīng)的不同平臺(tái)之間不可直接移植。

許多匯編程序?yàn)槌绦蜷_(kāi)發(fā)、匯編控制、輔助調(diào)試提供了額外的支持機(jī)制。有的匯編語(yǔ)言編程工具經(jīng)常會(huì)提供宏,它們也被稱為宏匯編器。

匯編語(yǔ)言不像其他大多數(shù)的程序設(shè)計(jì)語(yǔ)言一樣被廣泛用于程序設(shè)計(jì)。在今天的實(shí)際應(yīng)用中,它通常被應(yīng)用在底層,硬件操作和高要求的程序優(yōu)化的場(chǎng)合。驅(qū)動(dòng)程序、嵌入式操作系統(tǒng)和實(shí)時(shí)運(yùn)行程序都需要匯編語(yǔ)言。

C高級(jí)語(yǔ)言

高級(jí)語(yǔ)言并不是特指的某一種具體的語(yǔ)言,而是包括很多編程語(yǔ)言,如流行的java,c,c++,C#,pascal,python,lisp,prolog,F(xiàn)oxPro,易語(yǔ)言,中文版的C語(yǔ)言習(xí)語(yǔ)言等等,這些語(yǔ)言的語(yǔ)法、命令格式都不相同。

低級(jí)語(yǔ)言分機(jī)器語(yǔ)言(二進(jìn)制語(yǔ)言)和匯編語(yǔ)言(符號(hào)語(yǔ)言),這兩種語(yǔ)言都是面向機(jī)器的語(yǔ)言,和具體機(jī)器的指令系統(tǒng)密切相關(guān)。機(jī)器語(yǔ)言用指令代碼編寫(xiě)程序,而符號(hào)語(yǔ)言用指令助記符來(lái)編寫(xiě)程序。

高級(jí)語(yǔ)言與計(jì)算機(jī)的硬件結(jié)構(gòu)及指令系統(tǒng)無(wú)關(guān),它有更強(qiáng)的表達(dá)能力,可方便地表示數(shù)據(jù)的運(yùn)算和程序的控制結(jié)構(gòu),能更好的描述各種算法,而且容易學(xué)習(xí)掌握。但高級(jí)語(yǔ)言編譯生成的程序代碼一般比用匯編程序語(yǔ)言設(shè)計(jì)的程序代碼要長(zhǎng),執(zhí)行的速度也慢。所以匯編語(yǔ)言適合編寫(xiě)一些對(duì)速度和代碼長(zhǎng)度要求高的程序和直接控制硬件的程序。高級(jí)語(yǔ)言、匯編語(yǔ)言和機(jī)器語(yǔ)言都是用于編寫(xiě)計(jì)算機(jī)程序的語(yǔ)言。

高級(jí)語(yǔ)言程序“看不見(jiàn)”機(jī)器的硬件結(jié)構(gòu),不能用于編寫(xiě)直接訪問(wèn)機(jī)器硬件資源的系統(tǒng)軟件或設(shè)備控制軟件。為此,一些高級(jí)語(yǔ)言提供了與匯編語(yǔ)言之間的調(diào)用接口。用匯編語(yǔ)言編寫(xiě)的程序,可作為高級(jí)語(yǔ)言的一個(gè)外部過(guò)程或函數(shù),利用堆棧來(lái)傳遞參數(shù)或參數(shù)的地址。

4)程序設(shè)計(jì)步驟

在Linux系統(tǒng)C程序的設(shè)計(jì)步驟如下:

C程序的設(shè)計(jì)步驟

2 計(jì)算機(jī)數(shù)據(jù)表示

學(xué)習(xí)編程,從數(shù)據(jù)表示開(kāi)始。表示,存儲(chǔ)等。

送入計(jì)算機(jī)的數(shù)值、字母、符號(hào)等信息必須轉(zhuǎn)換成0,1組合的數(shù)據(jù)形式才能被計(jì)算機(jī)識(shí)別。能夠進(jìn)行算術(shù)運(yùn)算得到明確數(shù)值概念的信息成為計(jì)算機(jī)數(shù)值數(shù)據(jù),其余的信息成為非數(shù)值數(shù)據(jù)。

1)數(shù)值數(shù)據(jù)的表示

包括十進(jìn)制、二進(jìn)制、十六進(jìn)制和八進(jìn)制。

進(jìn)制轉(zhuǎn)換是人們利用符號(hào)來(lái)計(jì)數(shù)的方法。進(jìn)制轉(zhuǎn)換由一組數(shù)碼符號(hào)和兩個(gè)基本因素“基數(shù)”與“位權(quán)”構(gòu)成。 基數(shù)是指,進(jìn)位計(jì)數(shù)制中所采用的數(shù)碼(數(shù)制中用來(lái)表示“量”的符號(hào))的個(gè)數(shù)。 位權(quán)是指,進(jìn)位制中每一固定位置對(duì)應(yīng)的單位值。

在進(jìn)行進(jìn)制轉(zhuǎn)換時(shí)有一基本原則:轉(zhuǎn)換后表達(dá)的“量”的多少不能發(fā)生改變。二進(jìn)制中的111個(gè)蘋(píng)果和十進(jìn)制中的7個(gè)蘋(píng)果是一樣多的。

十進(jìn)制中的數(shù)位排列是這樣的…… 萬(wàn) 千 百 十 個(gè) 十分 百分 千分……

R進(jìn)制中的數(shù)位排列是這樣的……R^4 R^3R^2 R^1 R^0 R^-1 R^-2 R^-3……

十進(jìn)制---》二進(jìn)制

對(duì)于整數(shù)部分,用被除數(shù)反復(fù)除以2,除第一次外,每次除以2均取前一次商的整數(shù)部分作被除數(shù)并依次記下每次的余數(shù)。另外,所得到的商的最后一位余數(shù)是所求二進(jìn)制數(shù)的最高位。

對(duì)于小數(shù)部分,采用連續(xù)乘以基數(shù)2,并依次取出的整數(shù)部分,直至結(jié)果的小數(shù)部分為0為止。故該法稱“乘基取整法”

附:原碼 反碼 補(bǔ)碼

符號(hào)位正數(shù)為0,負(fù)數(shù)為1。

正數(shù):5 原碼:00000101 反碼:00000101 補(bǔ)碼:00000101

負(fù)數(shù):-5 原碼:10000101 反碼:11111010 (原碼除符號(hào)為取反) 補(bǔ)碼:11111011 (反碼加1)

2)非數(shù)值數(shù)據(jù)的表示

非數(shù)值數(shù)據(jù)包括文字、符號(hào)、圖像、語(yǔ)言和邏輯信息等,也都是以0,1形式存在的。字符數(shù)據(jù)在機(jī)器內(nèi)也變變換成二進(jìn)制編碼形式。普遍采用ASCII碼。

可以用命令:man ASCII 查看ASCII信息。

man ASCII

3 程序編譯與調(diào)試

1)gcc編譯器

gcc(GNU Compiler)是GNU推出的多平臺(tái)編譯器??蓪/C++源程序編譯連接成可執(zhí)行文件,支持一下后綴:

.c c語(yǔ)言源代碼

.h h程序所包含的頭文件

.i i已經(jīng)預(yù)處理過(guò)的C源代碼文件

.s s匯編語(yǔ)言源代碼

.o o編譯后的目標(biāo)文件

操作命令:

gcc -o hello hello.c

-o 輸出可執(zhí)行文件

-c 只要編譯器輸出目標(biāo)代碼(.o文件),而不必輸出可執(zhí)行文件

-g 用于調(diào)試

。/hello 查看輸出結(jié)果

案例:編譯上一節(jié)《《嵌入式開(kāi)發(fā)之Linux系統(tǒng)中Vi編輯器的使用》》中test.c

結(jié)果

Ctrl +l 清屏

換種方式

換種方式結(jié)果

2)程序調(diào)試

利用__FILE__,__LINE__,__FUNCTION__實(shí)現(xiàn)代碼跟蹤調(diào)試。

修改test.c代碼

修改test.c代碼

繼續(xù)修改test.c代碼

繼續(xù)修改test.c代碼

繼續(xù)修改test.c代碼

一步一步修改,調(diào)試到不報(bào)錯(cuò)為止。

3)C語(yǔ)言基礎(chǔ)

一個(gè)程序應(yīng)該包含兩個(gè)部分內(nèi)容:

對(duì)數(shù)據(jù)的描述:在程序中要指定數(shù)據(jù)的類型和數(shù)據(jù)的組織形式,即數(shù)據(jù)結(jié)構(gòu)。

對(duì)操作的描述:即操作步驟,也就是算法。

在PC上編寫(xiě)的C程序,如何在AMR上運(yùn)行?

gcc運(yùn)行版本不一樣,編譯C結(jié)果一樣。選擇合適gcc編譯器版本即可。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

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

    : 單片機(jī)嵌入式開(kāi)發(fā)環(huán)境相對(duì)簡(jiǎn)單,通常使用C語(yǔ)言或匯編語(yǔ)言進(jìn)行編程,開(kāi)發(fā)工具包括Keil、IAR等。 Linux
    發(fā)表于 06-20 09:46

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

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

    嵌入式開(kāi)發(fā):高門(mén)檻的系統(tǒng)性工程與 996 的行業(yè)困局

    嵌入式開(kāi)發(fā)的門(mén)檻,往往被培訓(xùn)機(jī)構(gòu)和表象所掩蓋。許多人誤以為 “用 C 語(yǔ)言寫(xiě)個(gè)跑在 ARM 上的程序” 就是嵌入式,實(shí)則連皮毛都未觸及。真正的嵌入式
    的頭像 發(fā)表于 04-09 11:06 ?336次閱讀
    <b class='flag-5'>嵌入式開(kāi)發(fā)</b>:高門(mén)檻的<b class='flag-5'>系統(tǒng)</b>性工程與 996 的行業(yè)困局

    Python在嵌入式系統(tǒng)的應(yīng)用場(chǎng)景

    你想把你的職業(yè)生涯提升到一個(gè)新的水平?Python在嵌入式系統(tǒng)中正在成為一股不可缺少的新力量。盡管傳統(tǒng)上嵌入式開(kāi)發(fā)更多地依賴于CC++語(yǔ)言
    的頭像 發(fā)表于 03-19 14:10 ?694次閱讀

    如何成為嵌入式開(kāi)發(fā)工程師?

    如何成為嵌入式開(kāi)發(fā)工程師? 成為嵌入式開(kāi)發(fā)工程師通常需要掌握一系列技能和知識(shí),并且在實(shí)踐不斷積累經(jīng)驗(yàn)。以下是一些基本步驟和建議: 1. 基礎(chǔ)教育:- 獲取電子工程、計(jì)算機(jī)科學(xué)或相關(guān)領(lǐng)域的學(xué)位
    發(fā)表于 02-19 10:39

    盤(pán)點(diǎn)工程師常用的嵌入式開(kāi)發(fā)工具

    嵌入式開(kāi)發(fā)涉及硬件與軟件的緊密結(jié)合,開(kāi)發(fā)工具的選擇對(duì)效率和質(zhì)量至關(guān)重要。以下是嵌入式開(kāi)發(fā)中常用的工具分類及代表性工具,涵蓋開(kāi)發(fā)全流程: 1. 集成開(kāi)
    的頭像 發(fā)表于 02-07 10:06 ?1997次閱讀

    嵌入式開(kāi)發(fā)必備-RK3562演示Linux常用系統(tǒng)查詢命令(上)觸覺(jué)智能出品

    實(shí)用干貨!嵌入式開(kāi)發(fā)學(xué)習(xí)必備-RK3562演示Linux常用系統(tǒng)查詢命令(上)關(guān)注觸覺(jué)智能持續(xù)為大家?guī)?lái)更多嵌入式開(kāi)發(fā)內(nèi)容
    的頭像 發(fā)表于 12-31 10:51 ?117次閱讀
    <b class='flag-5'>嵌入式開(kāi)發(fā)</b>必備-RK3562演示<b class='flag-5'>Linux</b>常用<b class='flag-5'>系統(tǒng)</b>查詢命令(上)觸覺(jué)智能出品

    Made with KiCad(九十四):M5Pi Linux嵌入式開(kāi)發(fā)

    “ 波哥大作,必須優(yōu)先安排!M5Pi 是一款開(kāi)源 Linux 嵌入式開(kāi)發(fā)板,使用全志 F1C200s CPU,擁有漂亮的外殼?!?/div>
    的頭像 發(fā)表于 12-25 14:53 ?720次閱讀
    Made with KiCad(九十四):M5Pi <b class='flag-5'>Linux</b><b class='flag-5'>嵌入式開(kāi)發(fā)</b>板

    如何使用 RISC-V 進(jìn)行嵌入式開(kāi)發(fā)

    RISC-V是一種開(kāi)源的指令集架構(gòu)(ISA),它允許任何人設(shè)計(jì)、制造和銷售基于RISC-V的處理器,這為嵌入式開(kāi)發(fā)提供了極大的靈活性和創(chuàng)新空間。以下是使用RISC-V進(jìn)行嵌入式開(kāi)發(fā)的基本步驟: 一
    的頭像 發(fā)表于 12-11 17:32 ?1919次閱讀

    零基礎(chǔ)嵌入式開(kāi)發(fā)學(xué)習(xí)路線

    Linux基本操作 什么是Linux?為什么要學(xué)Linux?Linux是一個(gè)操作系統(tǒng),類似于平常使用的Windows
    發(fā)表于 10-25 15:55

    嵌入式開(kāi)發(fā)常用軟件有哪些?

    用于編寫(xiě)、編譯調(diào)試嵌入式系統(tǒng)軟件。它提供了一個(gè)集成的開(kāi)發(fā)環(huán)境(IDE),包括代碼編輯器、編譯
    發(fā)表于 09-09 15:22

    嵌入式linux開(kāi)發(fā)的基本步驟有哪些?

    嵌入式Linux開(kāi)發(fā)是一個(gè)復(fù)雜的過(guò)程,涉及到硬件選擇、操作系統(tǒng)移植、驅(qū)動(dòng)開(kāi)發(fā)、應(yīng)用程序
    的頭像 發(fā)表于 09-02 09:11 ?1225次閱讀

    嵌入式linux開(kāi)發(fā)板怎么操作

    嵌入式Linux開(kāi)發(fā)板是一種基于Linux操作系統(tǒng)嵌入式
    的頭像 發(fā)表于 09-02 09:09 ?789次閱讀

    嵌入式linux開(kāi)發(fā)板芯片的工作原理

    嵌入式Linux開(kāi)發(fā)板是一種基于Linux操作系統(tǒng)嵌入式
    的頭像 發(fā)表于 09-02 09:07 ?810次閱讀

    AWFlow:內(nèi)置豐富的功能節(jié)點(diǎn),簡(jiǎn)化嵌入式開(kāi)發(fā)流程

    AWFlow突破傳統(tǒng)C語(yǔ)言限制的嵌入式開(kāi)發(fā)框架,通過(guò)封裝硬件驅(qū)動(dòng)和系統(tǒng)平臺(tái),集成通用軟件功能與通信協(xié)議,助力開(kāi)發(fā)者專注于核心業(yè)務(wù),提升效率,縮短周期,迅速適應(yīng)市場(chǎng)變化。在傳統(tǒng)的
    的頭像 發(fā)表于 08-09 08:25 ?528次閱讀
    AWFlow:內(nèi)置豐富的功能節(jié)點(diǎn),簡(jiǎn)化<b class='flag-5'>嵌入式開(kāi)發(fā)</b>流程