嵌入式系统设计与应用
目錄
第一章 嵌入式系統概述
第二章 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處理器的發展過程(大概發展過程了解一下,產品系列)
ARM處理器發展過程中體系結構的演變(了解)
一些經典的處理器采用的是哪些架構(暫時不知道哪些是經典的處理器)(了解)
| V1 | ARM1 |
| V2 | ARM2 |
| V2a | ARM2aS、ARM3 |
| V3 | ARM6、ARM600、ARM610、ARM7、ARM700、ARM710 |
| V4 | Strong ARM、ARM8、ARM810 |
| V4T | ARM7TDMI、ARM720T、ARM740T、ARM9TDMI、ARM920T、ARM940T |
| V5TE | ARM9E-S、ARM10TDMI、ARM1020E |
| V6 | ARM11、ARM1156T2-S、ARM1156T2F-S、ARM1176JZF-S、ARM11JZF-S |
| V7 | ARM Cortex-M、ARM Cortex-R、ARM Cortex-A |
| V8 | Cortex-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條件碼
| 0000 | EQ | Z置位 | 相等 |
| 0001 | NE | Z清零 | 不等 |
| 0010 | CS | C置位 | 無符號>= |
| 0011 | CC | C清零 | 無符號< |
| 0100 | MI | N置位 | 負 |
| 0101 | PL | N清零 | 正或零 |
| 0110 | VS | V置位 | 溢出 |
| 0111 | VC | V清零 | 未溢出 |
| 1000 | HI | C置位Z清0 | 無符號> |
| 1001 | LS | C清零Z置位 | 無符號<= |
| 1010 | GE | N等于V | 帶符號>= |
| 1011 | LT | N不等于V | 帶符號< |
| 1100 | GT | Z清零且N等于V | 帶符號> |
| 1101 | LE | Z置位或N不等于V | 帶符號數<= |
| 1110 | AL | 忽略 | 無條件執行 |
| 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等。
- 便攜性
- 易用性
- 緊湊性
- 有效性
- 可靠性
第十一章 開發設計案例
嵌入式系統設計中基于協同設計概念的系統的設計方法
軟硬件協同設計是在系統目標要求的指導下,通過綜合分析系統軟硬件功能及現有資源,協同設計軟硬件體系結構,以便能夠工作在最佳狀態
如圖所示為一種典型的嵌入式系統協同設計方法
傳統的嵌入式系統設計和協同設計的區別
傳統的嵌入式系統設計:在整個設計過程中,通常采用“硬件優先的原則",即在粗略估計軟件任務需求的情況下,首先進行硬件設計,然后在此硬件設計平臺上進行軟件設計。
協同設計:設計過程中硬件和軟件設計是相互作用的,在軟硬件功能分配時就考慮到了現有的軟硬件資源,在軟硬件功能的設計和仿真評價過程中,軟件和硬件是互相支持的.
總結
以上是生活随笔為你收集整理的嵌入式系统设计与应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java cs 顺丰运单_JAVA接入顺
- 下一篇: 如何解决Win10系统更新显示0x800