嵌入式系統(tǒng)設(shè)計(jì)與應(yīng)用 課件全套 王劍 第1-11章 嵌入式系統(tǒng)基礎(chǔ)知識(shí)- 嵌入式系統(tǒng)的開(kāi)發(fā)設(shè)計(jì)案例_第1頁(yè)
嵌入式系統(tǒng)設(shè)計(jì)與應(yīng)用 課件全套 王劍 第1-11章 嵌入式系統(tǒng)基礎(chǔ)知識(shí)- 嵌入式系統(tǒng)的開(kāi)發(fā)設(shè)計(jì)案例_第2頁(yè)
嵌入式系統(tǒng)設(shè)計(jì)與應(yīng)用 課件全套 王劍 第1-11章 嵌入式系統(tǒng)基礎(chǔ)知識(shí)- 嵌入式系統(tǒng)的開(kāi)發(fā)設(shè)計(jì)案例_第3頁(yè)
嵌入式系統(tǒng)設(shè)計(jì)與應(yīng)用 課件全套 王劍 第1-11章 嵌入式系統(tǒng)基礎(chǔ)知識(shí)- 嵌入式系統(tǒng)的開(kāi)發(fā)設(shè)計(jì)案例_第4頁(yè)
嵌入式系統(tǒng)設(shè)計(jì)與應(yīng)用 課件全套 王劍 第1-11章 嵌入式系統(tǒng)基礎(chǔ)知識(shí)- 嵌入式系統(tǒng)的開(kāi)發(fā)設(shè)計(jì)案例_第5頁(yè)
已閱讀5頁(yè),還剩668頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

嵌入式系統(tǒng)設(shè)計(jì)與應(yīng)用基于ARMCortex-A8和Linux第一章嵌入式系統(tǒng)基本概念第一章嵌入式系統(tǒng)基本概念一、課程定位課程教學(xué)的指導(dǎo)依據(jù)/嵌入式系統(tǒng)的基本概念和分類(lèi)/嵌入式系統(tǒng)的學(xué)習(xí)層次分析和兩種應(yīng)用模式二、單片機(jī)與嵌入式系統(tǒng)(深化)PC編程與嵌入式編程的區(qū)別/單片機(jī)和嵌入式系統(tǒng)的關(guān)系/單片機(jī)的典型應(yīng)用案例:指夾式血氧儀/嵌入式系統(tǒng)的典型應(yīng)用案例:腦機(jī)接口/單片機(jī)的設(shè)計(jì)模式:輪詢/前后臺(tái)/狀態(tài)機(jī)/RTOS/嵌入式系統(tǒng)的開(kāi)發(fā)流程:經(jīng)典模式與協(xié)同開(kāi)發(fā)/嵌入式系統(tǒng)技術(shù)展望三、RTOS與Linux(深化)嵌入式操作系統(tǒng)定義與常見(jiàn)的嵌入式操作系統(tǒng)/嵌入式操作系統(tǒng)與物聯(lián)網(wǎng)操作系統(tǒng)的關(guān)系/RTOS的主要特點(diǎn)/實(shí)時(shí)

Linux:從軟實(shí)時(shí)到硬實(shí)時(shí)嵌入式系統(tǒng)課程教學(xué)的指導(dǎo)依據(jù)

《普通高等學(xué)校本科專(zhuān)業(yè)類(lèi)教學(xué)質(zhì)量國(guó)家標(biāo)準(zhǔn)》國(guó)際ACM/IEEE計(jì)算課程體系規(guī)范CC2020全國(guó)計(jì)算機(jī)技術(shù)與軟件專(zhuān)業(yè)技術(shù)資格嵌入式系統(tǒng)設(shè)計(jì)師考試大綱普通高等學(xué)校專(zhuān)業(yè)課程大綱國(guó)際ACM/IEEE計(jì)算課程體系規(guī)范CC2020勝任力模型IT勝任力模型CC2020規(guī)范應(yīng)用實(shí)例(嵌入式系統(tǒng))嵌入式系統(tǒng)的基本概念和分類(lèi)國(guó)際定義

國(guó)內(nèi)定義國(guó)際電氣和電子工程師協(xié)會(huì)(theInstituteofElectricalandElectronicsEngineers,IEEE)對(duì)嵌入式系統(tǒng)的定義為:嵌入式系統(tǒng)是用來(lái)控制、監(jiān)視或者輔助機(jī)器、設(shè)備或裝置運(yùn)行的裝置。廣泛定義國(guó)內(nèi)普遍認(rèn)同的嵌入式系統(tǒng)定義是:嵌入式系統(tǒng)是以應(yīng)用為中心、以計(jì)算機(jī)技術(shù)為基礎(chǔ),軟、硬件可裁剪,適應(yīng)于應(yīng)用系統(tǒng)對(duì)功能、可靠性、成本、體積、功耗等方面有特殊要求的專(zhuān)用計(jì)算機(jī)系統(tǒng)。--定義收縮,強(qiáng)調(diào)“嵌入性”、“專(zhuān)用性”與“計(jì)算機(jī)系統(tǒng)”嵌入式系統(tǒng)的特點(diǎn)

與“嵌入性”相關(guān)的特點(diǎn):由于是嵌入到對(duì)象系統(tǒng)中,因此必須滿足對(duì)象系統(tǒng)的環(huán)境要求,如物理環(huán)境(小型)、電氣/氣氛環(huán)境(可靠)、成本(價(jià)廉)等要求。

與“專(zhuān)用性”的相關(guān)特點(diǎn):軟、硬件的裁剪性;滿足對(duì)象要求的最小軟、硬件配置等。

與“計(jì)算機(jī)系統(tǒng)”相關(guān)的特點(diǎn):嵌入式系統(tǒng)必須是能滿足對(duì)象系統(tǒng)控制要求的計(jì)算機(jī)系統(tǒng)。Q:實(shí)時(shí)性是嵌入式系統(tǒng)的充要條件嗎?嵌入式系統(tǒng)的分類(lèi)和兩種應(yīng)用模式按其形態(tài)的差異,一般可將嵌入式系統(tǒng)分為:芯片級(jí)(MCU、SoC)、板級(jí)(單板機(jī)、模塊)、設(shè)備級(jí)(工控機(jī))。從嵌入式系統(tǒng)發(fā)展的歷史過(guò)程,以及嵌入式應(yīng)用的多樣性中,可以了解到客觀上形成的兩種應(yīng)用模式:以電子技術(shù)應(yīng)用工程師為主體的電子系統(tǒng)智能化應(yīng)用以計(jì)算機(jī)專(zhuān)業(yè)人士為主體,基于嵌入式系統(tǒng)軟硬件平臺(tái),以網(wǎng)絡(luò)、通信為主的嵌入式上層應(yīng)用。嵌入式系統(tǒng)的學(xué)習(xí)層次分析層面1—構(gòu)建嵌入式系統(tǒng)平臺(tái)層面2—利用現(xiàn)成平臺(tái)但需設(shè)計(jì)新的接口驅(qū)動(dòng)層面3—利用現(xiàn)成平臺(tái)完成嵌入式應(yīng)用軟件主要內(nèi)容是“嵌入式系統(tǒng)原理及接口”。重點(diǎn)學(xué)習(xí)某個(gè)具有代表性的嵌入式CPU(如ARM系列)內(nèi)部寄存器結(jié)構(gòu)、匯編指令系統(tǒng)、中斷(異常)管理機(jī)制及常用的外圍接口,使學(xué)生掌握嵌入式硬件平臺(tái)設(shè)計(jì)的有關(guān)知識(shí)。并具有啟動(dòng)引導(dǎo)程序的設(shè)計(jì)的知識(shí)和能力。主要內(nèi)容是“嵌入式操作系統(tǒng)及接口驅(qū)動(dòng)設(shè)計(jì)”。重點(diǎn)學(xué)習(xí)某個(gè)具有代表性的嵌入式操作系統(tǒng)(如Linux)的內(nèi)核原理、I/O驅(qū)動(dòng)機(jī)制及驅(qū)動(dòng)程序框架,并結(jié)合具體的外圍接口電路,使學(xué)生具備該接口的驅(qū)動(dòng)程序設(shè)計(jì)能力,并具有操作系統(tǒng)裁剪能力主要內(nèi)容是“嵌入式系統(tǒng)應(yīng)用軟件開(kāi)發(fā)”。重點(diǎn)學(xué)習(xí)某個(gè)具有代表性的嵌入式操作系統(tǒng)環(huán)境下的交叉編譯工具、進(jìn)一步需介紹該操作系統(tǒng)所提供的API函數(shù)及API函數(shù)的應(yīng)用方法。PC編程與嵌入式編程的區(qū)別案例1串口的驅(qū)動(dòng)程序。串口驅(qū)動(dòng)提供了一個(gè)查詢驅(qū)動(dòng)緩沖區(qū)字符的函數(shù):GetRxBuffCharNum()。上層需要接收一定數(shù)量的字符后才能對(duì)包做解析。偽代碼如下:bExit=FALSE;do{if(GetRxBuffCharNum()>=30)bExit=ReadRxBuff(buff,GetRxBuffCharNum());}While(!bExit);PC編程與嵌入式編程的區(qū)別案例1修改后:CPU可能無(wú)法正常響應(yīng)串口中斷案例分析:在嵌入式系統(tǒng)里,大部分的RTOS應(yīng)用都是不帶串口驅(qū)動(dòng)。如果設(shè)計(jì)代碼時(shí),沒(méi)有充分考慮代碼與內(nèi)核的結(jié)合。將會(huì)造成代碼深層次的問(wèn)題。PC編程與嵌入式編程的區(qū)別案例2第二個(gè)例子:驅(qū)動(dòng)一個(gè)14094串口轉(zhuǎn)并口的芯片。串行信號(hào)采用IO模擬。偽代碼如下:將數(shù)據(jù)的8個(gè)bit在每個(gè)高電平從bit0到bit7發(fā)送出去。注意:14094要求clock的高電平和低電平均需要持續(xù)10ns。Onlyhighleveldelay修改:嵌入式系統(tǒng)的典型組成BoardSupportPackage(板級(jí)支持軟件包,簡(jiǎn)稱(chēng)BSP)它對(duì)于用戶(開(kāi)發(fā)者)是開(kāi)放的,用戶可以根據(jù)不同的硬件需求對(duì)其作改動(dòng)或二次開(kāi)發(fā),BSP在系統(tǒng)中的角色,很相似于BIOS在PC系統(tǒng)中的地位。嵌入式處理器典型架構(gòu)推動(dòng)嵌入式計(jì)算機(jī)系統(tǒng)走向獨(dú)立發(fā)展道路的芯片,也稱(chēng)單片微型計(jì)算機(jī),簡(jiǎn)稱(chēng)單片機(jī)(single-chipmicrocomputer)。由于這類(lèi)芯片的作用主要是控制被嵌入設(shè)備的相關(guān)動(dòng)作,因此,業(yè)界常稱(chēng)這類(lèi)芯片為微控制器(MicrocontrollerUnit,MCU)。片上系統(tǒng)(SystemonChip,SoC)是ASIC(ApplicationSpecificIntegratedCircuits)設(shè)計(jì)方法學(xué)中產(chǎn)生的一種新技術(shù),是指以嵌入式系統(tǒng)為核心,以IP(IntellectualProperty)復(fù)用技術(shù)為基礎(chǔ),集軟、硬件于一體,并追求產(chǎn)品系統(tǒng)最大包容的集成芯片。單片機(jī)和嵌入式系統(tǒng)的關(guān)系(狹義)推動(dòng)嵌入式計(jì)算機(jī)系統(tǒng)走向獨(dú)立發(fā)展道路的芯片,也稱(chēng)單片微型計(jì)算機(jī),簡(jiǎn)稱(chēng)單片機(jī)(single-chipmicrocomputer)。由于這類(lèi)芯片的作用主要是控制被嵌入設(shè)備的相關(guān)動(dòng)作,因此,業(yè)界常稱(chēng)這類(lèi)芯片為微控制器(MicrocontrollerUnit,MCU)。片上系統(tǒng)(Systemon

Chip,SoC)是ASIC(ApplicationSpecificIntegratedCircuits)設(shè)計(jì)方法學(xué)中產(chǎn)生的一種新技術(shù),是指以嵌入式系統(tǒng)為核心,以IP(IntellectualProperty)復(fù)用技術(shù)為基礎(chǔ),集軟、硬件于一體,并追求產(chǎn)品系統(tǒng)最大包容的集成芯片。單片機(jī)和嵌入式系統(tǒng)的關(guān)系(狹義)從工程實(shí)用的角度出發(fā):通常把芯片中不帶MMU(內(nèi)存管理單元,memorymanagementunit)從而不支持虛擬地址,只能跑裸機(jī)或RTOS(典型如ucos、華為L(zhǎng)iteOS、RT-Thread、freertos等)系統(tǒng)定義為單片機(jī)(典型如STM32、NXPLPC系列等)通常把芯片自帶MMU可以支持虛擬地址,能夠運(yùn)行Linux、Vxworks、WinCE、Android這樣的操作系統(tǒng)的系統(tǒng)叫嵌入式。單片機(jī)的典型應(yīng)用案例:指夾式血氧儀血氧儀原理基于動(dòng)脈搏動(dòng)期間光吸收量的變化。分別位于可見(jiàn)紅光光譜(660納米)和紅外光譜(940納米)的兩個(gè)光源交替照射被測(cè)試區(qū)(一般為指尖或耳垂)。在這些脈動(dòng)期間所吸收的光量與血液中的氧含量有關(guān)。微處理器計(jì)算所吸收的這兩種光譜的比率,并將結(jié)果與存在存儲(chǔ)器里的飽和度數(shù)值表進(jìn)行比較,從而得出血氧飽和度。血氧儀常用MCU:STM32ST于2007年發(fā)布了第一款STM32。STM32是ARMCortex-M內(nèi)核的單片機(jī),實(shí)際上同樣使用ARMCortex-M系列內(nèi)核的單片機(jī)還有很多(譬如NXP的LPC系列,原Freescale的K60系列,新唐的M051系列,國(guó)內(nèi)如兆易創(chuàng)新的GD32系列等)。單片機(jī)的設(shè)計(jì)模式:輪詢/前后臺(tái)/狀態(tài)機(jī)/RTOS

