當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式硬件
[導(dǎo)讀]引導(dǎo)程序的運(yùn)行―程序計(jì)數(shù)器一般來(lái)說(shuō),程序就是計(jì)算機(jī)將所要進(jìn)行的處理按順序排列的指令集。在單片機(jī)中,將程序保存在地址空間(存儲(chǔ)器空間)中(上期曾介紹過(guò)),并由CPU來(lái)執(zhí)行

引導(dǎo)程序的運(yùn)行―程序計(jì)數(shù)器

一般來(lái)說(shuō),程序就是計(jì)算機(jī)將所要進(jìn)行的處理按順序排列的指令集。在單片機(jī)中,將程序保存在地址空間(存儲(chǔ)器空間)中(上期曾介紹過(guò)),并由CPU來(lái)執(zhí)行(處理)指令。假設(shè)地址空間中的一個(gè)地址保存一條指令,先執(zhí)行某個(gè)地址中的指令(如“將值置位到CPU中”處理),接著執(zhí)行下一個(gè)地址中的指令,接下來(lái)再執(zhí)行下一個(gè)地址中的指令……,像這樣通過(guò)連續(xù)執(zhí)行指令,便可執(zhí)行程序。

那么,CPU是如何判斷執(zhí)行指令的順序呢?在單片機(jī)中,程序被執(zhí)行的時(shí)候“程序計(jì)數(shù)器(PC)”的值也同時(shí)被更新。存放在CPU內(nèi)的指令地址中,程序計(jì)數(shù)器存儲(chǔ)有下一條CPU將要執(zhí)行的指令所在的地址。執(zhí)行了某個(gè)地址的指令后,下一個(gè)該執(zhí)行哪個(gè)地址中的指令呢?這個(gè)答案由程序計(jì)數(shù)器來(lái)告訴你。

一般來(lái)說(shuō),程序被保存在連續(xù)的地址中,再由CPU按順序執(zhí)行存放在各個(gè)地址中的指令。圖1為程序計(jì)數(shù)器的示意圖。圖中,假定(1)執(zhí)行地址1000h 中的指令,(2)執(zhí)行地址1000h中的指令后,程序計(jì)數(shù)器的値自動(dòng)增加一個(gè)量并顯示出下一個(gè)地址1001h,接下來(lái),(3)CPU執(zhí)行地址1001h中的指令。

 


那么,CPU執(zhí)行最初的指令時(shí)是一種什么狀況呢?單片機(jī)在接通電源或是復(fù)位時(shí),如上期所說(shuō)明的,保存在向量表的復(fù)位地址中的値(程序的起始地址)將被轉(zhuǎn)移到程序計(jì)數(shù)器中,該地址中的指令便得到執(zhí)行(請(qǐng)參照上期的圖2)。

⇒關(guān)于地址空間及向量表的內(nèi)容,請(qǐng)參照本系列的第五期《單片機(jī)與程序設(shè)計(jì)(上)》。

改變程序的運(yùn)行路徑―轉(zhuǎn)移指令

編寫程序時(shí),在執(zhí)行完某個(gè)指令的處理后有時(shí)必須先執(zhí)行保存“(非連續(xù))的下一個(gè)地址”中的指令。此時(shí),程序計(jì)數(shù)器的值將被改寫,而所用的指令被稱為“轉(zhuǎn)移指令”。

圖2所示是轉(zhuǎn)移指令的示意圖。圖2示例中,(1)地址1000h中存放有轉(zhuǎn)移指令,即將(2)程序計(jì)數(shù)器的值改寫為下一個(gè)應(yīng)執(zhí)行的地址(1100h)的指令。即CPU執(zhí)行完1000h地址的指令(轉(zhuǎn)移指令)后,接下來(lái)不是執(zhí)行1001h地址的指令,而是執(zhí)行(3)1100h地址的指令。

 


另外,在轉(zhuǎn)移指令中,能夠利用“從當(dāng)前的程序計(jì)數(shù)器的值向前(更大的地址)/向后(更小的地址)移動(dòng)”的方法來(lái)設(shè)定程序計(jì)數(shù)器的值。

