我主要是做工業(yè)自動化方面和物聯(lián)網(wǎng)方面的。了解熟悉工業(yè)自動化領(lǐng)域的,也開發(fā)過物聯(lián)網(wǎng)相關(guān)的產(chǎn)品。我的初衷是做工業(yè)物聯(lián)網(wǎng)的,但這個系統(tǒng)太過于龐大。所以就先做小的系統(tǒng),例如構(gòu)建一整套智能家居系統(tǒng),從硬件到軟件全系列。下面就開始這套智能家居系統(tǒng)是如何在物聯(lián)網(wǎng)基礎(chǔ)上構(gòu)建。在這里你可以0開始,然后到1質(zhì)變,僅僅需要一起跟我學(xué)物聯(lián)網(wǎng)系列的開發(fā)筆記的文章。
第一節(jié)物聯(lián)網(wǎng)開發(fā)筆記——嵌入式開發(fā)之Linux系統(tǒng)環(huán)境搭建搭建主要講解了在Windows系統(tǒng)下,用虛擬機的方法搭建環(huán)境。第二節(jié)物聯(lián)網(wǎng)開發(fā)筆記——嵌入式開發(fā)之Linux系統(tǒng)中文件和目錄相關(guān)命令主要講解Linux系統(tǒng)如何創(chuàng)建文件刪除修改等相關(guān)命令。第三節(jié)物聯(lián)網(wǎng)開發(fā)筆記——嵌入式開發(fā)之Linux系統(tǒng)Vi編輯器的使用主要講解Vi編輯器的使用。嵌入式開發(fā)學(xué)習(xí)C語言打下基礎(chǔ)。本節(jié)介紹《Linux系統(tǒng)中C程序的編譯與調(diào)試》。
1 首先了解一下什么是程序設(shè)計?
1)計算機基本結(jié)構(gòu)
馮·諾依曼結(jié)構(gòu)也稱普林斯頓結(jié)構(gòu),是一種將程序指令存儲器和數(shù)據(jù)存儲器合并在一起的存儲器結(jié)構(gòu)。程序指令存儲地址和數(shù)據(jù)存儲地址指向同一個存儲器的不同物理位置,因此程序指令和數(shù)據(jù)的寬度相同,如英特爾公司的8086中央處理器的程序指令和數(shù)據(jù)都是16位寬。
計算機由以下圖中5個部分組成;存儲程序的思想是:系統(tǒng)的運行過程就是按照一定的順序不斷執(zhí)行存儲器中程序指令的過程。
馮·諾依曼結(jié)構(gòu)
處理過程
注:MMU是Memory Management Unit的縮寫,中文名是內(nèi)存管理單元,它是中央處理器(CPU)中用來管理虛擬存儲器、物理存儲器的控制線路,同時也負責(zé)虛擬地址映射為物理地址,以及提供硬件機制的內(nèi)存訪問授權(quán),多用戶多進程操作系統(tǒng)。
2)什么是程序
廣義上講,為了實現(xiàn)某個特定的目標,而預(yù)先設(shè)計的一組可操作的工作步驟,稱之為程序。程序就是系統(tǒng)可以識別得一組有序的指令。存儲在磁盤上,被加載到內(nèi)存中執(zhí)行。
3)程序設(shè)計語言的發(fā)展
A機器語言
機器語言(machine language)是一種指令集的體系。這種指令集,稱機器碼(machine code),是電腦的CPU可直接解讀的數(shù)據(jù)。機器碼有時也被稱為原生碼(Native Code),這個名詞比較強調(diào)某種編程語言或庫,它與運行平臺相關(guān)的部份。
雖然大多數(shù)的語言可以既可被編譯(Compiled)又可被解譯(interpreted),但大多數(shù)只在一種情況下能夠良好運行。在一些編程系統(tǒng)中,程序要經(jīng)過幾個階段的編譯,一般而言,后階段的編譯往往更接近機器語言。這種常用的使用技巧最早在1960年代末用于BCPL,編譯程序先編譯一個叫做“0代碼”的轉(zhuǎn)換程序(representation),然后再使用虛擬器轉(zhuǎn)換到可以運行于機器上的真實代碼。這種成功的技巧之后又用于Pascal和P-code,以及Smalltalk和二進制碼,雖然在很多時候,中間過渡的代碼往往是解譯,而不是編譯的。
B匯編語言
匯編語言(assembly language)是一種用于電子計算機、微處理器、微控制器或其他可編程器件的低級語言,亦稱為符號語言。在匯編語言中,用助記符(Mnemonics)代替機器指令的操作碼,用地址符號(Symbol)或標號(Label)代替指令或操作數(shù)的地址。在不同的設(shè)備中,匯編語言對應(yīng)著不同的機器語言指令集,通過匯編過程轉(zhuǎn)換成機器指令。普遍地說,特定的匯編語言和特定的機器語言指令集是一一對應(yīng)的不同平臺之間不可直接移植。
許多匯編程序為程序開發(fā)、匯編控制、輔助調(diào)試提供了額外的支持機制。有的匯編語言編程工具經(jīng)常會提供宏,它們也被稱為宏匯編器。
匯編語言不像其他大多數(shù)的程序設(shè)計語言一樣被廣泛用于程序設(shè)計。在今天的實際應(yīng)用中,它通常被應(yīng)用在底層,硬件操作和高要求的程序優(yōu)化的場合。驅(qū)動程序、嵌入式操作系統(tǒng)和實時運行程序都需要匯編語言。
C高級語言
高級語言并不是特指的某一種具體的語言,而是包括很多編程語言,如流行的java,c,c++,C#,pascal,python,lisp,prolog,F(xiàn)oxPro,易語言,中文版的C語言習(xí)語言等等,這些語言的語法、命令格式都不相同。
低級語言分機器語言(二進制語言)和匯編語言(符號語言),這兩種語言都是面向機器的語言,和具體機器的指令系統(tǒng)密切相關(guān)。機器語言用指令代碼編寫程序,而符號語言用指令助記符來編寫程序。
高級語言與計算機的硬件結(jié)構(gòu)及指令系統(tǒng)無關(guān),它有更強的表達能力,可方便地表示數(shù)據(jù)的運算和程序的控制結(jié)構(gòu),能更好的描述各種算法,而且容易學(xué)習(xí)掌握。但高級語言編譯生成的程序代碼一般比用匯編程序語言設(shè)計的程序代碼要長,執(zhí)行的速度也慢。所以匯編語言適合編寫一些對速度和代碼長度要求高的程序和直接控制硬件的程序。高級語言、匯編語言和機器語言都是用于編寫計算機程序的語言。
高級語言程序“看不見”機器的硬件結(jié)構(gòu),不能用于編寫直接訪問機器硬件資源的系統(tǒng)軟件或設(shè)備控制軟件。為此,一些高級語言提供了與匯編語言之間的調(diào)用接口。用匯編語言編寫的程序,可作為高級語言的一個外部過程或函數(shù),利用堆棧來傳遞參數(shù)或參數(shù)的地址。
4)程序設(shè)計步驟
在Linux系統(tǒng)C程序的設(shè)計步驟如下:
C程序的設(shè)計步驟
2 計算機數(shù)據(jù)表示
學(xué)習(xí)編程,從數(shù)據(jù)表示開始。表示,存儲等。
送入計算機的數(shù)值、字母、符號等信息必須轉(zhuǎn)換成0,1組合的數(shù)據(jù)形式才能被計算機識別。能夠進行算術(shù)運算得到明確數(shù)值概念的信息成為計算機數(shù)值數(shù)據(jù),其余的信息成為非數(shù)值數(shù)據(jù)。
1)數(shù)值數(shù)據(jù)的表示
包括十進制、二進制、十六進制和八進制。
進制轉(zhuǎn)換是人們利用符號來計數(shù)的方法。進制轉(zhuǎn)換由一組數(shù)碼符號和兩個基本因素“基數(shù)”與“位權(quán)”構(gòu)成。 基數(shù)是指,進位計數(shù)制中所采用的數(shù)碼(數(shù)制中用來表示“量”的符號)的個數(shù)。 位權(quán)是指,進位制中每一固定位置對應(yīng)的單位值。
在進行進制轉(zhuǎn)換時有一基本原則:轉(zhuǎn)換后表達的“量”的多少不能發(fā)生改變。二進制中的111個蘋果和十進制中的7個蘋果是一樣多的。
十進制中的數(shù)位排列是這樣的…… 萬 千 百 十 個 十分 百分 千分……
R進制中的數(shù)位排列是這樣的……R^4 R^3R^2 R^1 R^0 R^-1 R^-2 R^-3……
十進制---》二進制
對于整數(shù)部分,用被除數(shù)反復(fù)除以2,除第一次外,每次除以2均取前一次商的整數(shù)部分作被除數(shù)并依次記下每次的余數(shù)。另外,所得到的商的最后一位余數(shù)是所求二進制數(shù)的最高位。
對于小數(shù)部分,采用連續(xù)乘以基數(shù)2,并依次取出的整數(shù)部分,直至結(jié)果的小數(shù)部分為0為止。故該法稱“乘基取整法”
附:原碼 反碼 補碼
符號位正數(shù)為0,負數(shù)為1。
正數(shù):5 原碼:00000101 反碼:00000101 補碼:00000101
負數(shù):-5 原碼:10000101 反碼:11111010 (原碼除符號為取反) 補碼:11111011 (反碼加1)
2)非數(shù)值數(shù)據(jù)的表示
非數(shù)值數(shù)據(jù)包括文字、符號、圖像、語言和邏輯信息等,也都是以0,1形式存在的。字符數(shù)據(jù)在機器內(nèi)也變變換成二進制編碼形式。普遍采用ASCII碼。
可以用命令:man ASCII 查看ASCII信息。
man ASCII
3 程序編譯與調(diào)試
1)gcc編譯器
gcc(GNU Compiler)是GNU推出的多平臺編譯器。可將C/C++源程序編譯連接成可執(zhí)行文件,支持一下后綴:
.c c語言源代碼
.h h程序所包含的頭文件
.i i已經(jīng)預(yù)處理過的C源代碼文件
.s s匯編語言源代碼
.o o編譯后的目標文件
操作命令:
gcc -o hello hello.c
-o 輸出可執(zhí)行文件
-c 只要編譯器輸出目標代碼(.o文件),而不必輸出可執(zhí)行文件
-g 用于調(diào)試
。/hello 查看輸出結(jié)果
案例:編譯上一節(jié)《《嵌入式開發(fā)之Linux系統(tǒng)中Vi編輯器的使用》》中test.c
結(jié)果
Ctrl +l 清屏
換種方式
換種方式結(jié)果
2)程序調(diào)試
利用__FILE__,__LINE__,__FUNCTION__實現(xiàn)代碼跟蹤調(diào)試。
修改test.c代碼
修改test.c代碼
繼續(xù)修改test.c代碼
繼續(xù)修改test.c代碼
繼續(xù)修改test.c代碼
一步一步修改,調(diào)試到不報錯為止。
3)C語言基礎(chǔ)
一個程序應(yīng)該包含兩個部分內(nèi)容:
對數(shù)據(jù)的描述:在程序中要指定數(shù)據(jù)的類型和數(shù)據(jù)的組織形式,即數(shù)據(jù)結(jié)構(gòu)。
對操作的描述:即操作步驟,也就是算法。
在PC上編寫的C程序,如何在AMR上運行?
gcc運行版本不一樣,編譯C結(jié)果一樣。選擇合適gcc編譯器版本即可。
-
物聯(lián)網(wǎng)
+關(guān)注
關(guān)注
2914文章
44939瀏覽量
377101 -
嵌入式開發(fā)
+關(guān)注
關(guān)注
18文章
1035瀏覽量
47725 -
馮·諾依曼結(jié)構(gòu)
+關(guān)注
關(guān)注
1文章
7瀏覽量
3659
發(fā)布評論請先 登錄
相關(guān)推薦
嵌入式開發(fā)必備-RK3562演示Linux常用系統(tǒng)查詢命令(上)觸覺智能出品
![<b class='flag-5'>嵌入式開發(fā)</b>必備-RK3562演示<b class='flag-5'>Linux</b>常用<b class='flag-5'>系統(tǒng)</b>查詢命令(上)觸覺智能出品](https://file1.elecfans.com/web3/M00/04/69/wKgZO2dzXBuAOiSTAABx71EW8WA193.png)
Made with KiCad(九十四):M5Pi Linux嵌入式開發(fā)板
![Made with KiCad(九十四):M5Pi <b class='flag-5'>Linux</b><b class='flag-5'>嵌入式開發(fā)</b>板](https://file1.elecfans.com//web2/M00/0B/62/wKgZomcy1nWANXRrAAguQjSKxLk002.png)
如何使用 RISC-V 進行嵌入式開發(fā)
零基礎(chǔ)嵌入式開發(fā)學(xué)習(xí)路線
嵌入式開發(fā)常用軟件有哪些?
嵌入式linux開發(fā)的基本步驟有哪些?
AWFlow:內(nèi)置豐富的功能節(jié)點,簡化嵌入式開發(fā)流程
![AWFlow:內(nèi)置豐富的功能節(jié)點,簡化<b class='flag-5'>嵌入式開發(fā)</b>流程](https://file.elecfans.com/web2/M00/50/DA/pYYBAGLH6TyAB71EAAAPQ7KgtYA038.png)
聚焦嵌入式開發(fā)中的合規(guī)性工具、項目管理工具、版本迭代工具應(yīng)用
嵌入式開發(fā)前景怎么樣?
![<b class='flag-5'>嵌入式開發(fā)</b>前景怎么樣?](https://file.elecfans.com/web2/M00/4C/70/pYYBAGKv0omAZ5SxAABZOwjQSKM935.png)
嵌入式開發(fā)就業(yè)前景怎么樣?
ARM Cortex-A53嵌入式開發(fā)平臺FETT507-C OKT507-C用戶編譯手冊
C語言:嵌入式開發(fā)中的關(guān)鍵編譯器角色
![<b class='flag-5'>C</b>語言:<b class='flag-5'>嵌入式開發(fā)</b><b class='flag-5'>中</b>的關(guān)鍵<b class='flag-5'>編譯</b>器角色](https://file1.elecfans.com/web2/M00/DB/3D/wKgZomYrT8OAG0cnAAAhT5ImmRs339.png)
評論