1、輪詢系統(tǒng)輪詢系統(tǒng)即是在裸機(jī)編程的時(shí)候,先初始化好相關(guān)的硬件,然后讓主程序在一個(gè)死循環(huán)里面不斷循環(huán),順序地做各種事情。裸機(jī)系統(tǒng)通常分成輪詢系統(tǒng)和前后臺(tái)系統(tǒng)。int

main(void)

{

/*

硬件相關(guān)初始化

*/

HardWareInit();

/*

無(wú)限循環(huán)

*/

for

(;;)

{

/*

處理事情

1

*/

DoSomething1();

/*

處理事情

2

*/

DoSomethingg2();

/*

處理事情

3

*/

DoSomethingg3();

}}輪詢系統(tǒng)只適合順序執(zhí)行的功能代碼,當(dāng)有外部事件驅(qū)動(dòng)時(shí),實(shí)時(shí)性就會(huì)降低。單片機(jī)的設(shè)計(jì)模式:輪詢/前后臺(tái)/狀態(tài)機(jī)/RTOS2、前后臺(tái)系統(tǒng)在裸機(jī)系統(tǒng)中,所有的操作都是在一個(gè)無(wú)限的大循環(huán)里面實(shí)現(xiàn),支持中斷檢測(cè)。外部中斷緊急事件在中斷里面標(biāo)記或者響應(yīng),中斷服務(wù)稱(chēng)為前臺(tái),main函數(shù)里面的while(1)無(wú)限循環(huán)稱(chēng)為后臺(tái),按順序處理業(yè)務(wù)功能,以及中斷標(biāo)記的可執(zhí)行的事件。適用于小型的電子產(chǎn)品。int

flag1

=

0;

int

flag2

=

0;

int

flag3

=

0;

int

main(void)

{

HardWareInit();

/*

無(wú)限循環(huán)

*/

for

(;;)

{

if

(flag1)

{

/*

處理事情

1

*/

DoSomething1();}

if

(flag2)

{

/*

處理事情

2

*/

DoSomethingg2();

}

if

(flag3)

{

/*

處理事情

3

*/

DoSomethingg3();

}

}}void

ISR1(void)

{

flag1

=

1;

/*

置位標(biāo)志位

*/

DoSomething1();}

void

ISR2(void)

{

flag2

=

2;

/*

置位標(biāo)志位

*/

DoSomething2();}

void

ISR3(void)

{flag3

=

1;

/*

置位標(biāo)志位

*/

DoSomething3();}狀態(tài)機(jī)在裸機(jī)狀態(tài)下實(shí)現(xiàn):只有一個(gè)執(zhí)行序列,所有的操作都是串行執(zhí)行的,唯一需要注意的控制流程就是中斷處理。單片機(jī)的設(shè)計(jì)模式:輪詢/前后臺(tái)/狀態(tài)機(jī)/RTOS單片機(jī)的設(shè)計(jì)模式:輪詢/前后臺(tái)/狀態(tài)機(jī)/RTOSRTOS實(shí)時(shí)操作系統(tǒng)(RTOS),又稱(chēng)即時(shí)操作系統(tǒng),它會(huì)按照排序運(yùn)行、管理系統(tǒng)資源,并為開(kāi)發(fā)應(yīng)用程序提供一致的基礎(chǔ)。實(shí)時(shí)操作系統(tǒng)與一般的操作系統(tǒng)相比,最大的特色就是“實(shí)時(shí)性”,如果有一個(gè)任務(wù)需要執(zhí)行,實(shí)時(shí)操作系統(tǒng)會(huì)馬上(在較短時(shí)間內(nèi))執(zhí)行該任務(wù),不會(huì)有較長(zhǎng)的延時(shí)。這種特性保證了各個(gè)任務(wù)的及時(shí)執(zhí)行。Q:速度快,吞吐量大,代碼精簡(jiǎn),代碼規(guī)模小等。。。。它們就是RTOS嗎???嵌入式系統(tǒng)的典型應(yīng)用案例:腦機(jī)接口基于ARM的微型電腦主板:RaspberryPi首先從腦部讀取生物電信號(hào),然后傳到處理器中處理,最后用輸出信號(hào)控制其他設(shè)備。嵌入式系統(tǒng)的典型應(yīng)用案例:腦機(jī)接口國(guó)際10-20系統(tǒng)的腦電圖檢測(cè)電極位置,其中首字母代表大腦不同的分區(qū),例如F為額葉,P是頂葉,T是顳葉等當(dāng)大腦在進(jìn)行不同的活動(dòng)時(shí),也會(huì)同時(shí)產(chǎn)生可以區(qū)分的電信號(hào)模式。這樣這些電極就可以檢測(cè)到電信號(hào),用以進(jìn)行后續(xù)的分析處理。

嵌入式系統(tǒng)的典型應(yīng)用案例:腦機(jī)接口咀嚼和眨眼動(dòng)作的測(cè)試嵌入式系統(tǒng)的開(kāi)發(fā)流程:經(jīng)典模式與協(xié)同開(kāi)發(fā)嵌入式系統(tǒng)技術(shù)展望

邊緣計(jì)算技術(shù)發(fā)展嵌入式人工智能技術(shù)發(fā)展嵌入式開(kāi)發(fā)安全可信技術(shù)發(fā)展RISC-V指令集架構(gòu)發(fā)展高性能嵌入式操作系統(tǒng)發(fā)展物聯(lián)網(wǎng)技術(shù)與垂直行業(yè)技術(shù)發(fā)展邊緣計(jì)算技術(shù)發(fā)展物聯(lián)網(wǎng)快速發(fā)展下的邊緣計(jì)算范式。邊緣節(jié)點(diǎn)(包括智能家電、手機(jī)、平板等)產(chǎn)生數(shù)據(jù),上傳到云中心,服務(wù)提供商也產(chǎn)生數(shù)據(jù)上傳到云中心。邊緣節(jié)點(diǎn)發(fā)送請(qǐng)求到云中心,云中心返還相關(guān)數(shù)據(jù)給邊緣節(jié)點(diǎn)?;贚iteOS的端側(cè)AI框架LiteOS

現(xiàn)已集成

MindSpore