信息的暫時(shí)存放處―堆棧

執(zhí)行程序時(shí),在運(yùn)算過(guò)程中僅僅依靠CPU內(nèi)的數(shù)據(jù)保存位置(CPU內(nèi)部寄存器)是不夠的,有時(shí)需在主存儲(chǔ)器中暫時(shí)存放信息。這種信息的暫時(shí)存放位置被稱為“堆棧”,而存放“下一個(gè)(暫時(shí))存放的信息地址”的就是“堆棧指針(SP)”。如果一開始就設(shè)定好堆棧的地址,那么堆棧指針將自動(dòng)更新,且總是指示 “下一個(gè)(暫時(shí))存放的信息地址”。

⇒CPU內(nèi)部寄存器等單片機(jī)的結(jié)構(gòu)請(qǐng)參照《單片機(jī)入門(1)》。

如果執(zhí)行“將該信息存放(有時(shí)也用“堆積”)在堆棧”的指令,那么被指定的信息將會(huì)被寫入堆棧指針?biāo)付ǖ牡刂分校叶褩V羔樀闹狄矊⒈桓聻樾碌牡刂?一般為一個(gè)小地址)。該情形如圖3所示。如果(1)CPU將信息存放在堆棧指針?biāo)傅牡刂分校瑒t(2)堆棧指針的値將被更新,然后(3)堆棧指針指向下一個(gè)存放信息的位置。

 


將存放在堆棧中的信息返回CPU時(shí),也將用到堆棧指針。圖4所示的是將信息返回時(shí)的情形。(1)更新堆棧指針的値(更新為一個(gè)大的地址),(2)將暫時(shí)存放在堆棧中的信息返送回CPU。此時(shí),(3)堆棧指針指向下一個(gè)寫入地址(先前將信息返回CPU后空出的地址)。

 


但是堆棧中并非可無(wú)限制地保存信息。由于堆棧能使用的范圍僅限于可改寫的被稱為RAM的存儲(chǔ)器。如果信息存放量過(guò)多而導(dǎo)致堆棧超出了RAM的區(qū)域,程序?qū)o(wú)法正常運(yùn)行。

理解中斷處理

本期是本系列的最后一期。下面我們將以前介紹過(guò)的內(nèi)容進(jìn)行一個(gè)總結(jié),并以此來(lái)理解單片機(jī)是如何運(yùn)行(處理)的。

我們將以發(fā)生中斷時(shí)的處理為例來(lái)進(jìn)行思考(圖5)。中斷處理就是指在執(zhí)行某個(gè)程序的過(guò)程中,由于某種原因(產(chǎn)生中斷)而導(dǎo)致開始執(zhí)行完全不同的程序。我們以來(lái)自外設(shè)功能之一的獨(dú)立的看門狗計(jì)時(shí)器(WDT、所謂的Watch Dog即看門狗的意思)的中斷為例來(lái)進(jìn)行分析。在程序正常運(yùn)行時(shí)獨(dú)立的看門狗定時(shí)器將什么也不做,但是在程序失去控制,且沒(méi)有按必要的步驟進(jìn)行處理時(shí)就會(huì)產(chǎn)生中斷。使失去控制的程序停下并讓系統(tǒng)穩(wěn)定停止的處理是由通過(guò)中斷開始的程序來(lái)執(zhí)行的。中斷處理的流程請(qǐng)參照本系列《中斷功能》的圖2。

⇒關(guān)于中斷的結(jié)構(gòu)和處理流程請(qǐng)參照本系列《中斷功能》的內(nèi)容。

⇒關(guān)于看門狗定時(shí)器請(qǐng)參照本系列的《定時(shí)器》的內(nèi)容。

 


(1)首先,在產(chǎn)生中斷時(shí),必須使運(yùn)行中的程序入棧。

