日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > windows >内容正文

windows

嵌入式系统设计与应用

發(fā)布時(shí)間:2023/12/20 windows 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 嵌入式系统设计与应用 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

第一章 嵌入式系統(tǒng)概述

第二章 ARM處理器體系結(jié)構(gòu)

第三章 ARM指令集

第四章 S5PV210處理器

第五章 Linux操作系統(tǒng)和內(nèi)嵌式匯編

第十章 SQL數(shù)據(jù)庫(kù)

第十一章 開(kāi)發(fā)設(shè)計(jì)案例


第一章 嵌入式系統(tǒng)概述

嵌入式系統(tǒng)的組成:嵌入式處理器為中心,配置存儲(chǔ)器I/O設(shè)備通信模塊以及電源等必要的輔助接口組成

嵌入式系統(tǒng)的基本架構(gòu):設(shè)備驅(qū)動(dòng)層 ,實(shí)時(shí)操作系統(tǒng)(RTOS),應(yīng)用程序接口層(API).和實(shí)際應(yīng)用程序?qū)?/span>

嵌入式操作系統(tǒng)的作用:(1)補(bǔ)平硬件差異的界面或是說(shuō)隱藏硬件,讓應(yīng)用程序可以在上面運(yùn)行

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(2)?程序設(shè)計(jì)人員無(wú)須考慮到不同硬件所造成的差異,可專注于所擅長(zhǎng)領(lǐng)域的開(kāi)發(fā)??

嵌入式系統(tǒng)的常見(jiàn)類型:(1)商用型的操作系統(tǒng)主要有VxWorks、Windows CE 、Psos、Palm OS、OS-9、LynxOS、QNX、LYNX等

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(2)免費(fèi)型的操作系統(tǒng)主要有Linux和μC/OS-II?

Cortex-A系列的應(yīng)用方向:高端智能手機(jī)、大屏幕的移動(dòng)設(shè)備、企業(yè)網(wǎng)路設(shè)備、服務(wù)器、無(wú)線基臺(tái)、數(shù)字電視。

Cortex-R系列的應(yīng)用方向:如汽車制動(dòng)系統(tǒng)、動(dòng)力傳動(dòng)解決方案、大容量存儲(chǔ)控制器等深層嵌入式實(shí)時(shí)應(yīng)用。

Cortex-M系列的應(yīng)用方向:針對(duì)成本和功耗敏感的應(yīng)用,如智能測(cè)量、人機(jī)接口設(shè)備、汽車和工業(yè)控制系統(tǒng)、家用電器、消費(fèi)性產(chǎn)品和醫(yī)療器械等。

第二章 ARM處理器體系結(jié)構(gòu)