輕量級(jí)AI推理框架,在LiteOSStudio中輸入模型文件,例如人臉識(shí)別、指紋識(shí)別等模型文件,MindSpore進(jìn)行模型解析、優(yōu)化,生成模型AI代碼,再鏈接預(yù)置算子庫(kù)后與LiteOS工程進(jìn)行編譯,即可將AI模型快速部署到端側(cè)實(shí)現(xiàn)端側(cè)AI推理。嵌入式開(kāi)發(fā)安全可信技術(shù)發(fā)展LiteOS的安全框架RISC-V指令集架構(gòu)發(fā)展RISC-V指令集與其他開(kāi)源指令集架構(gòu)相比,在不同的特性上都有改進(jìn)高性能嵌入式操作系統(tǒng)發(fā)展LiteOS操作系統(tǒng)采用“1+N”架構(gòu)。這個(gè)“1”指的是LiteOS內(nèi)核,它包括基礎(chǔ)內(nèi)核和擴(kuò)展內(nèi)核,部分開(kāi)源,提供物聯(lián)網(wǎng)設(shè)備端的系統(tǒng)資源管理功能?!癗”指的是N個(gè)中間件,其中最重要的是:互聯(lián)互通框架、傳感框架、安全框架、運(yùn)行引擎和Javascript框架等。嵌入式操作系統(tǒng)定義和常見(jiàn)的嵌入式操作系統(tǒng)嵌入式操作系統(tǒng)是一種支持嵌入式系統(tǒng)應(yīng)用的操作系統(tǒng)軟件,它是嵌入式系統(tǒng)的極為重要的組成部分,通常包括與硬件相關(guān)的底層驅(qū)動(dòng)軟件、系統(tǒng)內(nèi)核、設(shè)備驅(qū)動(dòng)接口、通信協(xié)議、圖形用戶界面及標(biāo)準(zhǔn)化瀏覽器等。與通用操作系統(tǒng)相比較,嵌入式操作系統(tǒng)在系統(tǒng)實(shí)時(shí)高效性、硬件的相關(guān)依賴性、軟件固化以及應(yīng)用的專(zhuān)用性等方面有突出的特點(diǎn)。常見(jiàn)的嵌入式操作系統(tǒng)有:嵌入式Linux、華為L(zhǎng)iteos、WindowsCE、Symbian、Android、uC/OS-II、VxWorks等。嵌入式操作系統(tǒng)舉例:HuaweiLiteOS基礎(chǔ)

內(nèi)核架構(gòu)開(kāi)源內(nèi)核,基礎(chǔ)內(nèi)核體積可以裁剪至不到10K大小,支持動(dòng)態(tài)加載、分散加載和靜態(tài)裁剪嵌入式操作系統(tǒng)與物聯(lián)網(wǎng)操作系統(tǒng)的關(guān)系物聯(lián)網(wǎng)操作系統(tǒng)整體分層架構(gòu)嵌入式操作系統(tǒng)與物聯(lián)網(wǎng)操作系統(tǒng)的關(guān)系物聯(lián)網(wǎng)操作系統(tǒng)與傳統(tǒng)嵌入式操作系統(tǒng)特征比較實(shí)時(shí)操作系統(tǒng)RTOS的主要特點(diǎn)實(shí)時(shí)性考慮的不是速度、性能、吞吐量,而是確定性,也就是說(shuō):當(dāng)一個(gè)事件發(fā)生的時(shí)候,可以確定性的保證在多長(zhǎng)時(shí)間內(nèi)得到處理,只要能滿足這個(gè)要求,就可以成為硬實(shí)時(shí)。實(shí)時(shí)操作系統(tǒng)根據(jù)任務(wù)執(zhí)行的實(shí)時(shí)性,分為“硬實(shí)時(shí)”和“軟實(shí)時(shí)”:“硬實(shí)時(shí)”操作系統(tǒng)必須使任務(wù)在確定的時(shí)間內(nèi)完成。“軟實(shí)時(shí)”操作系統(tǒng)能讓絕大多數(shù)任務(wù)在確定時(shí)間內(nèi)完成?!坝矊?shí)時(shí)”操作系統(tǒng)比“軟實(shí)時(shí)”操作系統(tǒng)響應(yīng)更快、實(shí)時(shí)性更高,“硬實(shí)時(shí)”操作系統(tǒng)大多應(yīng)用于工業(yè)領(lǐng)域衡量實(shí)時(shí)性的指標(biāo)1.中斷延時(shí):一個(gè)外部事件引發(fā)的中斷發(fā)生時(shí),到相應(yīng)的中斷處理程序第一條指令被執(zhí)行時(shí),所經(jīng)過(guò)的時(shí)間;一旦外部中斷發(fā)生,操作系統(tǒng)必須在足夠短的時(shí)間內(nèi)響應(yīng)中斷并做出處理2.任務(wù)搶占延時(shí):當(dāng)一個(gè)高優(yōu)先級(jí)的任務(wù)準(zhǔn)備就緒時(shí),從正在執(zhí)行的低優(yōu)先級(jí)任務(wù)中搶奪CPU資源所經(jīng)過(guò)的時(shí)間;一旦任務(wù)或線程所需的資源或進(jìn)一步運(yùn)行的條件準(zhǔn)備就緒,必須能夠馬上得到調(diào)度。顯然,基于非搶占式調(diào)度方式的內(nèi)核很難滿足這些實(shí)時(shí)性要求。實(shí)時(shí)Linux:從軟實(shí)時(shí)到硬實(shí)時(shí)Linux系統(tǒng)是軟實(shí)時(shí)(1)內(nèi)核不可搶占(2.6版本后已變成可搶占)(2)自旋鎖(3)中斷的優(yōu)先級(jí)高(4)同步操作時(shí)關(guān)閉中斷單內(nèi)核解決方案:給Linux內(nèi)核打補(bǔ)丁,例如:RT-Preempt;雙內(nèi)核解決方案:在硬件抽象層之上,運(yùn)行2個(gè)內(nèi)核:實(shí)時(shí)內(nèi)核+Linux內(nèi)核,它們分別向上層提供API函數(shù),例如:Xenomai;RT-linux目前影響Linux

內(nèi)核實(shí)時(shí)性因素主要有時(shí)鐘精度、系統(tǒng)中斷、進(jìn)程調(diào)度算法和內(nèi)核可搶占性等。

實(shí)時(shí)Linux:從軟實(shí)時(shí)到硬實(shí)時(shí)RTLinux的設(shè)計(jì)思想是:應(yīng)用硬件的實(shí)時(shí)約束將實(shí)時(shí)程序分割成短小簡(jiǎn)單的部分,較大部分承擔(dān)較復(fù)雜的任務(wù)。Xenomai在底層硬件和兩個(gè)內(nèi)核之間還加了一層硬件抽象層ADEOS(AdoptiveDomainEnvironmentforOperatingSystem)本章小結(jié)本章內(nèi)容眾多,從嵌入式系統(tǒng)課程教學(xué)的指導(dǎo)依據(jù)出發(fā),介紹了嵌入式系統(tǒng)的基本概念、分類(lèi)、應(yīng)用模式和典型結(jié)構(gòu),然后探討了單片機(jī)與嵌入式系統(tǒng)的關(guān)系,對(duì)嵌入式系統(tǒng)的技術(shù)發(fā)展進(jìn)行了展望,最后對(duì)嵌入式操作系統(tǒng)和實(shí)時(shí)操作系統(tǒng)做了分析討論,這些都為后續(xù)的課時(shí)內(nèi)容的學(xué)習(xí)奠定了基礎(chǔ)。第二章典型嵌入式架構(gòu)ARM第二章典型嵌入式架構(gòu)ARM(1)ARM處理器架構(gòu)ARM處理器概述

/ARMCortex-A8處理器架構(gòu)與工作模式/ARMCortex-A8存儲(chǔ)器管理/ARMCortex-A8異常管理/ARM安全機(jī)制trustzone技術(shù)(擴(kuò)展)(2)RISC-V指令集與架構(gòu)(擴(kuò)展)RISC-V概述/RISC-V指令集/RISC-V硬件平臺(tái)ARM處理器概述按指令系統(tǒng)分類(lèi),嵌入式微處理器分為:復(fù)雜指令集系統(tǒng)CISC:代表IntelX86精簡(jiǎn)指令集系統(tǒng)RISC:代表ARM(1)單周期的執(zhí)行。(2)采用高效的流水線操作。(3)無(wú)微代碼的硬連線控制。(4)指令格式的規(guī)格化和簡(jiǎn)單化。(5)采用面向寄存器組的指令。(6)采用Load/Store(裝載/存儲(chǔ))指令結(jié)構(gòu)。(7)注重編譯的優(yōu)化,力求有效地支撐高級(jí)語(yǔ)言程序。ARM處理器概述:內(nèi)核版本變化體系結(jié)構(gòu)ARM內(nèi)核版本v1ARM1v2ARM2v2aARM2aS、ARM3v3ARM6、ARM600、ARM610、ARM7、ARM700、ARM710v4StrongARM、ARM8、ARM810v4TARM7TDMI、ARM720T、ARM740T、ARM9TDMI、ARM920T、ARM940Tv5TEARM9E-S、ARM10TDMI、ARM1020Ev6ARM11、ARM1156T2-S、ARM1156T2F-S、ARM1176JZF-S、ARM11JZF-Sv7ARMCortex-M、ARMCortex-R、ARMCortex-Av8Cortex-A53/57、Cortex-A72等v4版本

該版本在v3版本的基礎(chǔ)上做了進(jìn)一步的擴(kuò)充,是目前被應(yīng)用最廣的ARM體系結(jié)構(gòu),ARM7TDMI、ARM9、StrongARM等都采用該結(jié)構(gòu)。它的主要特點(diǎn)有:(1)增加了對(duì)有符號(hào)、無(wú)符號(hào)半字及有符號(hào)字節(jié)的存/取指令;(2)增加T變種,引入Thumb狀態(tài),處理器工作在該狀態(tài)下時(shí),指令集為新增的16位Thumb指令集;(3)增加了系統(tǒng)模式,該模式下處理器使用用戶寄存器;(4)完善了軟件中斷(SWI)指令功能;(5)把一些未使用的指令空間捕獲為未定義指令。v5版本

.在v4版本的基礎(chǔ)上增加了一些新的指令。ARM9E、ARM10和Intel的XScale處理器都采用該版本結(jié)構(gòu)。它的主要特點(diǎn)有:(1)改進(jìn)了ARM指令集和Thumb指令集的混合使用效率;(2)增加了帶有鏈接和交換的轉(zhuǎn)移指令(BLX)、計(jì)數(shù)前導(dǎo)零指令(CLZ)、軟件斷點(diǎn)指令(BKPT);(3)v5TE版本中增加了DSP(數(shù)字信號(hào)處理)指令集,包括全部算法和16位指令集;支持新的Java,提供字節(jié)代碼執(zhí)行的硬件和優(yōu)化軟件加速性能。v6版本

