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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

嵌入式系统设计与应用

發布時間:2023/12/20 windows 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 嵌入式系统设计与应用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

第一章 嵌入式系統概述

第二章 ARM處理器體系結構

第三章 ARM指令集

第四章 S5PV210處理器

第五章 Linux操作系統和內嵌式匯編

第十章 SQL數據庫

第十一章 開發設計案例


第一章 嵌入式系統概述

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

嵌入式系統的基本架構:設備驅動層 ,實時操作系統(RTOS),應用程序接口層(API).和實際應用程序層

嵌入式操作系統的作用:(1)補平硬件差異的界面或是說隱藏硬件,讓應用程序可以在上面運行

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(2)?程序設計人員無須考慮到不同硬件所造成的差異,可專注于所擅長領域的開發??

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

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(2)免費型的操作系統主要有Linux和μC/OS-II?

Cortex-A系列的應用方向:高端智能手機、大屏幕的移動設備、企業網路設備、服務器、無線基臺、數字電視。

Cortex-R系列的應用方向:如汽車制動系統、動力傳動解決方案、大容量存儲控制器等深層嵌入式實時應用。

Cortex-M系列的應用方向:針對成本和功耗敏感的應用,如智能測量、人機接口設備、汽車和工業控制系統、家用電器、消費性產品和醫療器械等。

第二章 ARM處理器體系結構