(2)在中斷處理 “入棧”時(shí),將信息存放在堆棧指針指向的地址(堆棧)中。進(jìn)行中斷處理時(shí)存放在堆棧中的信息就是正在執(zhí)行的原先的程序(被中斷的程序)時(shí)的程序計(jì)數(shù)器的值,即原先的程序執(zhí)行到哪一步的信息(地址)。另外,顯示CPU內(nèi)部狀態(tài)的信息和暫時(shí)保存的值也存放在堆棧中。

(3)如果CPU內(nèi)部的信息存放在堆棧中且完成“交付”準(zhǔn)備(入棧)后,將執(zhí)行中斷程序。中斷程序與正在執(zhí)行的程序不同且所保存的地址空間也不同,所以程序計(jì)數(shù)器的值與原先程序也完全不同。中斷程序的起始位置將被寫入向量表中。起始位置該寫在向量表中的哪一項(xiàng)取決于所產(chǎn)生的中斷。[!--empirenews.page--]

例如,如果存在不可屏蔽中斷(NMI,即CPU不能屏蔽的中斷),那就從寫有NMI項(xiàng)的地址開始進(jìn)行處理(請(qǐng)參照《單片機(jī)與程序設(shè)計(jì)(上)》的圖2及圖3)。

⇒使用向量表進(jìn)行處理的流程在本系列《單片機(jī)與程序設(shè)計(jì)(上)》中進(jìn)行解說(shuō)。

(4)如上所述,向量表的NMI項(xiàng)中的值(地址)將轉(zhuǎn)移到程序計(jì)數(shù)器中,并從該處開始執(zhí)行。此外,如將數(shù)值設(shè)為0而產(chǎn)生錯(cuò)誤時(shí),或者欲存取到無(wú)存儲(chǔ)器的位置時(shí),CPU本身將產(chǎn)生中斷并從向量表中讀取開始處理的地址。此例中,由于在檢測(cè)到程序失控時(shí)是通過(guò)獨(dú)立的看門狗定時(shí)器進(jìn)行中斷處理的,所以中斷程序?qū)⑹瓜到y(tǒng)停止下來(lái)。

(5)如為一般的周期性中斷,那么,中斷處理一結(jié)束,且在入棧時(shí)將存放在堆棧中的“執(zhí)行原先執(zhí)行程序時(shí)的信息”返回到CPU。最后返回程序計(jì)數(shù)器的值,并結(jié)束從中斷返回的處理“出棧”。

開始中斷程序時(shí),通過(guò)來(lái)自外部的信號(hào)或從CPU本身發(fā)出的指令來(lái)開始入棧。出棧時(shí)使用“來(lái)自中斷的出棧指令”,因此編程人員無(wú)需考慮“堆棧中存放有什么信息又是按什么順序來(lái)存放的?”等問(wèn)題,僅需一條指令便可進(jìn)行出棧處理。

結(jié)合上期《單片機(jī)與程序設(shè)計(jì)(上)》的內(nèi)容,從執(zhí)行程序的觀點(diǎn)來(lái)分析,本期對(duì)于CPU中到底產(chǎn)生了什么變化進(jìn)行了說(shuō)明。程序存放在地址空間中,且在向量表中保存有起始地址,而且還有將信息暫時(shí)存放的被稱為堆棧的內(nèi)容等等……,在進(jìn)行嵌入式編程時(shí),必須同時(shí)考慮這些內(nèi)部動(dòng)作后再進(jìn)行編程。如果可通過(guò)程序?qū)τ诟?xì)微的部分發(fā)出指示,且能發(fā)揮出該單片機(jī)的能力的話,編程將變得更加容易。

本系列共分4期,本期為最后一期。盡管每一期都只介紹非?;A(chǔ)的內(nèi)容,對(duì)于那些內(nèi)容,我們也盡量做到即使對(duì)于完全不具備相關(guān)知識(shí)的讀者也能看得懂。所以,請(qǐng)您也反復(fù)閱讀,我們相信您一定會(huì)完全理解其內(nèi)容的。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