該版本2001年發(fā)布,并應(yīng)用在2002年發(fā)布的ARM11處理器中。該版本降低耗電量的同時(shí)提高了圖像處理能力,適合無(wú)線和消費(fèi)類(lèi)電子產(chǎn)品;高數(shù)據(jù)吞吐量和高性能的結(jié)合。它的主要特點(diǎn)有:(1)支持多微處理器內(nèi)核;(2)Thumb代碼壓縮技術(shù);(3)引入Jazelle技術(shù),提高了Java性能,降低了Java應(yīng)用程序?qū)?nèi)存的空間占用;(4)通過(guò)SIMD(單指令多數(shù)據(jù)流)技術(shù),提高了音/視頻處理能力。v7版本

v7版本架構(gòu)是在v6版本的基礎(chǔ)上誕生的,對(duì)于早期的ARM處理器軟件提供了較好的兼容性。它的主要特點(diǎn)有:(1)采用了在Thumb代碼壓縮技術(shù)上發(fā)展的Thumb-2技術(shù),比純32位代碼減少了31%的內(nèi)存占用,減小了系統(tǒng)開(kāi)銷(xiāo),能夠提供比基于Thumb技術(shù)的解決方案高出38%的性能;(2)首次采用NEON信號(hào)處理擴(kuò)展集,它是一個(gè)結(jié)合64位和128位的SIMD指令集,對(duì)H.264和MP3等媒體解碼提供加速,將DSP和媒體處理能力提高了近4倍,并支持改良的浮點(diǎn)運(yùn)算;(3)支持改良的運(yùn)行環(huán)境,迎合不斷增加的JIT(JustInTime)和DAC(DynamicAdaptiveCompilation)技術(shù)的使用ARM處理器概述:ARMCortex處理器分類(lèi)Cortex-ACortex-RCortex-M設(shè)計(jì)特點(diǎn)高時(shí)鐘頻率,長(zhǎng)流水線,高性能,對(duì)媒體處理支持(NEON指令集擴(kuò)展)高時(shí)鐘頻率,較長(zhǎng)流水線,高確定性(中斷延遲低)通常較短的流水線,超低功耗系統(tǒng)特征內(nèi)存管理單元(MMU),cachememory,ARMTrustZone安全擴(kuò)展內(nèi)存保護(hù)單元(MPU),cachememory,緊耦合內(nèi)存(TCM)內(nèi)存保護(hù)單元(MPU),嵌套向量中斷控制器

(NVIC),喚醒中斷控制器(WIC),最新ARMTrustZone安全擴(kuò)展目標(biāo)市場(chǎng)移動(dòng)計(jì)算,智能手機(jī),高效能服務(wù)器,高端微處理器工業(yè)微控制器,汽車(chē)電子,硬盤(pán)控制器,基帶微控制器,深度嵌入系統(tǒng)(例如傳感器,MEMS,混合信號(hào)IC,IoT)Cortex-M3實(shí)現(xiàn)$1

ARM芯片ARMCortexArchitectureThumb-2ISA3StagePipeline1.22DMIPS/MHz–30%overARM7TDMI33Kgates–30%smallerthanARM7TDMILuminaryMicro的Stellaris系列MCU產(chǎn)品售價(jià)僅1美元ARMCortex-M3微控制器內(nèi)核,專(zhuān)門(mén)針對(duì)MCU應(yīng)用領(lǐng)域而設(shè)計(jì),突出低成本、低功耗和高效率。v8版本

2011年11月,ARM公司發(fā)布了新一代處理器架構(gòu)ARMv8的部分技術(shù)細(xì)節(jié),這是ARM公司的首款支持64位指令集的處理器架構(gòu),將被首先用于對(duì)擴(kuò)展虛擬地址和64位數(shù)據(jù)處理技術(shù)有更高要求的產(chǎn)品領(lǐng)域,如企業(yè)應(yīng)用、高檔消費(fèi)電子產(chǎn)品。目前的ARMv7架構(gòu)的主要特性都將在ARMv8架構(gòu)中得以保留或進(jìn)一步拓展,如TrustZone技術(shù)、虛擬化技術(shù)及NEONadvancedSIMD技術(shù)等。ARMv8架構(gòu)將64位架構(gòu)支持引入ARM架構(gòu)中,其中包括:(1)64位通用寄存器、SP(堆棧指針)和PC(程序計(jì)數(shù)器);(2)64位數(shù)據(jù)處理和擴(kuò)展的虛擬尋址;(3)兩種主要執(zhí)行狀態(tài):AArch64(64位執(zhí)行狀態(tài))和AArch32(32位執(zhí)行狀態(tài));ARMCortex-A8處理器架構(gòu)Cortex-A8處理器是第一款基于ARMv7構(gòu)架的的應(yīng)用處理器,使用了Thumb-2技術(shù),新增了130條指令。新增的功能使用戶在進(jìn)行終端服務(wù)時(shí)無(wú)需在ARM和Thumb模式間進(jìn)行切換,產(chǎn)生的代碼保持Thumb指令的傳統(tǒng)代碼密度,卻可以實(shí)現(xiàn)32位ARM代碼的性能流水線技術(shù)理想的3級(jí)流水線(ARM7TDMI:無(wú)訪存操作)LDR流水線從存儲(chǔ)器中讀取指令解碼指令中用到的寄存器寄存器讀(從寄存器Bank)移位及ALU操作寄存器寫(xiě)(到寄存器Bank)思考題設(shè)指令由取指、分析、執(zhí)行3個(gè)子部件完成,每個(gè)子部件的工作周期均為Dt,采用常規(guī)標(biāo)量單流水線處理機(jī)。若連續(xù)執(zhí)行10條指令,則共需時(shí)間?Dt。(3)A.8 B.10 C.12 D.142.1.4

ARM開(kāi)發(fā)工具簡(jiǎn)介ARM開(kāi)發(fā)工具就是ARM公司為龐大的各領(lǐng)域工程師和開(kāi)發(fā)人員裝備的完整的開(kāi)發(fā)工具鏈,幫助迅速搭建開(kāi)發(fā)平臺(tái),降低開(kāi)發(fā)的成本和難度,縮短開(kāi)發(fā)周期,讓工程師們充分針對(duì)ARM架構(gòu)處理器進(jìn)行開(kāi)發(fā)。根據(jù)開(kāi)發(fā)目標(biāo)平臺(tái)的不同,ARM提供不同的工具解決方案。最常見(jiàn)的是MDK-ARM、RVDS,ARMDS5。他們分別針對(duì)低端和高端ARM處理器應(yīng)用。1.MDK-ARMRealViewMicrocontrollerDevelopmentKit(MDK)支持基于包括ARM7,ARM9,Cortex-M3微控制處理器等在內(nèi)的眾多處理器,例如Atmel,F(xiàn)reescale,Luminary,NXP,OKI,Samsung,Sharp,ST,TI等廠家的產(chǎn)品。MDK提供工業(yè)標(biāo)準(zhǔn)的編譯工具和強(qiáng)大的調(diào)試支持。MDK主要是為終端客戶提供價(jià)格低廉,功能強(qiáng)大的開(kāi)發(fā)工具。集成了RealView編譯工具,KeiluVision開(kāi)發(fā)環(huán)境,支持基于ARM7,ARM9,Cortex-M1,Cortex-M3,Cortex-R4等ARM產(chǎn)品的仿真,提供非常高效的RTOSKernel,此外,提供的Real-Time庫(kù)還有TCP/IP網(wǎng)絡(luò)套件,F(xiàn)lash文件系統(tǒng),USB器件接口,CAN總線接口等,方便終端用戶進(jìn)行應(yīng)用開(kāi)發(fā)。2.RVDSRVDS(RealViewDevelopmentSuite)是ARM公司推出的專(zhuān)為SOC,F(xiàn)PGA以及ASIC用戶開(kāi)發(fā)復(fù)雜嵌入式應(yīng)用程序或者和操作系統(tǒng)平臺(tái)組件接口而設(shè)計(jì)的開(kāi)發(fā)工具,被業(yè)界稱(chēng)為最好的ARM開(kāi)發(fā)工具。RVDS支持器件設(shè)計(jì),支持多核調(diào)試,支持基于所有ARM和Cortex系列CPU的程序開(kāi)發(fā)。RVDS還可以和第三方軟件進(jìn)行很好的連接。RVDS是ARM公司繼SDT與ADS1.2之后主推的新一代開(kāi)發(fā)工具,目前最高版本是4.1。RVDS對(duì)代碼密度的提升、代碼執(zhí)行速度的提高,都可以由ARM開(kāi)發(fā)工具自動(dòng)實(shí)現(xiàn),而不需要軟件開(kāi)發(fā)人員花費(fèi)過(guò)多的時(shí)間手動(dòng)優(yōu)化高級(jí)語(yǔ)言代碼。這是RVDS的優(yōu)勢(shì)所在。RVDS包含有四個(gè)模塊:(1)IDE:RVDS中集成了EclipseIDE,用于代碼的編輯和管理。支持語(yǔ)句高亮和多顏色顯示,以工程的方式管理代碼,支持第三方Eclipse功能插件。(2)RVCT:RVCT是業(yè)界最優(yōu)秀的編譯器,支持全系列的ARM和XSCALE架構(gòu),支持匯編語(yǔ)言、C語(yǔ)言和C++語(yǔ)言。RVDS的編譯器根據(jù)最新的ARM架構(gòu)進(jìn)行特別的優(yōu)化,針對(duì)每個(gè)ARM架構(gòu)都提供最好的代碼執(zhí)行性能,最優(yōu)的代碼密度??梢愿鶕?jù)需要選擇調(diào)試信息級(jí)別,以及不同的代碼優(yōu)化方向和優(yōu)化級(jí)別。(3)RVD:是RVDS中的調(diào)試軟件,功能強(qiáng)大,支持Flash燒寫(xiě)和多核調(diào)試,支持多種調(diào)試手段,快速錯(cuò)誤定位。(4)RVISS:是指令集仿真器,支持外部設(shè)備虛擬,可以使軟件開(kāi)發(fā)和硬件開(kāi)發(fā)同步進(jìn)行,同時(shí)可以分析代碼性能,加快軟件開(kāi)發(fā)速度。3.ARMDS5ARMDS5,也叫ARMDS-5,是一款支持開(kāi)發(fā)所有ARM內(nèi)核芯片的集成開(kāi)發(fā)環(huán)境,也是一套針對(duì)ARM支持的linux和android平臺(tái)的全面的端到端軟件開(kāi)發(fā)工具套件。ARMDS5提供具有跟蹤、系統(tǒng)范圍性能分析器、實(shí)時(shí)系統(tǒng)模擬器和編譯器的應(yīng)用程序和內(nèi)核空間調(diào)試器。這些功能包含在定制的、功能強(qiáng)大且用戶友好的基于Eclipse的IDE中。借助于該工具套件,可以很輕松地為ARM支持的系統(tǒng)開(kāi)發(fā)和優(yōu)化基于Linux的系統(tǒng),縮短開(kāi)發(fā)和測(cè)試周期,并且可幫助工程師創(chuàng)建資源利用效率高的軟件。圖2-2ARMDS-5功能框架圖2-1ARMDS5的工程配置思考題某計(jì)算機(jī)系統(tǒng)由下圖所示的部件構(gòu)成,假定每個(gè)部件的千小時(shí)可靠度R均為0.9,則該系統(tǒng)的千小時(shí)可靠度約為(2)。(2)A.0.882 B.0.951 C.0.9 D.0.99思考題分析

