單片機(jī)與程序設(shè)計(jì)(上)
出處:維庫(kù)電子市場(chǎng)網(wǎng) 發(fā)布于:2016-09-12 16:59:26
在《單片機(jī)必須了解的外設(shè)功能——GPIO/串行通信》和《單片機(jī)必須了解的外設(shè)功能——定時(shí)器/中斷功能》中對(duì)利用單片機(jī)的功能進(jìn)行程序設(shè)計(jì)進(jìn)行了說(shuō)明。單片機(jī)內(nèi)置了非常便于使用的外設(shè)功能,大家一定也能感受到單片機(jī)可應(yīng)對(duì)各種要求的能力。但是,如果要有效地運(yùn)行單片機(jī),程序是不可或缺的,那么程序到底是如何運(yùn)行的呢?從本期開(kāi)始,我們將分上下兩篇向大家介紹單片機(jī)與程序的關(guān)系。
關(guān)注單片機(jī)的存儲(chǔ)器
在此之前,GR-SAKURA電路板(搭載瑞薩電子單片機(jī)“RX63N”)的程序設(shè)計(jì)是使用Web編譯器來(lái)進(jìn)行的。將通過(guò)編譯器搭建的程序(Object Code,結(jié)果代碼)如同寫(xiě)入U(xiǎn)盤(pán)一樣將之傳送到GR-SAKURA電路板后再執(zhí)行。那么,問(wèn)題來(lái)了。寫(xiě)入(傳送到)單片機(jī)的程序應(yīng)該保存在哪兒呢?另外,程序又是如何被執(zhí)行的呢?在解答這些問(wèn)題的同時(shí),讓我們一起來(lái)了解一下單片機(jī)與程序的關(guān)系吧。
首先來(lái)了解存儲(chǔ)器﹑主存儲(chǔ)器和外置存儲(chǔ)器的兩種作用
記憶(保存)程序和數(shù)據(jù)的地方即存儲(chǔ)器。存儲(chǔ)器有以下兩種類(lèi)型。
外置存儲(chǔ)器中的程序需傳送到主存儲(chǔ)器后才能執(zhí)行。
關(guān)于單片機(jī)的存儲(chǔ)器,常會(huì)看到ROM(Read Only Memory:只讀存儲(chǔ)器)和RAM(Random Access Memory:可讀寫(xiě)存儲(chǔ)器)等詞匯,其實(shí)ROM和RAM僅是表示存儲(chǔ)器性質(zhì),而與存儲(chǔ)器的作用無(wú)關(guān)。(請(qǐng)參考單片機(jī)入門(mén)①,了解單片機(jī)的基本結(jié)構(gòu)和操作)
地址空間(內(nèi)存空間)
CPU能夠直接進(jìn)行讀寫(xiě)的所有空間被稱(chēng)為“地址空間(或內(nèi)存空間)”。這個(gè)地址空間的每個(gè)字節(jié)都標(biāo)注有號(hào)碼。這個(gè)號(hào)碼稱(chēng)為“地址(address)”,一般以十六進(jìn)制來(lái)表示。上面所介紹過(guò)的主存儲(chǔ)器都包含在地址空間內(nèi)。
根據(jù)不同用途,單片機(jī)的CPU已開(kāi)發(fā)出了4位、8位、16位和32位。在GR-SAKURA中使用的RX63N單片機(jī)搭載了32位的CPU,因此也被稱(chēng)為“32位單片機(jī)”。那么,單片機(jī)所擁有的地址空間容量到底有多少呢?以RX63N為例,由于是32位的CPU,因此能夠指定約40億(2的32次方)個(gè)地址。確切地說(shuō)是4,294,967,296(4x1024x1024x1024)個(gè)地址。由于一個(gè)地址可以記憶一個(gè)字節(jié),這時(shí)也可以表示為具有“4GB(千兆字節(jié))的地址空間”。地址空間的容量越大越能搭載大容量的存儲(chǔ)器,也可容納更大的程序。因此能夠?qū)崿F(xiàn)更高功能的應(yīng)用。
32位字節(jié)的CPU所擁有的4G字節(jié)的地址空間示例如圖1所示。左邊所示的是以十六進(jìn)制標(biāo)示的地址。由于一列保存有4個(gè)字節(jié)(=32位),所以左邊所標(biāo)記的地址就是每4個(gè)地址的值。
計(jì)算機(jī)的單位:位、字節(jié)、兆、千兆和兆兆(太)
數(shù)據(jù)的基本單位是位(b=bit),每個(gè)位的值為“0”或“1”。8位為1個(gè)字節(jié)(B=Byte)。例如,3個(gè)字節(jié)(3×8位)等同于24位。
電腦存儲(chǔ)設(shè)備的容量所使用的單位,大家耳熟能詳?shù)挠蠯B(千字節(jié))、MB(兆字節(jié))、GB(千兆字節(jié))和TB(太字節(jié))等。一般情況下會(huì)說(shuō)1GB=1000MB或者這樣寫(xiě)出來(lái),但在計(jì)算機(jī)的世界里,此單位并非為1000倍,而是1024倍(2的10次方),因此正確的表示如下:
1KB(千字節(jié))=2的10次方 = 1,024 字節(jié)
1MB(兆字節(jié))=1,024KB = 2的20次方 1,048,576 字節(jié)
1GB(千兆字節(jié))=1,024MB = 2的30次方 = 1,073,741,824 字節(jié)
1TB(太字節(jié))=1,024GB = 2的40次方 = 1,099,511,627,776字節(jié)
表示地址的十六進(jìn)制指的是什么?
地址空間內(nèi)的地址以16進(jìn)制來(lái)表示。例如,擁有16位(2的16次方)大小的地址空間中,如果以10進(jìn)制來(lái)表示,就是“從地址0到地址65535”,如果以16進(jìn)制來(lái)表示,則是從“地址0h到地址FFFFh”。在10進(jìn)制中,每一位所取的值都在0到9之間,而在16進(jìn)制中,則是0到F(相當(dāng)于10進(jìn)制的15)。以16進(jìn)制表示的數(shù),都有一個(gè)“h”,標(biāo)明是以16進(jìn)制來(lái)表示的。
程序保存在哪兒呢?(向量表)
那么,程序被保存在地址空間的什么地方,又是怎么樣開(kāi)始工作的呢?單片機(jī)復(fù)位后便開(kāi)始執(zhí)行先程序。復(fù)位是在接通電源或接收到復(fù)位信號(hào)時(shí)發(fā)生。實(shí)際上,這種“開(kāi)始執(zhí)行先程序”處理中,有如下所示的兩種方法。
即開(kāi)始執(zhí)行程序時(shí),有將執(zhí)行程序的起始地址設(shè)為固定的CPU及將之設(shè)為可變地址的CPU。
在將起始地址設(shè)為固定的CPU中,大多是從地址0(地址空間中的地址)開(kāi)始執(zhí)行。這就是程序開(kāi)始的地點(diǎn)。而且,有時(shí)要事先在地址0中實(shí)現(xiàn)寫(xiě)入“下一個(gè)要執(zhí)行的是地址○○”的跳轉(zhuǎn)(Jump)指令,并將程序預(yù)先放置在“地址○○”中。如果改寫(xiě)“地址○○”,將可獲得與將起始地址設(shè)為可變地址同樣的效果。
將起始地址設(shè)為可變地址的CPU將起始地址寫(xiě)入被稱(chēng)為“向量表”的部分中(圖2)。向量表是只存放地址空間中各種起始地址的特定區(qū)域的名稱(chēng)。一般來(lái)說(shuō)是它放置在地址空間中地址的部分。
以RX63N為例,由于地址是以32位來(lái)顯示的,為了保存它就需要4個(gè)字節(jié)。這就意味著圖3中的“復(fù)位”部分表示從地址FFFFFFFCh到地址FFFFFFFFh的4個(gè)字節(jié)中保存了程序的起始地址。CPU復(fù)位后將讀取保存于此的地址,并從作了標(biāo)記的地址開(kāi)始執(zhí)行。被寫(xiě)入向量表的不僅是復(fù)位后的起始地址,向量表中還保存發(fā)生中斷時(shí)程序的起始地址和異常處理(Exception Handling)的起始地址。也正因?yàn)楸4媪税l(fā)生中斷及異常處理等因多種事由的起始地址,所以才被稱(chēng)為“表(Table)”。
我們來(lái)設(shè)想一下使用了向量表的程序處理的情況。圖3表示出了發(fā)生非屏蔽中斷(NMI) (*1) 時(shí)的處理流程例。
?。?)產(chǎn)生NMI,
(2)讀取寫(xiě)在向量表的NMI的起始地址(此例中為10000000h),
(3)執(zhí)行所讀取地址(10000000h)中的NMI程序。
(*1)非屏蔽中斷(NMI):所謂非屏蔽指的是無(wú)法禁止的意思。如有中斷請(qǐng)求,CPU將無(wú)條件地執(zhí)行中斷處理。可用于通過(guò)看門(mén)狗定時(shí)器進(jìn)行的中斷處理等。關(guān)于看門(mén)狗定時(shí)器,在連載的“定時(shí)器”中已為大家作了介紹。
如上所述,在將程序的起始地址設(shè)為可變的CPU中,由于能夠通過(guò)寫(xiě)入向量表來(lái)指定中斷處理的起始地址,因此具有在地址空間中自由配置中斷處理程序的特征。
本期我們介紹了CPU的地址空間與外設(shè)功能的關(guān)系、以及程序是從哪里開(kāi)始執(zhí)行的等內(nèi)容。如果單片機(jī)為32位,就有非常巨大的地址空間可以使用。內(nèi)存是非常寶貴的資源,所以將保存在內(nèi)存中的程序設(shè)計(jì)得小巧非常重要,但32位單片機(jī)的地址空間已比16位的大了很多。為了縮小程序,沒(méi)有必要進(jìn)行復(fù)雜的編程,我們的程序都是在更易于讀取的目標(biāo)下來(lái)編寫(xiě)的。
版權(quán)與免責(zé)聲明
凡本網(wǎng)注明“出處:維庫(kù)電子市場(chǎng)網(wǎng)”的所有作品,版權(quán)均屬于維庫(kù)電子市場(chǎng)網(wǎng),轉(zhuǎn)載請(qǐng)必須注明維庫(kù)電子市場(chǎng)網(wǎng),http://m.58mhw.cn,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類(lèi)作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。
如涉及作品內(nèi)容、版權(quán)等問(wèn)題,請(qǐng)?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。
- 單片機(jī)技術(shù)特性與嵌入式開(kāi)發(fā)實(shí)踐指南2026/1/7 10:00:02
- 單片機(jī)(MCU)與數(shù)字信號(hào)處理器(DSP)分類(lèi)及選型技術(shù)指南2025/12/30 10:02:37
- 工業(yè)級(jí)DSP信號(hào)處理系統(tǒng):硬件適配與抗干擾工程方案2025/12/15 14:41:00
- HOLTEK推出HT32F65533G/733G內(nèi)建N/N預(yù)驅(qū)電機(jī)專(zhuān)用SoC單片機(jī)2025/11/26 14:11:41
- 什么是C51數(shù)據(jù)類(lèi)型擴(kuò)充定義2025/10/27 13:59:22
- 編碼器的工作原理及作用1
- 超強(qiáng)整理!PCB設(shè)計(jì)之電流與線(xiàn)寬的關(guān)系2
- 三星(SAMSUNG)貼片電容規(guī)格對(duì)照表3
- 電腦藍(lán)屏代碼大全4
- 國(guó)標(biāo)委發(fā)布《電動(dòng)汽車(chē)安全要求第3部分:人員觸電防護(hù)》第1號(hào)修改單5
- 通俗易懂談上拉電阻與下拉電阻6
- 繼電器的工作原理以及驅(qū)動(dòng)電路7
- 電容單位8
- 跟我學(xué)51單片機(jī)(三):?jiǎn)纹瑱C(jī)串口通信實(shí)例9
- 一種三極管開(kāi)關(guān)電路設(shè)計(jì)10