ARM處理器的發展過程(大概發展過程了解一下,產品系列)

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

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

    體系結構ARM內核版本
    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等

    比較新的產品所使用的的一些處理器類型

    Cortex-A8處理器工作模式

    處理器模式備注
    用戶模式正常程序執行模式
    系統模式使用和用戶模式相同的寄存器組,用于運行特權級操作系統任務
    管理模式系統復位或軟件中斷時進入該模式,是供操作系統使用的一種保護模式
    外部中斷模式低優先級中斷發生時進入該模式,常用于普通的外部中斷處理
    快速中斷模式高優先級中斷發生時進入該模式,用于高速數據傳輸和通道處理
    數據訪問中止模式當存取異常時進入該模式,用于虛擬存儲和存儲保護
    未定義指令中止模式當執行未定義指令時進入該模式,用于支持硬件協處理器的軟件仿真
    安全監控模式可在安全模式和非安全模式下轉換

    ?Cortex-A8處理器支持的數據類型

    • 字節:8位
    • 半字:16位
    • :32位
    • 雙字:64位

    ?Cortex-A8處理器的儲存模式

    • 大端模式:被存字數據的高字節存儲在存儲系統的低地址中,而被存字數據的低字節則存放在存儲系統的高地址中.
    • 小端模式:與大端存儲格式相反,在小端存儲格式中,存儲系統的低地址中存放的是被存字數據中的低字節內容,存儲系統的高地址存放的是被存字數據中的高字節內容

    舉例:一個32字的0x12345678

    大端存儲模式
    78
    56
    34
    12

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

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

    ARM處理器中各種異常中斷

    異常類型中斷方式優先級
    復位異常管理模式1
    數據異常中止數據訪問中止模式2
    快速中斷異常(FIQ)快速中斷模式3
    外部中斷異常(IRQ)外部中斷模式4
    預取指異常中止未定義指令中止模式5

    軟件中斷異常(SWI)

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

    管理模式

    未定義指令模式

    6

    狀態寄存器:ARM處理器有1個當前程序狀態寄存器CPSR和6個備份程序狀態寄存器SPSR

    工作機制:

    • 保存最近執行的算術或邏輯運算的信息;
    • 控制中斷的允許或禁止;
    • 設置處理器工作模式。

    原理:

    • 每一種處理器模式下使用專用的備份程序狀態寄存器。
    • 當特定的中斷或異常發生時,處理器切換到對應的工作模式下,該模式下的備份程序狀態寄存器保存當前程序狀態寄存器的內容。
    • 當異常處理程序返回時,再將其內容從備份程序狀態寄存器回復到當前程序狀態寄存器。

    若內存按字節編址,用存儲容量為8K*8比特的存儲器芯片構成地址編號A0000H~DFFFFH的內存空間,則至少需要多少片?

    本題考查內存容量的計算。

    給定起、止地址碼的內存容量 = 終止地址 – 起始地址 + 1。

    將終止地址加1等于E0000H,再減去起始地址,即E0000H – A0000H = 40000H。

    十六進制的 (40000)16 = 218。

    組成內存儲器的芯片數量 = 內存儲器的容量/單個芯片的容量。

    218/(8*210) = 218/213 = 25

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

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

    順序執行時,每條指令都需三步才能執行完,沒有重疊。

    所以連續執行10條指令后,共需時間為2 + 10=12Dt。

    第三章 ARM指令集

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

    ARM條件碼

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

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

    1.立即尋址:立即尋址也叫立即數尋址,這是一種特殊的尋址方式,操作數本身就在指令中給出,只要取出指令也就取到了操作數,這個操作數被稱為立即數,對應的尋址方式也就叫做立即尋址

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

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

    2.寄存器尋址:操作數的值在寄存器中,指令中的地址碼字段指出的是寄存器編號,指令執行時直接取出寄存器值來操作。

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

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

    第二操作數移位方式

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

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

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

    ASR:算術右移,算術移位的對象是帶符號數,移位過程中必須保持操作數的符號不變。如果源操作數是正數,空出的最高有效位用0填充,如果是負數用1填充。

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

    RRX:帶擴展的循環右移。將寄存器的內容循環右移1位,空位用原來C標志位填充。

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

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

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

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

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

    第一條指令將以R1的值為地址的存儲器中的數據傳送到R0中。

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

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

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

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

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

    傳送數據類型:傳送數據可以是有符號、無符號的8位、16位半字和32位字。? ?

    相對應的在指令中增加一個字母表示數據類型: ?? ?

    • ?B:選擇字節操作 ??
    • ?H:選擇半字操作 ??
    • ?不加則選擇字操作?

    5.堆棧尋址:堆棧是一種數據結構,按先進后出(First In Last Out,FILO)的方式工作,使用一個稱作堆棧指針的專用寄存器指示當前的操作位置,堆棧指針總是指向棧頂.

    四種類型的堆棧工作方式

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

    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指令可以把存儲器中的一個數據塊加載到多個寄存器中,也可以把多個寄存器中的內容保存到存儲器中.

    7.相對尋址:與基址變址尋址方式相類似,相對尋址以程序計數器PC的當前值為基地址,指令中的地址標號作為偏移量,將兩者相加之后得到操作數的有效地址。

    BL?? ?NEXT?? ??? ?;跳轉到子程序

    ? ? ? ? ? ? ? ? ? ? ? ? ;NEXT處執行

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

    NEXT

    ?……?? ?

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

    8.變址尋址 :將某個寄存器的值與指令中給出的偏移量相加,形成操作數有效的地址,再根據該有效地址訪問存儲器.

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

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

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

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

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

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

    ?ARM中各種指令

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

    ? ? ? ?加? ? ? ? ? ?減? ? ? ?反減? ? ? ?加帶進位? ? ?減帶進位? ? ? ? 反減帶進位? ??

    多個字節算術運算舉例:

    R2,R3中的64位整數與R0,R1中的64位整數相加,結果放在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} ?目的寄存器, 源操作數

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

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

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

    這些指令將寄存器的值與Operand2進行比較。它們根據結果更新條件標志碼,但結果不放到任何寄存器中 ?? ?

    CMP:根據Rn - Op2設置條件碼,結果丟棄 ?? ?

    CMN:? ?根據Rn + Op2設置條件碼,結果丟棄

    CMN ?R1, R0?? ??? ? ? ?;將R1的值和R0的值相加,并根據結果設置CPSR的標志位 ? ? ?

    CMN ?R1, #0x200 ? ? ? ? ;將R1的值和立即數200相加,并根據結果設置CPSR的標志位

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

    TST {cond} Rn,Operand2 ?? ?

    TEQ {cond} Rn,Operand2

    TST:對Rn的值和Operand2的值進行按位“與”操作,設置條件碼,丟棄結果 ?? ?

    TEQ:對Rn的值和OPerand2的值進行按位“異或”操作,設置條件碼,丟棄結果

    TST ?R1, #0x0F?? ??? ?;檢測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的數據存取指令Load/Store是唯一用于寄存器和存儲器之間進行數據傳送的指令。ARM指令集中有三種基本的數據存取指令: ?

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

    單字和無符號字節的數據傳送指令

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

    半字和有符號字節的數據傳送指令

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

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

    H|SH|SB選擇傳送數據類型;

    其它部分的匯編器格式與傳送字和無符號字節相同。

    說明:半字傳送的地址必須是偶數。

    LDR和STR雙字:加載兩個相鄰的寄存器和存儲兩個相鄰的寄存器,64位雙字。

    句法: ?? ?

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

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

    Rd必須是偶數寄存器,且不是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個可見寄存器(R0~R15)的任意子集合(或全部)存儲到存儲器或從存儲器中讀取數據到該寄存器集合中

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

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

    Rn? ? ? ? ? ? ? ? 基址寄存器,裝有傳送數據的初始地址,?? ??? ?

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

    registers? ? ?加載或存儲寄存器列表。

    ^? ? ? ? ? ? ? ? ? 不允許在用戶模式或系統模式下使用.

    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] ? ?交換字節,將[R0]中的字節數據?? ??? ?讀取到R1中,同時將R1中的數據寫入到[R0]中 ?? ?

    SWP ? R1,R2,[R3] ? ?交換字數據,將[R3]中的數據讀?? ??? ?取到R1中,同時將R2中的數據寫入到[R3]中

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

    ARM指令中有兩條指令,用于在狀態寄存器和通用寄存器之間傳送數據。修改狀態寄存器一般是通過“讀取-修改-寫回”三個步驟的操作來實現的。

    這兩條指令分別是:

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

    MRS ?R0, CPSR?? ??? ?;將CPSR的值復制到R0中 ? ?

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

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

    ?11.轉移指令

    • B? ? ? ? ? ?轉移指令 ? ?
    • BL? ? ? ? ?帶鏈接的轉移指令 ? ?
    • BX? ? ? ? 帶狀態切換的轉移指令 ? ?
    • BLX? ? ? 帶鏈接和狀態切換的轉移指令

    B {條件} ?目標地址

    跳轉指令B是最簡單的跳轉指令,跳轉到給定的目標地址, ? 從那里繼續執行。

    B?? ? ? ? ?WAITA ? ?;無條件跳轉到標號WAITA處執行 B?? ?0x1234 ? ? ? ;跳轉到絕對地址0x1234處

    BL {條件} ?目標地址 ?

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

    BL?? ??? ?FUNC1?? ??? ? ;將當前PC值保存到R14中,然后跳轉到標號FUNC1處執行

    ?BLX {條件} ?目標地址

    BLX指令從ARM指令集跳轉到指定地址執行,并將處理器的工作狀態由ARM狀態切換到Thumb狀態,同時將PC值保存到鏈接寄存器R14中

    BLX?? ? ?FUNC1?? ? ;將當前PC值保存到R14中,然后跳轉到標號FUNC1處執行,并切換到Thumb狀態

    BLX?? ? ?R0? ? ? ? ? ? ?;將當前PC值保存到R14中,然后跳轉R0中的地址處執行,并切換到Thumb狀態

    BX {條件} ?目標地址

    帶狀態切換的跳轉指令,跳轉到指定地址執行。

    若目標地址寄存器的位[0]為1,處理器的工作狀態切換為Thumb狀態,同時將CPSR中的T標志位置1,目標地址寄存器的位[31:1]復制到PC中

    若目標地址寄存器的位[0]為0,處理器的工作狀態切換為ARM狀態,同時將CPSR中的T標志位清0,目標地址寄存器的位[31:1]復制到PC中

    BX ? R0?? ??? ? ;跳轉R0中的地址處執行,如果R0[0]=1,切換到Thumb狀態

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

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

    軟件中斷指令SWI用于產生SWI異常中斷,用來實現在用戶模式下對操作系統中特權模式的程序的調用;

    斷點中斷指令BKPT主要用于產生軟件斷點,供調試程序用

    13.前導0計數CLZ

    對Rd設置為Rm中為1的最高有效位的位置

    即對Rm中的前導0的個數進行計數,結果放到Rd ?? ?

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

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

    MOV R11,#0x35E20 ?? ?

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

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

    第四章 S5PV210處理器

    S5PV210處理器的組成內容:主要由6大部分組成,分別為CPU核心系統外設多媒體電源管理存儲器接口Connectivity模塊。CPU和各個部分之間通過多層次AHB/AXI總線進行通信。?

    第五章 Linux操作系統和內嵌式匯編

    Linux 操作系統的基本體系結構

    ARM-Linux內核的主要架構及功能

    進程調度的一般原理:

    • 進程的調度策略(policy)
    • 靜態優先級(priority)
    • 動態優先級(counter)
    • 實時優先級(rt-priority)

    Policy是進程的調度策略,用來區分實時進程和普通進程,二者調度算法不同,實時進程優先于普通進程.進程按照優先權的高低被依次調用,實時優先級級別最高

    選擇進程的依據

    選擇進程的依據主要有進程的調度策略(policy) 靜態優先級(priority) 動態優先級(counter) 實時優先級(rt-priority)四個部分.

    在Linux中,用函數googness()綜合四項依據及其他因素,賦予各影響因素權重,調度程序以權重作為選擇進程的依據

    在ARM匯編中調用C程序

    C語言中內嵌匯編(字符串復制)

    #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數據庫

    本章只考選擇題

    SQL數據庫是什么樣的數據庫

    MySQL是多用戶多進程的SQL數據庫系統。MySQL既能夠作為一個單獨的應用程序應用在客戶端服務器網絡環境中,也能夠作為一個庫而嵌入到其他的軟件中。使用 C和 C++編寫,并使用了多種編譯器進行測試,保證了源代碼的可移植性。MySQL為多種編程語言提供了 API。支持多線程,充分利用 CPU 資源。MySQL 軟件采用了雙授權政策,它分為社區版和商業版,由于其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,一般中小型網站的開發常選擇 MySQL 作為網站數據庫。

    Sqlite主要特點有:

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

    第十一章 開發設計案例

    嵌入式系統設計中基于協同設計概念的系統的設計方法

    軟硬件協同設計是在系統目標要求的指導下,通過綜合分析系統軟硬件功能現有資源,協同設計軟硬件體系結構,以便能夠工作在最佳狀態

    如圖所示為一種典型的嵌入式系統協同設計方法

    傳統的嵌入式系統設計和協同設計的區別

    傳統的嵌入式系統設計:在整個設計過程中,通常采用“硬件優先的原則",即在粗略估計軟件任務需求的情況下,首先進行硬件設計,然后在此硬件設計平臺上進行軟件設計。

    協同設計:設計過程中硬件和軟件設計是相互作用的,在軟硬件功能分配時就考慮到了現有的軟硬件資源,在軟硬件功能的設計和仿真評價過程中,軟件和硬件是互相支持的.

    總結

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

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。