本題考查系統(tǒng)可靠度的概念。串聯(lián)部件的可靠度=各部件的可靠度的乘積。并聯(lián)部件的可靠度=1?–?各部件失效率的乘積。題目中給出的系統(tǒng)由三個(gè)部件串聯(lián)組成,其中第二、第三部件又分別由兩個(gè)部件并聯(lián)構(gòu)成,因此整個(gè)系統(tǒng)的可靠度為0.9?′?(1?–?(1?–?0.9)?′?(1?–?0.9))?′?(1?–?(1?–?0.9)?′?(1?–?0.9))?≈?0.882參考答案(2)A

Cortex-A8處理器工作模式和狀態(tài)PartThree2.3ARMCortex-A8處理器工作模式用戶模式非用戶模式,或特權(quán)模式異常模式特權(quán)模式:是為了服務(wù)中斷或異常,或訪問(wèn)受保護(hù)的資源,具有多系統(tǒng)資源的完全訪問(wèn)權(quán)限,可自由的切換工作模式。用戶模式系統(tǒng)模式:系統(tǒng)模式不能由任何異常進(jìn)入,它有與用戶模式完全相同的寄存器。系統(tǒng)模式供需要訪問(wèn)系統(tǒng)資源的操作系統(tǒng)任務(wù)使用,這樣避免使用和異常模式相關(guān)的寄存器,保證在任何異常發(fā)生時(shí)都不會(huì)使任務(wù)的狀態(tài)不可靠。異常模式:除了可以通過(guò)程序切換進(jìn)入外,還可以在發(fā)生特定的異常中斷時(shí)進(jìn)入。每一種異常模式都有一組專(zhuān)用的寄存器,以保證在進(jìn)入異常模式時(shí)用戶模式下的寄存器(保存著工作模式切換前的程序運(yùn)行狀態(tài))不被破壞。Cortex-A8處理器狀態(tài)Cortex-A8處理器是32位處理器,可執(zhí)行32位ARM指令集指令,同時(shí)兼容16位Thumb-2指令集指令和數(shù)據(jù)類(lèi)型。有3種工作狀態(tài),這些狀態(tài)由程序狀態(tài)寄存器(CPSR)的T位和J位控制與切換。(1)ARM狀態(tài):執(zhí)行32位的字對(duì)齊的ARM指令集指令,T位和J位為0;(2)Thumb狀態(tài):執(zhí)行16位或32位半字對(duì)齊的Thumb-2指令集指令,T位為1,J位為0;(3)ThumbEE狀態(tài):執(zhí)行為動(dòng)態(tài)產(chǎn)生目標(biāo)而設(shè)計(jì)的16位或32位半字對(duì)齊的Thumb-2指令集的變體,T位和J位為1。ARM指令必須在ARM狀態(tài)下執(zhí)行;Thumb指令也必須在Thumb狀態(tài)下執(zhí)行;ARM處理器可以在兩種狀態(tài)下切換,只要遵循ATPCS調(diào)用規(guī)則,ARM子程序和Thumb子程序之間可以相互調(diào)用。ARM狀態(tài)和Thumb狀態(tài)之間的切換并不影響處理器工作模式和寄存器組的內(nèi)容。處理器復(fù)位后開(kāi)始執(zhí)行代碼時(shí),處于ARM狀態(tài)。

Cortex-A8存儲(chǔ)器管理PartFour2.4思考題:若內(nèi)存按字節(jié)編址,用存儲(chǔ)容量為8K*8比特的存儲(chǔ)器芯片構(gòu)成地址編號(hào)A0000H~DFFFFH的內(nèi)存空間,則至少需要多少片。本題考查內(nèi)存容量的計(jì)算。給定起、止地址碼的內(nèi)存容量?=?終止地址?–?起始地址?+?1。將終止地址加1等于E0000H,再減去起始地址,即E0000H?–?A0000H?=?40000H。十六進(jìn)制的?(40000)16?=?218。組成內(nèi)存儲(chǔ)器的芯片數(shù)量?=?內(nèi)存儲(chǔ)器的容量/單個(gè)芯片的容量。218/(8*210)??=?32ARM的數(shù)據(jù)類(lèi)型Cortex-A8是32位處理器,支持多種數(shù)據(jù)類(lèi)型:字節(jié)(Byte):8位;以字節(jié)為單位,按1字節(jié)對(duì)齊;半字(Halfword):16位;以半字為單位,按2字節(jié)對(duì)齊,地址最末一位為0;字(Word):32位;雙字(Doubleword):64位。浮點(diǎn)運(yùn)算使用在ARM硬件指令集中未定義的數(shù)據(jù)類(lèi)型。另外ARM公司還提供了C語(yǔ)言編寫(xiě)的浮點(diǎn)庫(kù)作為ARM浮點(diǎn)指令集的替代方法(Thumb代碼只能使用浮點(diǎn)指令集)。以字為單位,按4字節(jié)對(duì)齊,地址最末兩位為00。ARM的體系結(jié)構(gòu)將存儲(chǔ)器看成是從0x00000000地址開(kāi)始的按字節(jié)編碼的線性存儲(chǔ)結(jié)構(gòu),每個(gè)字節(jié)都有對(duì)應(yīng)的地址編碼。由于數(shù)據(jù)有不同的字節(jié)大?。?字節(jié)、2字節(jié)、4字節(jié)等),導(dǎo)致數(shù)據(jù)在存儲(chǔ)器中存放不是連續(xù)的,這樣降低了存儲(chǔ)系統(tǒng)的效率,甚至引起數(shù)據(jù)讀寫(xiě)錯(cuò)誤。因此數(shù)據(jù)必須按照一下方式對(duì)齊:以字為單位,按4字節(jié)對(duì)齊,地址最末兩位為00。以半字為單位,按2字節(jié)對(duì)齊,地址最末一位為0;以字節(jié)為單位,按1字節(jié)對(duì)齊;2.4.2浮點(diǎn)數(shù)據(jù)類(lèi)型浮點(diǎn)運(yùn)算使用在ARM硬件指令集中未定義的數(shù)據(jù)類(lèi)型。在協(xié)處理器指令空間定義了一系列浮點(diǎn)指令,這些指令全部可以通過(guò)未定義指令異常(該異常收集所有硬件協(xié)處理器不接受的協(xié)處理器指令)在軟件中實(shí)現(xiàn),其中的一小部分也可以由浮點(diǎn)運(yùn)算協(xié)處理器FPA10以硬件方式實(shí)現(xiàn)。另外ARM公司還提供了C語(yǔ)言編寫(xiě)的浮點(diǎn)庫(kù)作為ARM浮點(diǎn)指令集的替代方法(Thumb代碼只能使用浮點(diǎn)指令集)。該庫(kù)支持IEEE標(biāo)準(zhǔn)的單精度和雙精度格式。C編譯器有一個(gè)關(guān)鍵字標(biāo)志來(lái)選擇,它產(chǎn)生的代碼與軟件仿真(通過(guò)避免中斷、譯碼和浮點(diǎn)指令仿真)相比既快又緊湊。大/小端存儲(chǔ)模式Cortex-A8處理器支持大端(Big-endian)、小端(Little-endian)、混合大小端模式和非對(duì)齊數(shù)據(jù)訪問(wèn)??梢酝ㄟ^(guò)硬件的方式設(shè)置端模式。大端模式是被存放字?jǐn)?shù)據(jù)的高字節(jié)存儲(chǔ)在存儲(chǔ)系統(tǒng)的低地址中,而被存放的字?jǐn)?shù)據(jù)的低字節(jié)則存放在存儲(chǔ)系統(tǒng)的高地址中。小端模式中,存儲(chǔ)系統(tǒng)的低地址中存放的是被放字?jǐn)?shù)據(jù)中的低字節(jié)內(nèi)容,存儲(chǔ)系統(tǒng)的高地址存放的是被存字?jǐn)?shù)據(jù)中的高字節(jié)內(nèi)容。例如,一個(gè)32位的字?jǐn)?shù)據(jù)

0x12345678處理器大小端模式的判斷typedefunion{charchChar;shortshShort;}UnEndian;boolIsBigEndian(){UnEndiantest;test.shShort=0x10;if(test.chChar==0x10){returntrue;}returnfalse;}同時(shí)也可以采用如本書(shū)微課2.4.3大小端模式與程序判斷的完整程序進(jìn)行演示如果需要在大端模式和小端模式之間相互轉(zhuǎn)換,最經(jīng)典的做法是使用套接字庫(kù)中的ntohs、ntohl、htons和htonl進(jìn)行轉(zhuǎn)換。內(nèi)存和I/O–大小端

大端:小端:0xb32045000xddddddd00xb32045000xddddddd0f6f673734b4bcdcddada0000實(shí)例變量A:wordA=0xf6734bcd,在內(nèi)存中的起始地址為0xb3204500變量B:halfwordB=218,在內(nèi)存中的起始地址為0xddddddd0問(wèn)題:halfwordB=218與wordC=218在內(nèi)存中的存放方式有何不同?請(qǐng)分大端和小端兩種情況說(shuō)明。圖2-7ARM狀態(tài)下的通用寄存器組圖2-8ARM狀態(tài)下的狀態(tài)寄存器組不分組的通用寄存器分組的通用寄存器在特權(quán)模式下,特定模式下的寄存器陣列才是有效的。=特權(quán)模式Cortex-A8存儲(chǔ)器管理:通用寄存器組

R8~R12寄存器分別對(duì)應(yīng)兩個(gè)不同的物理寄存器,分別是快速中斷模式下的相應(yīng)存儲(chǔ)器和非快速中斷模式下的相應(yīng)存儲(chǔ)器。