ARM處理器的發(fā)展過(guò)程(大概發(fā)展過(guò)程了解一下,產(chǎn)品系列)

  • V1版本 v1版本ARM處理器沒(méi)有商品化,只出現(xiàn)在ARM1原型機(jī)上
  • V2版本 對(duì)v1版本進(jìn)行了擴(kuò)展和完善。仍舊采用26位地址空間和64M尋址空間
  • V3版本 基于該版本的ARM6處理器,做為IP核獨(dú)立的處理器,具有片上高速緩存、MMU和寫緩存的集成CPU
  • V4版本?該版本在v3版本的基礎(chǔ)上做了進(jìn)一步的擴(kuò)充,是目前被應(yīng)用最廣的ARM體系結(jié)構(gòu),ARM7TDMI、ARM9、StrongARM等都采用該結(jié)構(gòu)
  • V5版本??在v4版本的基礎(chǔ)上增加了一些新的指令。ARM9E、ARM10和Intel的XScale處理器都采用該版本結(jié)構(gòu)
  • V6版本?該版本降低耗電量的同時(shí)提高了圖像處理能力,適合無(wú)線和消費(fèi)類電子產(chǎn)品;高數(shù)據(jù)吞吐量和高性能的結(jié)合
  • V7版本?v7版本架構(gòu)是在v6版本的基礎(chǔ)上誕生的,對(duì)于早期的ARM處理器軟件提供了較好的兼容性
  • V8版本? 首款支持64位指令集的處理器架構(gòu).
  • ARM處理器發(fā)展過(guò)程中體系結(jié)構(gòu)的演變(了解)

  • Thumb指令集(T變種)Thumb指令集是把32位的ARM指令集的一個(gè)子集重新編碼后而形成的一個(gè)特殊的16位的指令集?
  • 長(zhǎng)乘指令(M變種)長(zhǎng)乘指令是一種生成64位相乘結(jié)果的乘法指令(此指令為ARM指令),M變種增加了兩條長(zhǎng)乘指令
  • 增強(qiáng)型DSP指令(E變種)E變種的ARM體系增加了一些增強(qiáng)處理器對(duì)典型的DSP算法處理能力的附加指令
  • Java加速器Jazelle(J變種)ARM的Jazelle技術(shù)是Java語(yǔ)言和先進(jìn)的32位RISC芯片完美結(jié)合的產(chǎn)物
  • ARM媒體功能擴(kuò)展(SIMD變種)
  • 一些經(jīng)典的處理器采用的是哪些架構(gòu)(暫時(shí)不知道哪些是經(jīng)典的處理器)(了解)

    體系結(jié)構(gòu)ARM內(nèi)核版本
    V1ARM1
    V2ARM2
    V2aARM2aS、ARM3
    V3ARM6、ARM600、ARM610、ARM7、ARM700、ARM710
    V4Strong ARM、ARM8、ARM810
    V4TARM7TDMI、ARM720T、ARM740T、ARM9TDMI、ARM920T、ARM940T
    V5TEARM9E-S、ARM10TDMI、ARM1020E
    V6ARM11、ARM1156T2-S、ARM1156T2F-S、ARM1176JZF-S、ARM11JZF-S
    V7ARM Cortex-M、ARM Cortex-R、ARM Cortex-A
    V8Cortex-A53/57、Cortex-A72等

    比較新的產(chǎn)品所使用的的一些處理器類型

    Cortex-A8處理器工作模式

    處理器模式備注
    用戶模式正常程序執(zhí)行模式
    系統(tǒng)模式使用和用戶模式相同的寄存器組,用于運(yùn)行特權(quán)級(jí)操作系統(tǒng)任務(wù)
    管理模式系統(tǒng)復(fù)位或軟件中斷時(shí)進(jìn)入該模式,是供操作系統(tǒng)使用的一種保護(hù)模式
    外部中斷模式低優(yōu)先級(jí)中斷發(fā)生時(shí)進(jìn)入該模式,常用于普通的外部中斷處理
    快速中斷模式高優(yōu)先級(jí)中斷發(fā)生時(shí)進(jìn)入該模式,用于高速數(shù)據(jù)傳輸和通道處理
    數(shù)據(jù)訪問(wèn)中止模式當(dāng)存取異常時(shí)進(jìn)入該模式,用于虛擬存儲(chǔ)和存儲(chǔ)保護(hù)
    未定義指令中止模式當(dāng)執(zhí)行未定義指令時(shí)進(jìn)入該模式,用于支持硬件協(xié)處理器的軟件仿真
    安全監(jiān)控模式可在安全模式和非安全模式下轉(zhuǎn)換

    ?Cortex-A8處理器支持的數(shù)據(jù)類型

    • 字節(jié):8位
    • 半字:16位
    • :32位
    • 雙字:64位

    ?Cortex-A8處理器的儲(chǔ)存模式

    • 大端模式:被存字?jǐn)?shù)據(jù)的高字節(jié)存儲(chǔ)在存儲(chǔ)系統(tǒng)的低地址中,而被存字?jǐn)?shù)據(jù)的低字節(jié)則存放在存儲(chǔ)系統(tǒng)的高地址中.
    • 小端模式:與大端存儲(chǔ)格式相反,在小端存儲(chǔ)格式中,存儲(chǔ)系統(tǒng)的低地址中存放的是被存字?jǐn)?shù)據(jù)中的低字節(jié)內(nèi)容,存儲(chǔ)系統(tǒng)的高地址存放的是被存字?jǐn)?shù)據(jù)中的高字節(jié)內(nèi)容

    舉例:一個(gè)32字的0x12345678

    大端存儲(chǔ)模式
    78
    56
    34
    12

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

    小端模式在高地址為12,低地址為78.

    ARM處理器中各種異常中斷

    異常類型中斷方式優(yōu)先級(jí)
    復(fù)位異常管理模式1
    數(shù)據(jù)異常中止數(shù)據(jù)訪問(wèn)中止模式2
    快速中斷異常(FIQ)快速中斷模式3
    外部中斷異常(IRQ)外部中斷模式4
    預(yù)取指異常中止未定義指令中止模式5

    軟件中斷異常(SWI)

    未定義指令異常(包括協(xié)缺處理器)

    管理模式

    未定義指令模式

    6

    狀態(tài)寄存器:ARM處理器有1個(gè)當(dāng)前程序狀態(tài)寄存器CPSR和6個(gè)備份程序狀態(tài)寄存器SPSR

    工作機(jī)制:

    • 保存最近執(zhí)行的算術(shù)或邏輯運(yùn)算的信息;
    • 控制中斷的允許或禁止;
    • 設(shè)置處理器工作模式。

    原理:

    • 每一種處理器模式下使用專用的備份程序狀態(tài)寄存器。
    • 當(dāng)特定的中斷或異常發(fā)生時(shí),處理器切換到對(duì)應(yīng)的工作模式下,該模式下的備份程序狀態(tài)寄存器保存當(dāng)前程序狀態(tài)寄存器的內(nèi)容。
    • 當(dāng)異常處理程序返回時(shí),再將其內(nèi)容從備份程序狀態(tài)寄存器回復(fù)到當(dāng)前程序狀態(tài)寄存器。

    若內(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) = 218/213 = 25

    設(shè)指令由取指、分析、執(zhí)行3個(gè)子部件完成,每個(gè)子部件的工作周期均為Dt,采用常規(guī)標(biāo)量單流水線處理機(jī)。若連續(xù)執(zhí)行10條指令,則共需時(shí)間 ?Dt。(五級(jí)流水答案為14Dt)

    本題考查指令流水的概念。

    順序執(zhí)行時(shí),每條指令都需三步才能執(zhí)行完,沒(méi)有重疊。

    所以連續(xù)執(zhí)行10條指令后,共需時(shí)間為2 + 10=12Dt。

    第三章 ARM指令集

    ?ARM指令集的基本格式:〈opcode〉{〈cond〉} {S}〈Rd〉,〈Rn〉,{〈operand2〉}

    ARM條件碼

    指令條件碼助記符CPSR條件標(biāo)記位值含義
    0000EQZ置位相等
    0001NEZ清零不等
    0010CSC置位無(wú)符號(hào)>=
    0011CCC清零無(wú)符號(hào)<
    0100MIN置位負(fù)
    0101PLN清零正或零
    0110VSV置位溢出
    0111VCV清零未溢出
    1000HIC置位Z清0無(wú)符號(hào)>
    1001LSC清零Z置位無(wú)符號(hào)<=
    1010GEN等于V帶符號(hào)>=
    1011LTN不等于V帶符號(hào)<
    1100GTZ清零且N等于V帶符號(hào)>
    1101LEZ置位或N不等于V帶符號(hào)數(shù)<=
    1110AL忽略無(wú)條件執(zhí)行
    1111?NV無(wú)未使用

    ARM指令的尋址方式(9種)

    1.立即尋址:立即尋址也叫立即數(shù)尋址,這是一種特殊的尋址方式,操作數(shù)本身就在指令中給出,只要取出指令也就取到了操作數(shù),這個(gè)操作數(shù)被稱為立即數(shù),對(duì)應(yīng)的尋址方式也就叫做立即尋址

    ADD?? ?R0,R0,#1?? ??? ?/*R0←R0+1*/

    ADD?? ?R0,R0,#0x3f?? ?/*R0←R0+0x3f*/

    2.寄存器尋址:操作數(shù)的值在寄存器中,指令中的地址碼字段指出的是寄存器編號(hào),指令執(zhí)行時(shí)直接取出寄存器值來(lái)操作。

    MOV ?R1,R2?? ? ? ?;將R2的值存入R1?

    SUB ?R0,R1,R2 ? ?;將R1的值減去R2的值,結(jié)果保存到R0

    第二操作數(shù)移位方式

    LSL:邏輯左移,空出的最低有效位用0填充。

    LSR:邏輯右移,空出的最高有效位用0填充。

    ASL:算術(shù)左移,由于左移空出的有效位用0填充,因此 ? 它與LSL同義。

    ASR:算術(shù)右移,算術(shù)移位的對(duì)象是帶符號(hào)數(shù),移位過(guò)程中必須保持操作數(shù)的符號(hào)不變。如果源操作數(shù)是正數(shù),空出的最高有效位用0填充,如果是負(fù)數(shù)用1填充。

    ROR:循環(huán)右移,移出的字的最低有效位依次填入空出的最高有效位。

    RRX:帶擴(kuò)展的循環(huán)右移。將寄存器的內(nèi)容循環(huán)右移1位,空位用原來(lái)C標(biāo)志位填充。

    ADD ? ?R3,R2,R1,LSR ?#2?? ?;R3 <—R2 + R1÷4

    ADD ? ?R3,R2,R1,LSR ?R4?? ?;R3 <—R2 + R1÷2R4

    3.寄存器間接尋址:寄存器間接尋址就是以寄存器中的值作為操作數(shù)的地址,而操作數(shù)本身存放在存儲(chǔ)器中。

    LDR?? ?R0,[R1]?? ??? ?/*R0←[R1]*/ ? ? ?

    STR?? ?R0,[R1]?? ??? ?/*[R1]←R0*/

    第一條指令將以R1的值為地址的存儲(chǔ)器中的數(shù)據(jù)傳送到R0中。

    第二條指令將R0的值傳送到以R1的值為地址的存儲(chǔ)器中。?

    4.基址加偏址尋址:基址變址尋址就是將寄存器(該寄存器一般稱作基址寄存器)的內(nèi)容與指令中給出的地址偏移量相加,從而得到一個(gè)操作數(shù)的有效地址。?

    前變址模式:? ? ? ? ?LDR R0,[R1,#4]?? ?;R0←[R1+4]

    自動(dòng)變址模式: ?? ?LDR R0,[R1,#4]!?;R0←[R1+4]、R1←R1+4

    后變址模式:? ? ? ? ?LDR R0,[R1] ,#4?? ?;R0←[R1]、R1←R1+4

    傳送數(shù)據(jù)類型:傳送數(shù)據(jù)可以是有符號(hào)、無(wú)符號(hào)的8位、16位半字和32位字。? ?

    相對(duì)應(yīng)的在指令中增加一個(gè)字母表示數(shù)據(jù)類型: ?? ?

    • ?B:選擇字節(jié)操作 ??
    • ?H:選擇半字操作 ??
    • ?不加則選擇字操作?

    5.堆棧尋址:堆棧是一種數(shù)據(jù)結(jié)構(gòu),按先進(jìn)后出(First In Last Out,FILO)的方式工作,使用一個(gè)稱作堆棧指針的專用寄存器指示當(dāng)前的操作位置,堆棧指針總是指向棧頂.

    四種類型的堆棧工作方式

    • 滿遞增堆棧:堆棧指針指向最后壓入的數(shù)據(jù),且由低地址向高地址生成。
    • 滿遞減堆棧:堆棧指針指向最后壓入的數(shù)據(jù),且由高地址向低地址生成。
    • 空遞增堆棧:堆棧指針指向下一個(gè)將要放入數(shù)據(jù)的空位置,且由低地址向高地址生成。
    • 空遞減堆棧:堆棧指針指向下一個(gè)將要放入數(shù)據(jù)的空位置,且由高地址向低地址生成

    ARM指令:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Thumb指令:

    ?STMFD SP! {R1-R7,LR}?? ?;入棧? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?PUSH {R1-R7,LR}?? ?;入棧

    ?LDMFD SP! {R1-R7,LR}?? ?;出棧? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?POP {R1-R7,LR}?? ?;出棧?

    6.塊拷貝尋址:塊拷貝尋址是多寄存器傳送指令LDM/STM的尋址方式。LDM/STM指令可以把存儲(chǔ)器中的一個(gè)數(shù)據(jù)塊加載到多個(gè)寄存器中,也可以把多個(gè)寄存器中的內(nèi)容保存到存儲(chǔ)器中.

    7.相對(duì)尋址:與基址變址尋址方式相類似,相對(duì)尋址以程序計(jì)數(shù)器PC的當(dāng)前值為基地址,指令中的地址標(biāo)號(hào)作為偏移量,將兩者相加之后得到操作數(shù)的有效地址。

    BL?? ?NEXT?? ??? ?;跳轉(zhuǎn)到子程序

    ? ? ? ? ? ? ? ? ? ? ? ? ;NEXT處執(zhí)行

    ?……?? ??? ??? ??? ??? ??? ??? ? ?? ?

    NEXT

    ?……?? ?

    ?MOV?? ?PC,LR?? ??? ?;從子程序返回

    8.變址尋址 :將某個(gè)寄存器的值與指令中給出的偏移量相加,形成操作數(shù)有效的地址,再根據(jù)該有效地址訪問(wèn)存儲(chǔ)器.

    LDR? ? ? ? ? ? ? R0 , [ R1?, # 2 ]? ? ? ? ? ? ? ?;R0?← [ R1 + 2]

    ?9.多寄存器尋址:可以在一條指令中傳送多個(gè)寄存器的值,一條指令最多可以傳送16個(gè)通用寄存器的值.連續(xù)的寄存器之間用"-"連接,不連續(xù)的中間用","分隔;

    LDMIA? ? ?R0 ! , {R1-R3,R5}? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?;R1?← [ R0?]

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ;R2 ← [ R0 + 4 ]

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ;R3?← [ R0 + 8 ]

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ;R4?← [ R0 + 12?]?

    ?ARM中各種指令

    1、ADD、SUB、 RSB、? ? ? ADC、? ? ? ? SBC、? ? ? ? ? ? ?RSC?

    ? ? ? ?加? ? ? ? ? ?減? ? ? ?反減? ? ? ?加帶進(jìn)位? ? ?減帶進(jìn)位? ? ? ? 反減帶進(jìn)位? ??

    多個(gè)字節(jié)算術(shù)運(yùn)算舉例:

    R2,R3中的64位整數(shù)與R0,R1中的64位整數(shù)相加,結(jié)果放在R4,R5中: ??

    ?ADDS R4,R0,R2?? ?;加低有效位 ??

    ADC ?R5,R1,R3? ? ? ;加高有效位

    96位減法舉例:

    SUBS? ?R3,R6,R9 ?? ?

    SBCS? R4,R7,R10 ?? ?

    SBC? ? ?R5,R8,R11

    2.AND、ORR、EOR、BIC

    ?邏輯與、或、? ?異或、位清零

    3.MOV和MVN(傳送和取反傳送)

    MVN指令:? ? ? ? ??MVN {條件}{S} ?目的寄存器, 源操作數(shù)

    MVN指令將一個(gè)立即數(shù)、一個(gè)寄存器或被移位的寄存器的值先按位求反,再傳送到目的寄存器中。后綴S表示是否影響標(biāo)志位。

    MVN ?R0, #0x0FF?? ??? ??? ? ;將立即數(shù)0xFF按位求反后裝入R0,操作后R0=0xFFFFFF00

    ?4.CMP和CMN(比較和比較反值)

    這些指令將寄存器的值與Operand2進(jìn)行比較。它們根據(jù)結(jié)果更新條件標(biāo)志碼,但結(jié)果不放到任何寄存器中 ?? ?

    CMP:根據(jù)Rn - Op2設(shè)置條件碼,結(jié)果丟棄 ?? ?

    CMN:? ?根據(jù)Rn + Op2設(shè)置條件碼,結(jié)果丟棄

    CMN ?R1, R0?? ??? ? ? ?;將R1的值和R0的值相加,并根據(jù)結(jié)果設(shè)置CPSR的標(biāo)志位 ? ? ?

    CMN ?R1, #0x200 ? ? ? ? ;將R1的值和立即數(shù)200相加,并根據(jù)結(jié)果設(shè)置CPSR的標(biāo)志位

    ?5.TST和TEQ(測(cè)試和測(cè)試相等)

    TST {cond} Rn,Operand2 ?? ?

    TEQ {cond} Rn,Operand2

    TST:對(duì)Rn的值和Operand2的值進(jìn)行按位“與”操作,設(shè)置條件碼,丟棄結(jié)果 ?? ?

    TEQ:對(duì)Rn的值和OPerand2的值進(jìn)行按位“異或”操作,設(shè)置條件碼,丟棄結(jié)果

    TST ?R1, #0x0F?? ??? ?;檢測(cè)R1的低4為是否為0

    ?6.MUL和MLA(乘法和乘加)

    MUL {cond} {S} Rd,? ? Rm,? Rs?;

    MLA {cond} {S} Rd , Rm , Rs , Rn ;? ? ? ? ? ? ? ? ? ? ? Rm*Rs+Rn->Rd

    7.Load/Store指令

    ARM的數(shù)據(jù)存取指令Load/Store是唯一用于寄存器和存儲(chǔ)器之間進(jìn)行數(shù)據(jù)傳送的指令。ARM指令集中有三種基本的數(shù)據(jù)存取指令: ?

    • 單寄存器的存取指令(LDR,STR) ?
    • 多寄存器存取指令(LDM,STM) ?
    • 單寄存器交換指令(SWP)

    單字和無(wú)符號(hào)字節(jié)的數(shù)據(jù)傳送指令

    • 前變址格式? ? ? ?LDR|STR {<cond>} {B} Rd, [Rn, <offset>] {!} ? ?
    • 后變址格式? ? ? ?LDR|STR {<cond>} {B} {T} Rd, [Rn],<offset> ? ?
    • 相對(duì)PC的形式 LDR|STR {<cond>} {B} Rd, LABEL

    半字和有符號(hào)字節(jié)的數(shù)據(jù)傳送指令

    • 前變址格式 LDR|STR{ <cond>} H|SH|SB ?Rd, ?[Rn, <offest>]{!} ? ?
    • 后變址格式 LDR|STR {<cond>} H|SH|SB ?Rd, ?[Rn], <offest>

    式中<offset>是#±<8位立即數(shù)>或#±Rm;

    H|SH|SB選擇傳送數(shù)據(jù)類型;

    其它部分的匯編器格式與傳送字和無(wú)符號(hào)字節(jié)相同。

    說(shuō)明:半字傳送的地址必須是偶數(shù)。

    LDR和STR雙字:加載兩個(gè)相鄰的寄存器和存儲(chǔ)兩個(gè)相鄰的寄存器,64位雙字。

    句法: ?? ?

    • op{cond}D Rd,[Rn] ?? ?
    • op{cond}D Rd,[Rn,offset]{!} ?? ?
    • op{cond}D Rd,label ?? ?
    • op{cond}D Rd,[Rn],offset

    其中:Rd?? ?加載或存儲(chǔ)寄存器其中一個(gè),另一個(gè)是R(d+1)。?? ? ? ? ? ? ?

    Rd必須是偶數(shù)寄存器,且不是R14 ?? ?

    Rn ? ? ?除非指令為零偏移,或不帶回寫的前索引,否則,Rn不允許與Rd和R(d+1)相同

    LDRD ?? ??? ?R6,[R11]? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

    LDRMID ?? ?R4,[R7],R2

    STRD ?? ??? ?R4,[R9,#24]

    STRD ?? ??? ?R0,[R9,R2]!

    LDRD ?? ??? ?R1,[R6]

    STRD ?? ??? ?R14,[R9,#36]

    STRD ?? ??? ?R2,[R3],R6

    8.多寄存器存取指令LDM/STM

    多寄存器傳送指令可以用一條指令將16個(gè)可見(jiàn)寄存器(R0~R15)的任意子集合(或全部)存儲(chǔ)到存儲(chǔ)器或從存儲(chǔ)器中讀取數(shù)據(jù)到該寄存器集合中

    LDM?/ STM { < cond > } < add mode > ?Rn { ! } , ?< registers > {?^ }

    add mode?? ?IA、IB、DA、DB、FD、ED、FA、EA

    Rn? ? ? ? ? ? ? ? 基址寄存器,裝有傳送數(shù)據(jù)的初始地址,?? ??? ?

    ? ? ? ? ? ? ? ? ? ? ?Rn不允許是R15

    registers? ? ?加載或存儲(chǔ)寄存器列表。

    ^? ? ? ? ? ? ? ? ? 不允許在用戶模式或系統(tǒng)模式下使用.

    LDMIA?? ??? ?R8,{R0,R2,R9} ?? ?

    STMDB?? ?R1!,{R3-R6,R11,R12} ?? ?

    STMFD?? ?R13!,{R0,R4-R7,LR} ?? ?

    LDMFD?? ?R13!,{R0,R4-R7,PC} ?? ?

    STMIA?? ??? ?R5!,{R5,R4,R9}

    9.單寄存器交換指令(SWP

    SWP{<cond>} {B} Rd,Rm,[Rn]

    SWPB R1,R1,[R0] ? ?交換字節(jié),將[R0]中的字節(jié)數(shù)據(jù)?? ??? ?讀取到R1中,同時(shí)將R1中的數(shù)據(jù)寫入到[R0]中 ?? ?

    SWP ? R1,R2,[R3] ? ?交換字?jǐn)?shù)據(jù),將[R3]中的數(shù)據(jù)讀?? ??? ?取到R1中,同時(shí)將R2中的數(shù)據(jù)寫入到[R3]中

    10.程序狀態(tài)寄存器與通用寄存器之間的傳送指令?

    ARM指令中有兩條指令,用于在狀態(tài)寄存器和通用寄存器之間傳送數(shù)據(jù)。修改狀態(tài)寄存器一般是通過(guò)“讀取-修改-寫回”三個(gè)步驟的操作來(lái)實(shí)現(xiàn)的。

    這兩條指令分別是:

    • 狀態(tài)寄存器到通用寄存器的傳送指令(MRS)
    • 通用寄存器到狀態(tài)寄存器的傳送指令(MSR)

    MRS ?R0, CPSR?? ??? ?;將CPSR的值復(fù)制到R0中 ? ?

    ORR ?R0, R0, #C0 ? ? ;R0的位6和位7置1,即屏蔽外部中斷和快速中斷

    MSR ?CPSR, R0?? ??? ?;將R0值寫回到CPSR中

    ?11.轉(zhuǎn)移指令

    • B? ? ? ? ? ?轉(zhuǎn)移指令 ? ?
    • BL? ? ? ? ?帶鏈接的轉(zhuǎn)移指令 ? ?
    • BX? ? ? ? 帶狀態(tài)切換的轉(zhuǎn)移指令 ? ?
    • BLX? ? ? 帶鏈接和狀態(tài)切換的轉(zhuǎn)移指令

    B {條件} ?目標(biāo)地址

    跳轉(zhuǎn)指令B是最簡(jiǎn)單的跳轉(zhuǎn)指令,跳轉(zhuǎn)到給定的目標(biāo)地址, ? 從那里繼續(xù)執(zhí)行。

    B?? ? ? ? ?WAITA ? ?;無(wú)條件跳轉(zhuǎn)到標(biāo)號(hào)WAITA處執(zhí)行 B?? ?0x1234 ? ? ? ;跳轉(zhuǎn)到絕對(duì)地址0x1234處

    BL {條件} ?目標(biāo)地址 ?

    用于子程序調(diào)用,在跳轉(zhuǎn)之前,將下一條指令的地址復(fù)制到鏈接寄存器R14(LR)中,然后跳轉(zhuǎn)到指定地址執(zhí)行。?

    BL?? ??? ?FUNC1?? ??? ? ;將當(dāng)前PC值保存到R14中,然后跳轉(zhuǎn)到標(biāo)號(hào)FUNC1處執(zhí)行

    ?BLX {條件} ?目標(biāo)地址

    BLX指令從ARM指令集跳轉(zhuǎn)到指定地址執(zhí)行,并將處理器的工作狀態(tài)由ARM狀態(tài)切換到Thumb狀態(tài),同時(shí)將PC值保存到鏈接寄存器R14中

    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)

    BX {條件} ?目標(biāo)地址

    帶狀態(tài)切換的跳轉(zhuǎn)指令,跳轉(zhuǎn)到指定地址執(zhí)行。

    若目標(biāo)地址寄存器的位[0]為1,處理器的工作狀態(tài)切換為Thumb狀態(tài),同時(shí)將CPSR中的T標(biāo)志位置1,目標(biāo)地址寄存器的位[31:1]復(fù)制到PC中

    若目標(biāo)地址寄存器的位[0]為0,處理器的工作狀態(tài)切換為ARM狀態(tài),同時(shí)將CPSR中的T標(biāo)志位清0,目標(biāo)地址寄存器的位[31:1]復(fù)制到PC中

    BX ? R0?? ??? ? ;跳轉(zhuǎn)R0中的地址處執(zhí)行,如果R0[0]=1,切換到Thumb狀態(tài)

    12.異常中斷指令(感覺(jué)考不到)

    • 軟件中斷指令(SWI) ?
    • 斷點(diǎn)指令(BKPT—僅用于v5T體系)

    軟件中斷指令SWI用于產(chǎn)生SWI異常中斷,用來(lái)實(shí)現(xiàn)在用戶模式下對(duì)操作系統(tǒng)中特權(quán)模式的程序的調(diào)用;

    斷點(diǎn)中斷指令BKPT主要用于產(chǎn)生軟件斷點(diǎn),供調(diào)試程序用

    13.前導(dǎo)0計(jì)數(shù)CLZ

    對(duì)Rd設(shè)置為Rm中為1的最高有效位的位置

    即對(duì)Rm中的前導(dǎo)0的個(gè)數(shù)進(jìn)行計(jì)數(shù),結(jié)果放到Rd ?? ?

    若Rm=0,則Rd=32 ?? ?

    若Rm[31]=1,則Rd=0

    MOV R11,#0x35E20 ?? ?

    CLZ R5,R11?? ??? ?;R5=?

    14.協(xié)處理指令(感覺(jué)不考,有空看看)

    第四章 S5PV210處理器

    S5PV210處理器的組成內(nèi)容:主要由6大部分組成,分別為CPU核心系統(tǒng)外設(shè)多媒體電源管理存儲(chǔ)器接口Connectivity模塊。CPU和各個(gè)部分之間通過(guò)多層次AHB/AXI總線進(jìn)行通信。?

    第五章 Linux操作系統(tǒng)和內(nèi)嵌式匯編

    Linux 操作系統(tǒng)的基本體系結(jié)構(gòu)

    ARM-Linux內(nèi)核的主要架構(gòu)及功能

    進(jìn)程調(diào)度的一般原理:

    • 進(jìn)程的調(diào)度策略(policy)
    • 靜態(tài)優(yōu)先級(jí)(priority)
    • 動(dòng)態(tài)優(yōu)先級(jí)(counter)
    • 實(shí)時(shí)優(yōu)先級(jí)(rt-priority)

    Policy是進(jìn)程的調(diào)度策略,用來(lái)區(qū)分實(shí)時(shí)進(jìn)程和普通進(jìn)程,二者調(diào)度算法不同,實(shí)時(shí)進(jìn)程優(yōu)先于普通進(jìn)程.進(jìn)程按照優(yōu)先權(quán)的高低被依次調(diào)用,實(shí)時(shí)優(yōu)先級(jí)級(jí)別最高

    選擇進(jìn)程的依據(jù)

    選擇進(jìn)程的依據(jù)主要有進(jìn)程的調(diào)度策略(policy) 靜態(tài)優(yōu)先級(jí)(priority) 動(dòng)態(tài)優(yōu)先級(jí)(counter) 實(shí)時(shí)優(yōu)先級(jí)(rt-priority)四個(gè)部分.

    在Linux中,用函數(shù)googness()綜合四項(xiàng)依據(jù)及其他因素,賦予各影響因素權(quán)重,調(diào)度程序以權(quán)重作為選擇進(jìn)程的依據(jù)

    在ARM匯編中調(diào)用C程序

    C語(yǔ)言中內(nèi)嵌匯編(字符串復(fù)制)

    #include <stdio.h> void my_strcpy(char *scr,const char *dst) { int ch; _ _arm {loop: LDRB ch,[src],#1 STRB ch,[dst],#1 CMP ch,#0 BNE loop } } int main(void) { const char *a=“Hello woorld!”; char b[20]; _ _arm { MOV R0,a MOV R1,b BL my_strcpy,{R0,R1} } printf(“Original string:%s\n”,a); printf(“Copied string:%s\n”,b); return 0; }

    第十章 SQL數(shù)據(jù)庫(kù)

    本章只考選擇題

    SQL數(shù)據(jù)庫(kù)是什么樣的數(shù)據(jù)庫(kù)

    MySQL是多用戶多進(jìn)程的SQL數(shù)據(jù)庫(kù)系統(tǒng)。MySQL既能夠作為一個(gè)單獨(dú)的應(yīng)用程序應(yīng)用在客戶端服務(wù)器網(wǎng)絡(luò)環(huán)境中,也能夠作為一個(gè)庫(kù)而嵌入到其他的軟件中。使用 C和 C++編寫,并使用了多種編譯器進(jìn)行測(cè)試,保證了源代碼的可移植性。MySQL為多種編程語(yǔ)言提供了 API。支持多線程,充分利用 CPU 資源。MySQL 軟件采用了雙授權(quán)政策,它分為社區(qū)版和商業(yè)版,由于其體積小、速度快、總體擁有成本低,尤其是開(kāi)放源碼這一特點(diǎn),一般中小型網(wǎng)站的開(kāi)發(fā)常選擇 MySQL 作為網(wǎng)站數(shù)據(jù)庫(kù)。

    Sqlite主要特點(diǎn)有:

    • 支持ACID事務(wù)。 零配置,即無(wú)需安裝和管理配置。
    • 儲(chǔ)存在單一磁盤文件中的一個(gè)完整的數(shù)據(jù)庫(kù)。
    • 數(shù)據(jù)文件可在不同字節(jié)順序的機(jī)器間自由共享。
    • 支持?jǐn)?shù)據(jù)庫(kù)大小至2TB。 程序體積小,全部C語(yǔ)言代碼約3萬(wàn)行(核心軟件,包括庫(kù)和工具),250KB大小。
    • 相對(duì)于目前其他嵌入式數(shù)據(jù)庫(kù)具有更快捷的數(shù)據(jù)操作。
    • 支持事務(wù)功能和并發(fā)處理。 程序完全獨(dú)立,不具有外部依賴性。
    • 支持多種硬件平臺(tái),如arm/ Linux、SPARC/Solaris等。
    • 便攜性
    • 易用性
    • 緊湊性
    • 有效性
    • 可靠性

    第十一章 開(kāi)發(fā)設(shè)計(jì)案例

    嵌入式系統(tǒng)設(shè)計(jì)中基于協(xié)同設(shè)計(jì)概念的系統(tǒng)的設(shè)計(jì)方法

    軟硬件協(xié)同設(shè)計(jì)是在系統(tǒng)目標(biāo)要求的指導(dǎo)下,通過(guò)綜合分析系統(tǒng)軟硬件功能現(xiàn)有資源,協(xié)同設(shè)計(jì)軟硬件體系結(jié)構(gòu),以便能夠工作在最佳狀態(tài)

    如圖所示為一種典型的嵌入式系統(tǒng)協(xié)同設(shè)計(jì)方法

    傳統(tǒng)的嵌入式系統(tǒng)設(shè)計(jì)和協(xié)同設(shè)計(jì)的區(qū)別

    傳統(tǒng)的嵌入式系統(tǒng)設(shè)計(jì):在整個(gè)設(shè)計(jì)過(guò)程中,通常采用“硬件優(yōu)先的原則",即在粗略估計(jì)軟件任務(wù)需求的情況下,首先進(jìn)行硬件設(shè)計(jì),然后在此硬件設(shè)計(jì)平臺(tái)上進(jìn)行軟件設(shè)計(jì)。

    協(xié)同設(shè)計(jì):設(shè)計(jì)過(guò)程中硬件和軟件設(shè)計(jì)是相互作用的,在軟硬件功能分配時(shí)就考慮到了現(xiàn)有的軟硬件資源,在軟硬件功能的設(shè)計(jì)和仿真評(píng)價(jià)過(guò)程中,軟件和硬件是互相支持的.

    總結(jié)

    以上是生活随笔為你收集整理的嵌入式系统设计与应用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。