R13、R14寄存器分別對(duì)應(yīng)七個(gè)不同的物理存儲(chǔ)器,除了用戶和系統(tǒng)模式共用一個(gè)物理寄存器外,其它六個(gè)分別是fiq、svc、abt、irq、und和mon模式下的不同物理寄存器。R13常作堆棧指針(SP:StackPointer);R14子程序鏈接寄存器(LR:LinkRegister),該寄存器由ARM編譯器自動(dòng)使用。在執(zhí)行BL和BLX指令時(shí),R14保存返回地址。。

程序計(jì)數(shù)器R15(PC),用于記錄程序當(dāng)前的運(yùn)行地址。ARM處理器每執(zhí)行一條指令,都會(huì)把PC增加4字節(jié)(Thumb模式為兩個(gè)字節(jié))。此外,相應(yīng)的分支指令(如BL等)也會(huì)改變PC的值。在ARM狀態(tài)下,PC字對(duì)齊;在Thumb和ThumbEE狀態(tài)下,PC半字對(duì)齊。FIQ模式下有7個(gè)分組寄存器映射到R8~R14,即R8_fiq~R14_fiq,所以很多快速中斷處理不需要保存任何寄存器。Cortex-A8存儲(chǔ)器管理:狀態(tài)寄存器主要功能是:保存最近執(zhí)行的算術(shù)或邏輯運(yùn)算的信息、控制中斷的允許或禁止、設(shè)置處理器工作模式(1)條件標(biāo)志位:N、Z、C和V統(tǒng)稱(chēng)為條件標(biāo)志位,這些標(biāo)志位會(huì)根據(jù)程序中的算術(shù)和邏輯指令的執(zhí)行結(jié)果修改。處理器則通過(guò)測(cè)試這些標(biāo)志位來(lái)確定一條指令是否執(zhí)行。N(Negative):N=1表示運(yùn)算的結(jié)果為負(fù)數(shù),N=0表示結(jié)果為正數(shù)或零。Z(Zero):Z=1表示運(yùn)算的結(jié)果為零,Z=0表示運(yùn)算的結(jié)果不為零。C(Carry):在加法指令中,當(dāng)結(jié)果產(chǎn)生了進(jìn)位,C=1,其他情況C=0;在減法指令中,當(dāng)運(yùn)算發(fā)生了借位,C=1,其他情況C=0;在移位運(yùn)算指令中,C被設(shè)置成被移位寄存器最后移出去的位。V(oVerflow):對(duì)于加/減法運(yùn)算指令,當(dāng)操作數(shù)和運(yùn)算結(jié)果為二進(jìn)制補(bǔ)碼表示的帶符號(hào)數(shù)時(shí),V=1表示符號(hào)位溢出。(2)Q標(biāo)志位:在帶有DSP指令擴(kuò)展的ARMv5及以上版本中,Q標(biāo)志位用于指示增強(qiáng)的DAP指令是否發(fā)生了溢出。Q標(biāo)志位具有粘性,當(dāng)因某條指令將其設(shè)置為1時(shí),它將一直保持為1直到通過(guò)MSR指令寫(xiě)CPSR寄存器明確地將該位清0,不能根據(jù)Q標(biāo)志位的狀態(tài)來(lái)有條件地執(zhí)行某條指令。(3)IT塊:IT塊用于對(duì)Thumb指令集中if-then-else這一類(lèi)語(yǔ)句塊的控制。如果有IT塊,則IT[7:5]為當(dāng)前IT塊的基本條件碼。在沒(méi)有IT塊處于活動(dòng)狀態(tài)時(shí),該3位為000。IT[4:0]表示條件執(zhí)行指令的數(shù)量,不論指令的條件是基本條件碼或是基本條件的逆條件碼。在沒(méi)有IT塊處于活動(dòng)狀態(tài)時(shí),該5位為00000。當(dāng)處理器執(zhí)行IT指令時(shí),通過(guò)指令的條件和指令中Then、Else(T和E)參數(shù)來(lái)設(shè)置這些位。(4)J標(biāo)志位:用于表示處理器是否處于ThumbEE狀態(tài)。T=1時(shí),J=0,表示處理器處于Thumb狀態(tài)。J=1,表示處理器處于ThumbEE狀態(tài)。注意:T=0時(shí),不能夠設(shè)置J=1;當(dāng)T=0時(shí),J=0。不能通過(guò)MSR指令來(lái)改變CPSR的J標(biāo)志位。(5)GE[3:0]位:該位用于表示在SIMD指令集中的大于、等于標(biāo)志。在任何模式下讀可寫(xiě)。(6)E標(biāo)志位:該標(biāo)志位控制存取操作的字節(jié)順序。0表示小端操作,1表示大端操作。Arm和Thumb指令集都提供指令用于設(shè)置和清除E標(biāo)志位。當(dāng)使用CFGEND0信號(hào)復(fù)位時(shí),E標(biāo)志位將被初始化。(7)A標(biāo)志位:表示異步異常禁止。該位自動(dòng)置為1,用于禁止不精確的數(shù)據(jù)中止。(8)控制位:程序狀態(tài)寄存器的低8位是控制位。當(dāng)異常發(fā)生時(shí),這些位的值將發(fā)生改變。在特權(quán)模式下,可通過(guò)軟件編程來(lái)修改這些標(biāo)志位的值。中斷屏蔽位:I=1,IRQ中斷被屏蔽;F=1,F(xiàn)IQ中斷被屏蔽。狀態(tài)控制位:T=0,處理器處于ARM狀態(tài);T=1,處理器處于Thumb狀態(tài)。模式控制位:M[4:0]為模式控制位,決定處理器的工作模式,ARMState與ThumbState寄存器關(guān)系CPSR寄存器的使用

CodeA

voidincrement(int*restrictb,

int*restrictc)

{

inti;

for(i=0;i<100;i++)

{

c[i]=b[i]+1;

}

}CodeB

voidincrement(int*b,int*c)

{

inti;

int*pb,*pc;

intb3,b4;

pb=b-1;

pc=c-1;

b3=pb[1];

for(i=(100/2);i!=0;i--)

{

b4=*(pb+=2);

pc[1]=b3+1;

b3=pb[1];

*(pc+=2)=b4+1;

}

}

循環(huán)100次變成了循環(huán)50次(loopunrolling),減少了跳轉(zhuǎn)次數(shù);數(shù)組變成了指針,減少每次計(jì)算數(shù)組偏移量的指令;微調(diào)了不同代碼操作的執(zhí)行順序,減少了流水線stall的情況;循環(huán)從++循環(huán)變成了――循環(huán)。這樣可以使用CPSR的條件位,為每次循環(huán)減少了一條判斷指令Cortex-A8存儲(chǔ)系統(tǒng)MMU的任務(wù)

(1)實(shí)現(xiàn)虛擬存儲(chǔ)空間到物理存儲(chǔ)空間的映射。(2)存儲(chǔ)器訪問(wèn)權(quán)限的控制,提供硬件機(jī)制的內(nèi)存訪問(wèn)授權(quán)。(3)設(shè)置虛擬存儲(chǔ)空間緩沖的特性。虛擬地址由編譯器和連接器在定位程序時(shí)分配;物理地址用來(lái)訪問(wèn)實(shí)際的主存儲(chǔ)器硬件模塊。在ARM中采用了頁(yè)(Page)式虛擬存儲(chǔ)管理方式。虛擬地址空間劃分成稱(chēng)為頁(yè)的單位,而相應(yīng)的物理地址空間也被進(jìn)行劃分,單位是頁(yè)幀(frame)。頁(yè)與頁(yè)幀之間在MMU的調(diào)度下是如何進(jìn)行映射:虛擬地址0被送往MMU,MMU發(fā)現(xiàn)該地址在頁(yè)0(0~4095)的范圍內(nèi),頁(yè)0所映射的頁(yè)框?yàn)?(頁(yè)框2的地址范圍是8192~12287)。因此MMU將該虛擬地址轉(zhuǎn)化為物理地址8192,并把地址8192送到內(nèi)存地址總線上。內(nèi)存對(duì)地址的映射過(guò)程并不清楚,它只是接收到一個(gè)對(duì)地址8192的訪問(wèn)請(qǐng)求并執(zhí)行。MMU的一個(gè)重要任務(wù)就是讓每個(gè)任務(wù)都運(yùn)行在各自的虛擬存儲(chǔ)空間中。MMU做為轉(zhuǎn)換器,將程序和數(shù)據(jù)的虛擬地址轉(zhuǎn)換成實(shí)際的物理地址,也就是實(shí)現(xiàn)虛擬存儲(chǔ)空間到物理存儲(chǔ)空間的映射。除此之外,MMU的其他重要功能還包括:(1)存儲(chǔ)器訪問(wèn)權(quán)限的控制,提供硬件機(jī)制的內(nèi)存訪問(wèn)授權(quán)。(2)設(shè)置虛擬存儲(chǔ)空間緩沖的特性。MMU中的虛擬地址轉(zhuǎn)換成實(shí)際的物理地址的變換過(guò)程是通過(guò)兩級(jí)頁(yè)表實(shí)現(xiàn)的:(1)一級(jí)頁(yè)表中包含有以段為單位的地址變換條目以及指向二級(jí)頁(yè)表的指針。一級(jí)頁(yè)表實(shí)現(xiàn)的地址映射力度較大。以段為單位的地址變換過(guò)程只需要一級(jí)頁(yè)表。(2)二級(jí)頁(yè)表中包含有以大頁(yè)和小頁(yè)為單位的地址變換條目。有一種類(lèi)型的二級(jí)頁(yè)表還包含有以極小頁(yè)為單位的地址變換條目。以頁(yè)為單位的地址變換過(guò)程需要二級(jí)頁(yè)表。

Cortex-A8異常處理PartFive2.5Cortex-A8異常處理Cortex-A8異常處理Cortex-A8異常處理:響應(yīng)與返回ARM處理器對(duì)異常的響應(yīng)過(guò)程如下:(1)進(jìn)入與特定的異常相應(yīng)的運(yùn)行模式。(2)將CPSR寄存器的值保存到將要執(zhí)行的異常中斷各自對(duì)應(yīng)的SPSR_mode中。(3)將引起異常指令的下一條指令的地址存入相應(yīng)的鏈接寄存器LR(R14_mode)。(4)設(shè)置CPSR寄存器的低5位,使處理器進(jìn)入相應(yīng)的工作模式。(5)根據(jù)異常類(lèi)型,將相應(yīng)向量地址強(qiáng)制復(fù)制給程序計(jì)數(shù)器PC。ARM處理器從異常處理程序中返回的過(guò)程如下:(1)恢復(fù)原來(lái)被保存的用戶寄存器。(2)將SPSR_mode寄存器的值復(fù)制到CPSR中,以恢復(fù)被中斷的程序工作狀態(tài)。(3)根據(jù)異常類(lèi)型將PC寄存器值恢復(fù)成斷點(diǎn)地址,以執(zhí)行原來(lái)被中斷打斷的程序。(4)清除CPSR中的中斷屏蔽標(biāo)志位I和F,開(kāi)放外部中斷和快速中斷。Cortex-A8處理器S5PC100中斷機(jī)制S5PC100集成了3個(gè)向量中斷控制器(VIC)和3個(gè)TZIC(針對(duì)于TrustZone技術(shù)所涉及的中斷控制器)擴(kuò)展:ARM安全機(jī)制trustzone技術(shù)TrustZone技術(shù)的系統(tǒng)架構(gòu)TrustZone構(gòu)建的可信執(zhí)行環(huán)境擴(kuò)展:RISC-V概述:模塊化的指令子集

RISC-V的指令集使用模塊化方式進(jìn)行組織,每一個(gè)模塊使用一個(gè)英文字母來(lái)表示。RISC-V最基本也是唯一強(qiáng)制要求實(shí)現(xiàn)的指令集部分是由I字母表示整數(shù)指令子集。其他的指令子集部分均為可選的模塊,其代表性的模塊包括M、A、F、D、C,RISC-V概述:規(guī)整的指令編碼RISC-V

基本指令類(lèi)型分別為R類(lèi)、I類(lèi)、S類(lèi)、U類(lèi)。RISC-V

的指令集編碼非常規(guī)整,指令所需的通用寄存器的索引(INDEX)都被放在固定的位置。典型RISC-V開(kāi)源處理器核與ARM處理器對(duì)比ARM和RISC-V都是開(kāi)放授權(quán)的指令集,ARM是商業(yè)授權(quán)指令集,RISC-V是開(kāi)源的指令集。但

RISC-V因?yàn)橛兄?jiǎn)、高效、低能耗、模塊化、可拓展、免費(fèi)開(kāi)放、無(wú)歷史負(fù)累低效指令等優(yōu)勢(shì),常見(jiàn)RISCV_ISA軟件核:賽昉SiFive賽昉科技RISC-V指令集架構(gòu)單板計(jì)算機(jī)基于JH7110的VisionFive2單板計(jì)算機(jī)本章小結(jié)本章內(nèi)容眾多,從ARM體系結(jié)構(gòu)的概念出發(fā),介紹了ARMCortex-A8處理器的組成結(jié)構(gòu)、寄存器組織、運(yùn)行模式和狀態(tài)、異常處理以及存儲(chǔ)管理方法,然后對(duì)RISC-V指令集做了分析討論,這些都是為嵌入式Linux軟件開(kāi)發(fā)的學(xué)習(xí)奠定了基礎(chǔ)。第3章ARM指令集目錄3.1ARM指令集概述3.2ARM指令的尋址方式3.3ARM指令簡(jiǎn)介3.4Thumb指令簡(jiǎn)介3.5ARM匯編語(yǔ)言簡(jiǎn)介3.6C語(yǔ)言與匯編語(yǔ)言的混合編程3.7本章小結(jié)在嵌入式系統(tǒng)開(kāi)發(fā)中,目前最常用的編程語(yǔ)言是匯編語(yǔ)言和C語(yǔ)言。在較復(fù)雜的嵌入式軟件中,由于C語(yǔ)言編寫(xiě)程序較方便,結(jié)構(gòu)清晰,而且有大量支持庫(kù),所以大部分代碼采用C語(yǔ)言編寫(xiě),特別是基于操作系統(tǒng)的應(yīng)用程序設(shè)計(jì)。但是在系統(tǒng)初始化、BootLoadr、中斷處理等,對(duì)時(shí)間和效率要求較嚴(yán)格的地方仍舊要使用匯編語(yǔ)言來(lái)編寫(xiě)相應(yīng)代碼塊。本章將介紹ARM指令集指令及匯編語(yǔ)言的相關(guān)知識(shí)。

ARM指令集概述PartOne3.1ARM處理器的指令集主要有:ARM指令集,是ARM處理器的原生32位指令集,所有指令長(zhǎng)度都是32位,以字對(duì)齊(4字節(jié)邊界對(duì)齊)方式存儲(chǔ);該指令集效率高,但是代碼密度較低。Thumb指令集是16位指令集,2字節(jié)邊界對(duì)齊,是ARM指令集的子集;在具有較高代碼密度的同時(shí),仍然保持ARM的大多數(shù)性能優(yōu)勢(shì)。Thumb-2指令集是對(duì)Thumb指令集的擴(kuò)展,提供了幾乎與ARM指令集完全相同的功能,同時(shí)具有16位和32位指令,既繼承了Thumb指令集的高代碼密度,又能實(shí)現(xiàn)ARM指令集的高性能;2字節(jié)邊界對(duì)齊,16位和32位指令可自由混合。Thumb-2EE指令集是Thumb-2指令集的一個(gè)變體,用于動(dòng)態(tài)產(chǎn)生的代碼;不能與ARM指令集和Thumb指令集交織在一起。除了上面介紹的指令集外,ARM處理器還有針對(duì)協(xié)處理器的擴(kuò)展指令集,如普通協(xié)處理器指令、NEON和VFP擴(kuò)展指令集、無(wú)線MMX技術(shù)擴(kuò)展指令集等。3.1.1指令格式ARM指令集的指令基本格式如下:<opcode>{<cond>}{S}<Rd>,<Rn>,<shift_operand>指令中“<>”內(nèi)的項(xiàng)是必需的,“{}”內(nèi)的項(xiàng)是可選的。符號(hào)說(shuō)明opcode操作碼,即指令助記符,如MOV、SUB、LDR等cond條件碼,描述指令執(zhí)行的條件S可選后綴,指令后加上“S”,指令執(zhí)行成功完成后自動(dòng)更新CPSR寄存器中的條件標(biāo)志位Rd目的寄存器Rn存放第1個(gè)操作數(shù)的寄存器shift_operand第2個(gè)操作數(shù),可以是寄存器、立即數(shù)等ARM指令集中幾乎每條指令都可以是條件執(zhí)行的,由cond可選條件碼來(lái)決定,位于ARM指令的最高4位[31:28],可使用的條件碼如表3-2所示。每種條件碼的助記符由兩個(gè)英文符號(hào)表示,在指令助記符的后面和指令同時(shí)執(zhí)行。根據(jù)程序狀態(tài)寄存器CPSR中的條件標(biāo)志位[31:28]判斷當(dāng)前條件是否滿足,若滿足則執(zhí)行指令。若指令中有后綴S,則根據(jù)執(zhí)行結(jié)果更新程序狀態(tài)寄存器CPSR中的條件標(biāo)志位[31:28]。3.1.2

指令的條件碼指令條件碼助記符CPSR條件標(biāo)志位值含義0000EQZ=1相等0001NEZ=0不相等0010CS/HSC=1無(wú)符號(hào)數(shù)大于或等于0011CC/LOC=0無(wú)符號(hào)數(shù)小于0100MIN=1負(fù)數(shù)0101PLN=0正數(shù)或零0110VSV=1溢出0111VCV=0沒(méi)有溢出1000HIC=1,Z=0無(wú)符號(hào)數(shù)大于1001LSC=0,Z=1無(wú)符號(hào)數(shù)小于或等于1010GEN=V有符號(hào)數(shù)大于或等于

1011LTN!=V有符號(hào)數(shù)小于

1100GTZ=0,N=V有符號(hào)數(shù)大于

1101LEZ=1,N!=V有符號(hào)數(shù)小于或等于

1110AL任何無(wú)條件執(zhí)行(指令默認(rèn)條件)1111NV任何從不執(zhí)行(不要執(zhí)行)

ARM指令的尋址方式PartTwo3.2尋址方式是指處理器根據(jù)指令中給出的地址信息,找出操作數(shù)所存放的物理地址,實(shí)現(xiàn)對(duì)操作數(shù)的訪問(wèn)。根據(jù)指令中給出的操作數(shù)的不同形式,ARM指令系統(tǒng)支持的尋址方式有:立即尋址、寄存器尋址、寄存器間接尋址、寄存器移位尋址、變址尋址、多寄存器尋址、堆棧尋址、塊復(fù)制尋址和相對(duì)尋址等。ARM指令集與Thumb指令集的關(guān)系Thumb指令集具有靈活、小巧的特點(diǎn)ARM指令集支持ARM核所有的特性,具有高效、快速的特點(diǎn)

操作數(shù)的值在寄存器中,指令中的地址碼字段指出的是寄存器編號(hào),指令執(zhí)行時(shí)直接取出寄存器值來(lái)操作。寄存器尋址指令舉例如下:MOVR1,R2 ;將R2的值存入R1SUBR0,R1,R2;將R1的值減去R2的值,結(jié)果保存到R0

0xAA0x55R2R1尋址方式分類(lèi)——寄存器尋址MOVR1,R20xAA

立即尋址指令中的操作碼字段后面的地址碼部分即是操作數(shù)本身,也就是說(shuō),數(shù)據(jù)就包含在指令當(dāng)中,取出指令也就取出了可以立即使用的操作數(shù)(這樣的數(shù)稱(chēng)為立即數(shù))。立即尋址指令舉例如下:SUBS R0,R0,#1;R0減1,結(jié)果放入R0,并且影響標(biāo)志位MOV R0,#0xFF000;將立即數(shù)0xFF000裝入R0寄存器

0x55R0MOVR0,#0xFF00程序存儲(chǔ)尋址方式分類(lèi)——立即尋址MOVR0,#0xFF000xFF00從代碼中獲得數(shù)據(jù)

寄存器移位尋址是ARM指令集特有的尋址方式。當(dāng)?shù)?個(gè)操作數(shù)是寄存器移位方式時(shí),第2個(gè)寄存器操作數(shù)在與第1個(gè)操作數(shù)結(jié)合之前,選擇進(jìn)行移位操作。寄存器移位尋址指令舉例如下:MOV R0,R2,LSL#3

;R2的值左移3位,結(jié)果放入R0, ;即是R0=R2×8ANDS R1,R1,R2,LSLR3

;R2的值左移R3位,然后和R1相 ;“與”操作,結(jié)果放入R10x55R0R20x01尋址方式分類(lèi)——寄存器偏移尋址(寄存器移位尋址)MOVR0,R2,LSL#30x080x08邏輯左移3位

寄存器間接尋址指令中的地址碼給出的是一個(gè)通用寄存器的編號(hào),所需的操作數(shù)保存在寄存器指定地址的存儲(chǔ)單元中,即寄存器為操作數(shù)的地址指針。寄存器間接尋址指令舉例如下:LDR R1,[R2] ;將R2指向的存儲(chǔ)單元的數(shù)據(jù)讀出

;保存在R1中SWP R1,R1,[R2] ;將寄存器R1的值和R2指定的存儲(chǔ)

;單元的內(nèi)容交換0x55R0R20x400000000xAA0x40000000尋址方式分類(lèi)——寄存器間接尋址LDRR1,[R2]0xAA

基址尋址就是將基址寄存器的內(nèi)容與指令中給出的偏移量相加,形成操作數(shù)的有效地址?;穼ぶ酚糜谠L問(wèn)基址附近的存儲(chǔ)單元,常用于查表、數(shù)組操作、功能部件寄存器訪問(wèn)等?;穼ぶ分噶钆e例如下:LDR R2,[R3,#0x0C] ;讀取R3+0x0C地址上的存儲(chǔ)單元

;的內(nèi)容,放入R2STR R1,[R0,#-4]! ;先R0=R0-4,然后把R1的值寄存

;到保存到R0指定的存儲(chǔ)單元尋址方式分類(lèi)——基址(變址)尋址0x55R2R30x400000000xAA0x4000000CLDRR2,[R3,#0x0C]0xAA將R3+0x0C作為地址裝載數(shù)據(jù)

多寄存器尋址一次可傳送幾個(gè)寄存器值,允許一條指令傳送16個(gè)寄存器的任何子集或所有寄存器。多寄存器尋址指令舉例如下:LDMIA R1!,{R2-R7,R12};將R1指向的單元中的數(shù)據(jù)讀出到

;R2~R7、R12中(R1自動(dòng)加1)STMIA R0!,{R2-R7,R12};將寄存器R2~R7、R12的值保

;存到R0指向的存儲(chǔ);單元中

;(R0自動(dòng)加1)0x40000000R1R20x??0x010x400000000x??R3R40x??R60x??0x020x030x040x400000040x400000080x4000000C存儲(chǔ)器尋址方式分類(lèi)——多寄存器尋址LDRR1!,{R2-R4,R6}0x010x020x030x040x40000010堆棧是一個(gè)按特定順序進(jìn)行存取的存儲(chǔ)區(qū),操作順序?yàn)椤昂筮M(jìn)先出”。堆棧尋址是隱含的,它使用一個(gè)專(zhuān)門(mén)的寄存器(堆棧指針)指向一塊存儲(chǔ)區(qū)域(堆棧),指針?biāo)赶虻拇鎯?chǔ)單元即是堆棧的棧頂。存儲(chǔ)器堆棧可分為兩種:向上生長(zhǎng):向高地址方向生長(zhǎng),稱(chēng)為遞增堆棧向下生長(zhǎng):向低地址方向生長(zhǎng),稱(chēng)為遞減堆棧尋址方式分類(lèi)——堆棧尋址尋址方式分類(lèi)——堆棧尋址棧底棧頂棧區(qū)SP

堆棧存儲(chǔ)區(qū)棧頂棧底棧區(qū)

SP向下增長(zhǎng)向上增長(zhǎng)0x123456780x12345678堆棧壓棧堆棧壓棧棧頂SP

棧頂SP

棧底空堆棧棧底滿堆棧堆棧指針指向最后壓入的堆棧的有效數(shù)據(jù)項(xiàng),稱(chēng)為滿堆棧;堆棧指針指向下一個(gè)待壓入數(shù)據(jù)的空位置,稱(chēng)為空堆棧。尋址方式分類(lèi)——堆棧尋址0x123456780x12345678棧頂SP

0x12345678棧頂SP

壓棧壓棧所以可以組合出四種類(lèi)型的堆棧方式:滿遞增:堆棧向上增長(zhǎng),堆棧指針指向內(nèi)含有效數(shù)據(jù)項(xiàng)的最高地址。指令如LDMFA、STMFA等;空遞增:堆棧向上增長(zhǎng),堆棧指針指向堆棧上的第一個(gè)空位置。指令如LDMEA、STMEA等;滿遞減:堆棧向下增長(zhǎng),堆棧指針指向內(nèi)含有效數(shù)據(jù)項(xiàng)的最低地址。指令如LDMFD、STMFD等;空遞減:堆棧向下增長(zhǎng),堆棧指針向堆棧下的第一個(gè)空位置。指令如LDMED、STMED等。尋址方式分類(lèi)——堆棧尋址

多寄存器傳送指令用于將一塊數(shù)據(jù)從存儲(chǔ)器的某一位置拷貝到另一位置。如:STMIA R0!,{R1-R7} ;將R1~R7的數(shù)據(jù)保存到存儲(chǔ)器中。

;存儲(chǔ)指針在保存第一個(gè)值之后增加,

;增長(zhǎng)方向?yàn)橄蛏显鲩L(zhǎng)。STMIB R0!,{R1-R7} ;將R1~R7的數(shù)據(jù)保存到存儲(chǔ)器中。

;存儲(chǔ)指針在保存第一個(gè)值之前增加,

;增長(zhǎng)方向?yàn)橄蛏显鲩L(zhǎng)。尋址方式分類(lèi)——塊拷貝尋址

相對(duì)尋址是基址尋址的一種變通。由程序計(jì)數(shù)器PC提供基準(zhǔn)地址,指令中的地址碼字段作為偏移量,兩者相加后得到的地址即為操作數(shù)的有效地址。相對(duì)尋址指令舉例如下:

BL SUBR1 ;調(diào)用到SUBR1子程序

BEQ LOOP ;條件跳轉(zhuǎn)到LOOP標(biāo)號(hào)處

...LOOP MOV R6,#1 ...SUBR1 ...尋址方式分類(lèi)——相對(duì)尋址簡(jiǎn)單的ARM程序;文件名:TEST1.S

;功能:實(shí)現(xiàn)兩個(gè)寄存器相加;說(shuō)明:使用ARMulate軟件仿真調(diào)試

AREA Example1,CODE,READONLY ;聲明代碼段Example1 ENTRY ;標(biāo)識(shí)程序入口

CODE32 ;聲明32位ARM指令START MOV R0,#0 ;設(shè)置參數(shù)

MOV R1,#10LOOP BL ADD_SUB ;調(diào)用子程序ADD_SUB B LOOP ;跳轉(zhuǎn)到LOOPADD_SUB

ADDS R0,R0,R1 ;R0=R0+R1 MOV PC,LR ;子程序返回

END ;文件結(jié)束使用“;”進(jìn)行注釋標(biāo)號(hào)頂格寫(xiě)實(shí)際代碼段聲明文件結(jié)束簡(jiǎn)單的ARM程序;文件名:TEST1.S

;功能:實(shí)現(xiàn)兩個(gè)寄存器相加;說(shuō)明:使用ARMulate軟件仿真調(diào)試

AREA Example1,CODE,READONLY ;聲明代碼段Example1 ENTRY ;標(biāo)識(shí)程序入口

CODE32 ;聲明32位ARM指令START MOV R0,#0 ;設(shè)置參數(shù)

MOV R1,#10LOOP BL ADD_SUB ;調(diào)用子程序ADD_SUB B LOOP ;跳轉(zhuǎn)到LOOPADD_SUB

ADDS R0,R0,R1 ;R0=R0+R1 MOV PC,LR ;子程序返回

END ;文件結(jié)束

ARM指令簡(jiǎn)介PartThree3.3ARM指令集主要有:跳轉(zhuǎn)指令、數(shù)據(jù)處理指令、程序狀態(tài)寄存器處理指令、加載/存儲(chǔ)指令、協(xié)處理器指令和異常產(chǎn)生指令六大類(lèi)。ARM指令集是加載/存儲(chǔ)型的,指令的操作數(shù)都存儲(chǔ)在寄存器中,處理結(jié)果直接放入到目的寄存器中。采用專(zhuān)門(mén)的加載/存儲(chǔ)指令來(lái)訪問(wèn)系統(tǒng)存儲(chǔ)器。3.3.1

跳轉(zhuǎn)指令跳轉(zhuǎn)指令用于實(shí)現(xiàn)程序流程的跳轉(zhuǎn)。在ARM程序中有兩種方式可以實(shí)現(xiàn)程序流程的跳轉(zhuǎn):直接向程序計(jì)數(shù)器PC中寫(xiě)入跳轉(zhuǎn)地址,可以實(shí)現(xiàn)4G地址空間內(nèi)的任意跳轉(zhuǎn)。例如:LDR PC,[PC,#+0x00FF] ;PC←[PC+8+0x00FF]使用專(zhuān)門(mén)的跳轉(zhuǎn)指令。ARM指令集中的跳轉(zhuǎn)指令可以完成從當(dāng)前指令向前或向后的32MB地址空間的跳轉(zhuǎn)。跳轉(zhuǎn)指令有:B WAITA ;無(wú)條件跳轉(zhuǎn)到標(biāo)號(hào)WAITA處執(zhí)行B 0x1234 ;跳轉(zhuǎn)到絕對(duì)地址0x1234處1.B指令:B{條件}目標(biāo)地址跳轉(zhuǎn)指令B是最簡(jiǎn)單的跳轉(zhuǎn)指令,跳轉(zhuǎn)到給定的目標(biāo)地址,從那里繼續(xù)執(zhí)行。示例:BL FUNC1 ;將當(dāng)前PC值保存到R14中,然后跳轉(zhuǎn)到標(biāo)號(hào)FUNC1處執(zhí)行2.BL指令BL{條件}目標(biāo)地址用于子程序調(diào)用,在跳轉(zhuǎn)之前,將下一條指令的地址復(fù)制到鏈接寄存器R14(LR)中,然后跳轉(zhuǎn)到指定地址執(zhí)行。示例:BLX FUNC1 ;將當(dāng)前PC值保存到R14中,然后跳轉(zhuǎn)到標(biāo)號(hào)FUNC1處執(zhí)行,;并切換到Thumb狀態(tài)BLX R0 ;將當(dāng)前PC值保存到R14中,然后跳轉(zhuǎn)R0中的地址處執(zhí)行,;并切換到Thumb狀態(tài)3.BLX指令BLX{條件

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論