計算機三級嵌入式筆記
ARM內核
- 按照AMBA總線規範,以ARM內核爲基礎的嵌入式處理器芯片採用系統總線與外圍總線兩層結構的方式構建片上系統。
- AMBA是ARM公司爲連接ARM內核與處理器芯片中的其他各種組件而定義的總線規範,即先進的微控制器總線體系結構
- ARM處理器芯片內部的模擬組件包括ADC和DAC,有的還帶有比較器等。這對於既需要處理數字信號又需要處理模擬信號的混合系統的設計提供了較好的解決方案。
ARM處理器
- ARM採用RISC精簡指令集,採用馮諾依曼體系或哈佛結構
- ARM的總線結構稱爲AMBA (先進微控器制總線結構)
- 是ARM推出的開放式總線結構,是目前流行的一種工業標準片止結構;
- ARM處理器具有耗電省、功能強、成本低等特點
- ARM7~ARM1 1爲經典ARM處理器
- RM11以後則以Cortex命名,分爲三個系列,-A, -R, -M系列
– 分別面向高端應用、實時控制和微控制器;
– 其中Cortex-M 系列針對成本和功耗敏感的MCU和終端應用(如智能測量、人機接口設備、汽車和工業控制系統、大型家用電器、消費性產品和醫療器械)的混合信號設備進行過優化。
ARM處理器工作狀態
- 在ARM的體系結構中,處理器可以工作在3種不同的狀態
- ①ARM狀態
– ARM狀態是ARM處理器工作於32位指令的狀態,即32位狀態,所有指令均爲32位寬度。 - ②Thumb/Thumb-2狀態
– Thumb狀態是ARM執行16位指令的狀態,即16位狀態。
– 在Thumb模式下, 指令代碼只有16位,使代碼密度變大,佔用內存空間減小,提供比32位程序代碼更佳的效能。 - ③調試狀態
- ARM處理器復位後自動進入ARM狀態。
異常
ARM處理器7種異常:
(1) 復位RESET
(2) 未定義指令UND
(3) 軟件中斷SWI
(4) 指令預取中止PABT
(5) 數據訪問中止DABT
(6) 外部中斷IRQ
(7) 快速中斷FIQ
指令 | 作用 |
---|---|
CPSID I | 關中斷 |
CPSIE I | 開中斷 |
CPSID F | 關異常 |
CPSIE F | 開異常 |
I:IRQ中斷; F:FIQ中斷
- 順序需要備註背誦,用於確定中斷的異常地址
- 異常所對應的模式也需要背誦
運行模式切換
- 模式位需要背誦,需要知道切換到任意模式的操作方法
ARM彙編指令
ARM指令格式
操作碼+(條件域)+(更新S)+寄存器
BX是操作碼,EQ是條件域
BX是分支類指令,帶狀態切換的跳轉指令
BXEQ 則是帶狀態和條件跳轉
- LDR 字數據加載指令
- LDRB 字節數據加載指令
- LDRH 半字數據加載指令
- STR 字數據存儲指令
- STRB 字節數據存儲指令
- STRH 半字數據存儲指令
LDR/STR
ARM是RISC結構,數據從內存到CPU之間的移動只能通過L/S指令來完成,也就是ldr/str指令。
LDR,STR是用於寄存器和外部存儲器交換數據指令,注意與MOV的區別,後面只在寄存器或常數交換.
- LDR(load)用於把一個32Bit的WORD數據從外部存儲空間裝入到寄存器中.
- STR(Store) 用於把一個寄存器的值存入外部存儲空間,是LDR的逆操作.
若想把數據從內存中某處讀取到寄存器中,只能使用ldr:
ldr r0, 0x12345678
把0x12345678這個地址中的值存放到r0中
mov不能實現這個功 能,mov只能在寄存器之間移動數據,或者把立即數移動到寄存器中
還有一個就是ldr僞指令,雖然ldr僞指令和ARM的ldr指令很像,但是作用不太一樣。ldr僞指令可以在立即數前加上=,以表示把一個值(一般是一個地址)寫到某寄存器中
ldr r0, =0x12345678
把0x12345678這個值寫到r0中,所以,ldr僞指令和 mov是比較相似的。只不過mov指令限制了立即數的長度爲8位,也就是不能超過512。而ldr僞指令沒有這個限制。如果使用ldr僞指令時,後面跟的 立即數沒有超過8位,那麼在實際彙編的時候該ldr僞指令是被轉換爲mov指令的。
LDR加載指令
- LDR(load)用於把一個32Bit的WORD數據從外部存儲空間裝入到寄存器中.
LDR指令的格式爲: LDR{條件} 目的寄存器,<存儲器地址>
LDR指令用亍從存儲器中將一個32位的字數據傳送到目的寄存器中。該指令通常用亍從存儲器中讀取32位的字數據到通用寄存器,然後對數據迕行處理。當程序計數器PC作爲目的寄存器時,指令從存儲器中讀取的字數據被當作目的地址,從而可以實現程序流程的跳轉。
指令示例:
LDR R0,[R1] ;將存儲器地址爲R1的字數據讀入寄存器R0。
LDR R0, [R1] ;R1的值當成地址,再從這個地址裝入數據到R0 (R0=*R1)
LDR R1,=0x30008000 ; 把地址0x30008000的值裝入到R1中,LDR中用常數要用=打頭.
LDR R0,[R1,R2] ;將存儲器地址爲R1+R2的字數據讀入寄存器R0。
LDR R0,[R1,#8] ;將存儲器地址爲R1+8的字數據讀入寄存器R0。
LDR R0,[R1,R2]! ;將存儲器地址爲R1+R2的字數據讀入寄存器R0,並將新地址R1+R2寫入R1。
LDR R0,[R1,#8]! ;將存儲器地址爲R1+8的字數據讀入寄存器R0,並將新地址R1+8寫入R1。
LDR R0,[R1],R2 ;將存儲器地址爲R1的字數據讀入寄存器R0,並將新地址R1+R2寫入R1。
LDR R0,[R1,R2,LSL#2]! ;將存儲器地址爲R1+R2×4的字數據讀入寄存器R0,並將新地址R1+R2×4寫入R1。
LDR R0,[R1],R2,LSL#2 ;將存儲器地址爲R1的字數據讀入寄存器R0,並將新地址R1+R2×4寫入R1。”
LDR僞指令
ARM指令集中,LDR通常都是作加載指令的,但是它也可以作僞指令。
LDR僞指令的形式是“LDR Rn,=expr”。
例子:
COUNT EQU 0x40003100
……
LDR R1,=COUNT
MOV R0,#0
STR R0,[R1]
COUNT是定義的一個變量,地址爲0x40003100。
LDR R1,=COUNT是將COUNT這個變量的地址,也就是0x40003100放到R1中。
MOV R0,#0是將立即數0放到R0中。最後一句STR R0,[R1]是一個典型的存儲指令,將R0中的值放到以R1中的值爲地址的存儲單元去。實際就是將0放到地址爲0x40003100的存儲單元中去。可 見這三條指令是爲了完成對變量COUNT賦值。用三條指令來完成對一個變量的賦值,
LDR 的兩種用法
1)LDR PC, =MyHandleIRQ 表示將MyHandleIRQ符號放入PC寄存器中
2)LDR PC,MyHandleIRQ 表示將讀取存儲器中MyHandleIRQ符號所表示的地址中的值,及需要多讀一次存儲器。
綜述所述:ldr僞指令用於加載32位的立即數或一個地址值到指定寄存器。在彙編編譯源程序時,ldr僞指令被編譯器替換成一條合適的指令。若加載的常數 未超出mov或mvn的範圍,則使用mov或mvn指令代替該ldr僞指令,否則彙編器將常量放入文字池,並使用一條程序相對偏移的ldr指令從文字池讀 出常量。
STR存儲指令
- STR(Store) 用於把一個寄存器的值存入外部存儲空間,是LDR的逆操作.
STR指令的格式爲:
STR{條件} 源寄存器,<存儲器地址>
STR指令用亍從源寄存器中將一個32位的字數據傳送到存儲器中。該指令在程序設計中比較常用,尋址方式靈活多樣.
指令示例:
STR R0,[R1],#8 ;將R0中的字數據寫入以R1爲地址的存儲器中,並將新地址R1+8寫入R1.
STR R0,[R1,#8] ;將R0中的字數據寫入以R1+8爲地址的存儲器中。
STR r1,[r0] ;將r1寄存器的值,傳送到地址值爲r0的(存儲器)內存中
STR R0,[R1] ; 把R0的值,存入到R1對應地址空間上(*R1 = R0)
STR R0,=0x30008000 ;把R0中值存入到地址0x30008000
- S2C2440的中CPU內核以外的模塊的控制寄存器空間也是屬於外部空間,所以也得用如下指令LDR R0,=GPFDAT
比較指令(CMP、TST、BNE、BEQ)
CMP算數處理指令
CMP:算數處理指令,用於把一個寄存器的內容和另一個寄存器的內容或立即數進行減法比較,不存儲結果,都會更改標誌位
假設現在AX寄存器中的數是0002H,BX寄存器中的數是0003H。
執行的指令是:CMP AX, BX
執行這條指令時,先做用AX中的數減去BX中的數的減法運算。
列出二進制運算式子:
0000 0000 0000 0010
-0000 0000 0000 0011
_________________________________
(借位1) 1111 1111 1111 1111
所以,運算結果是 0FFFFH
根據這個結果,各標誌位將會被分別設置成以下值:
- CF=1,因爲有借位
- OF=0,未溢出
- SF=1,結果是負數
- ZF=0,結果不全是零
- 還有AF, PF等也會相應地被設置。
CMP 比較指令做了減法運算以後,根據運算結果設置了各個標誌位。
標誌位設置過以後,0FFFFH這個減法運算的結果就沒用了,它被丟棄,不保存。
執行過了CMP指令以後,除了CF,ZF,OF, SF,等各個標誌位變化外,其它的數據不變.
對照普通的減法指令 SUB AX, BX,它們的區別就在於:
- SUB指令執行過以後,原來AX中的被減數丟了,被換成了減法的結果。
- CMP指令執行過以後,被減數、減數都保持原樣不變。
TST邏輯處理指令
- TST:邏輯處理指令,用於把一個寄存器的內容和另一個寄存器的內容或立即數進行按位的與運算,並根據運算結果更新CPSR中條件標誌位的值。當前運算結果爲1,則Z=0;當前運算結果爲0,則Z=1.
BNE數據跳轉指令
- BNE: 數據跳轉指令,標誌寄存器中Z標誌位不等於零時, 跳轉到BNE後標籤處.
BEQ數據跳轉指令
- BEQ: 數據跳轉指令,標誌寄存器中Z標誌位等於零時, 跳轉到BEQ後標籤處.
例
TST r0 , #0x2 ;進行and運算,如果bit_2爲1,zero==0
;如果bit_2爲0,則zero==1,即該指令測試bit_2是否爲0
BNE led_blink ;非零則跳轉,若zero==1,跳轉到led_blink處執行
;若zero==0,則繼續執行下一步指令
SUB r1 , r1 , #1 ;r1=r1-1
CMP r1 , #0 ;r1是否等於0,並更改標誌位
BNE led_blink ;zero==1時跳轉至led_blink處,zero==0時則繼續執行
位移
- LSL 邏輯左移
- ASL 算術左移
- LSR 邏輯右移
- ASR 算術右移
- ROR 循環右移
- RRX 帶擴展的循環右移
- ASL 和 LSL 是等同的,可以自由互換。
- 可以用一個立即值(從0到31)指定移位數量,或用包含在0和31之間的一個值的寄存器指定移位數量
http://blog.sina.com.cn/s/blog_13ced11ce0102v63n.html
複合
- ADDCEQ R3,R1,R2 如果條件相等,則R3=R1+R2
- SUBHIS R3,R1,R2 如果條件相等,則R3=R1-R2
嵌入式內核分類
- 嵌入式處理器的體系結構按指令集可分爲兩大類: CISC和RISC;
– CISC(複雜指令集)
– RISC(精簡指令集) - 按存儲機制分爲馮諾依曼結構及哈佛結構;
(1)採用存儲程序方式,指令和數據不加區別混合存儲在同一個存儲器中,
數據和程序在內存中是沒有區別的,它們都是內存中的數據,
當EIP指針指向哪.
CPU就加載那段內存中的數據,如果是不正確的指令格式,CPU就會發生錯誤中斷.
在現在CPU的保護模式中,每個內存段都有其描述符,
這個描述符記錄着這個內存段的訪問權限(可讀,可寫,可執行).
這就變相的指定了哪些內存中存儲的是指令哪些是數據)
指令和數據都可以送到運算器進行運算,即由指令組成的程序是可以修改的。
(2)存儲器是按地址訪問的線性編址的一維結構,每個單元的位數是固定的。
(3)指令由操作碼和地址碼組成。操作碼指明本指令的操作類型,地址碼指明操作數和地址。操作數本身無數據類型的標誌,它的數據類型由操作碼確定。
(4)通過執行指令直接發出控制信號控制計算機的操作。指令在存儲器中按其執行順序存放,由指令計數器指明要執行的指令所在的單元地址。指令計數器只有一個,一般按順序遞增,但執行順序可按運算結果或當時的外界條件而改變。
(5)以運算器爲中心,I/O設備與存儲器間的數據傳送都要經過運算器。
(6)數據以二進制表示。
– 哈佛結構的微處理器通常具有較高的執行效率。其程序指令和數據指令分開組織和存儲的,執行時可以預先讀取下一條指令。
哈佛結構是指程序和數據空間獨立的體系結構,目的是爲了減輕程序運行時的訪存瓶頸。 - 按字長分爲8位、16位、 32位和64位。
數據處理操作
寄存器
ARM 處理器一般共有 37 個寄存器,其中包括:
(1) 31 個通用寄存器,包括 PC(程序計數器)在內,都是 32 位的寄存器。
(2) 6 個狀態寄存器,都是 32 位的寄存器。
ARM 處理器共有 7 種不同的處理器模式:
- 用戶模式(User)
- 快速中斷模式(FIQ)
- 普通中斷模式(IRQ)
- 管理模式(Svc)
- 數據訪問中止模式(Abort)
- 未定義指令中止模式(Und)
- 系統模式(Sys)
- R0~R3 主要用於子程序間傳遞參數
- R4~R11 主要用於保存局部變量
- 在Thumb 程序中,通常只能使用 r4~r7 來保存局部變量
- R12 用作子程序間 scratch 寄存器,即 IP 寄存器
- R13 通常用做棧指針,即 SP
- R14 寄存器又被稱爲連接寄存器 LR,用於保存子程序以及中斷的返回地址
- R15 用作程序計數器 PC,由於 ARM 採用了流水線機制,當正確讀取了 PC 的值後,該值爲當前指令地址加 8 個字節,即 PC 指向當前指令的下兩條指令地址, PC = 當前程序執行地址 + 8個字節.
- CPSR和SPSR都是程序狀態寄存器,其中SPSR是用來保存中斷前的CPSR中的值,以便在中斷返回之後恢復處理器程序狀態
CPSR(32位)
- 狀態寄存器就是CPSR(current program status register)寄存器
- 程序狀態寄存器CPSR在用戶級編程時用於存儲條件碼:
– CPSR包含條件碼標誌,中斷禁止位,當前處理器模式以及其他狀態和控制信息。
- CPSR的低8位(包括I、F、T和M[4:0])稱爲控制位,程序無法修改,除非CPU運行於特權模式下,程序才能修改控制位!
- N、Z、C、V均爲條件碼標誌位。它們的內容可被算術或邏輯運算的結果所改變,並且可以決定某條指令是否被執行!
各個條件碼的含義如下:
N:在結果是有符號的二進制補碼情況下,如果結果爲負數,則N=1;如果結果爲非負數,則N=0。
Z:如果結果爲0,則Z=1;如果結果爲非零,則Z=0。
C:其設置分一下幾種情況:
對於加法指令(包含比較指令CMN),如果產生進位,則C=1;否則C=0。
對於減法指令(包括比較指令CMP),如果產生借位,則C=0;否則C=1。
對於有移位操作的非法指令,C爲移位操作中最後移出位的值。
對於其他指令,C通常不變。
V:對於加減法指令,在操作數和結果是有符號的整數時,如果發生溢出,則V=1;如果無溢出發生,則V=0;對於其他指令,V通常不發生變化。
CPSR_CXSF
大小端模式
- 大端模式
所謂的大端模式(Big-endian),是指數據的高字節,保存在內存的低地址中,而數據的低字節,保存在內存的高地址中. - 小端模式
所謂的小端模式(Little-endian),是指數據的高字節保存在內存的高地址中,而數據的低字節保存在內存的低地址中.
USB
- USB接口提供了內置電源,主機的USB接口向從設備提供電源;
- USB總線接口支持設備的即插即用和熱插拔功能;
- USB2.0採用半雙工差分方式傳送信息;
- 目前USB2.0的速度爲480Mb/s,USB3.0達到5Gb/s即640MB/s;
- USB3.0利用了雙向數據傳輸模式,而不再是USB2.0時代的半雙工模式;
操作系統
實時操作系統特徵
IEEE的實時UNIX分委會認爲實時操作系統應該具備7個特徵:
- 具有異步I/O和中斷處理能力;
- 任務切換時間和中斷延遲時間確定;
- 優先級中斷和調度;
- 搶佔式調度;
- 內存鎖定;
- 連續文件
- 同步;
強實時操作系統
一般按照對外部事件的響應時間快慢,將嵌入式操作系統分成強實時型和普通實時型。
強實時嵌入式操作系統有
- VxWorks
– VxWorks 操作系統是美國WindRiver公司於1983年設計開發的一種嵌入式實時操作系統. - pSOS
– pSOS是美國系統集成公司(Integrated Systems, Inc. 簡稱ISI公司)根據幾十年從事嵌入式實時系統理論研究與實踐活動而設計開發的,該公司已經被風河公司(windriver)兼併. - μC/OS-II
– μC /OS-II是一個完整的、可移植、可固化、可裁剪的搶佔式實時多任務內核。μC/OS-II絕大部分的代碼是用ANSII的C語言編寫的,包含一小部分彙編代碼,使之可供不同架構的微處理器使用.
μC/OS-II
- μC/OS-II是搶佔式實時操作系統內核,只能管理64個任務
- 目前的版本保留8個任務給系統
- 用戶編寫的應用程序最多可以有56個任務
- 不支持時間片輪轉調度法,因此賦給每個任務的優先級是不相同的
- 每個任務擁有自用棧
- μC/OS-II允許中斷嵌套,嵌套層數可達255層。
- uC/OS-II能夠提供週期性時鐘信號(即所謂的時鐘節拍) ,用於實現任務的正確延時和超時確認。節拍率應在每秒10次到100次之間,即10~ 100Hz.
- μC/OS-II內核只提供任務調度、任務間通信與同步、任務管理、時間管理和存儲管理等基本功能,資源消耗非常小
- 移植時需要修改的文件
– OS_CPU.H
– OS_CPU_A.S
– OS_CPU_C.C
任務優先級
- 創建任務時OSTaskCreate()的最後一個參數表示任務優先級,其值越小,優先級越高.
任務間通信
uCOS-II中有多種方法可以保護任務之間的共享數據和提供任務之間的通信。
其中主要有以下三種:
- 利用宏OS _ENTER _CRITICAL()和OS _EXIT _CRITICAL()來關閉中斷和打開中斷
- 利用函數OSSchedLock()和OSSchedUnlock()對任務調度函數上鎖和開鎖
- 利用信號量、互斥信號量、郵箱和消息隊列進行任務間通信
VxWorks
VxWorks操作系統是美國WindRiver公司於1983年設計開發的一種嵌入式實時操作系統(RTOS) ,是嵌入式開發環境的關鍵組成部分,支持基於搶佔式優先級調度的任務管理。
它以其良好的可靠性和卓越的實時性被廣泛地應用在通信、軍事、航空航天等高精尖技術及實時性要求極高的領域中。
單(宏)內核與微內核
單內核
單內核結構是傳統操作系統採用的結構,也稱爲宏內核(Macro Kernel).
其缺點是
- 佔內存空間大
- 缺乏可擴展性
- 維護困難
- 任務執行時間的可預測性較低
- 可靠性較低
- 排除故障和增加新功能需要重編譯
其優點是 - 應用程序生成效率高
- 系統花在內核功能切換上的開銷非常小
- 對外來事件反應速度快
- 操作系統內核的運行效率高
微內核
微內核操作系統是對單內核做了結構改進後推出的
- 內核小巧
- 傳統操作系統內核中的許多部分都被移出內核
- 採取服務器方式實現;
- 接口一致,所有進程請求使用統一接口,
- 進程不區分內核模式和用戶模式服務
- 各個功能模塊之間鬆散耦合,只完成服務功能
- 系統管理功能交給一 個或多個特權服務程序
- 微內核功能擴充方便,但是各個功能之間的切換而引起的開銷比較大
屬於微內核的典型嵌入式操操作系統
屬於微內核結構的典型嵌入式操作系統有
- Symbian
- VxWorks
- QNX
- μC/OS-II
- iOS
等。
BootLoader
U-Boot
U-Boot,全稱Universal Boot Loader,是德國DENX公司開發的,用於多重嵌入式CPU的Bootloader程序,它遵循GPL條款, 源代碼完全開放。從FADSROM、 8XxROM、
PPCBOOT逐步發展演化而來
U-Boot以POCBoot和ARMBoot計劃爲基礎。
支持
- Power PC系列處理器
- X86
- ARM
- Mips
- Alpha
- IA64
- SupcrHSPARC
等多種常用體系結構處理器.
系統中引導加載程序主要完成
- 加電自檢
- 外設存在自檢
- 內存地址映射
- 初始化外圍設備
- 內存尋址定位
- 加載並啓動操作系統
常用函數名/宏名
中斷和任務切換
- 宏OS _ENTER _CRITICAL()和OS _EXIT _CRITICAL() 關閉中斷和打開中斷
- 函數OSSchedLock()和OSSchedUnlock() 對任務調度函數上鎖和開鎖
- 真正實現任務切換的函數是OSCtxSw()
- 任務級的調度是由函數OSSched() 完成
- 中斷級的調度是由函數OSIntExit() 完成
消息
- OSQPend() 函數用來等待並獲得消息.
- OSQPost() 函數用來發送消息.
事件控制塊
μC/OS-II的事件控制塊有4種類型,需要使用4個不同的函數來創建。
4個不同的函數分別是:
- OSSemCreate ()
- OSMutexCreate ()
- OSMboxCreate ()
- OSQCreate()
移植相關
- OS_CPU.H
- OS_CPU_A.S
- OS_CPU_C.C
其他
- 按照IC設計文件的類型,IP核通常分爲三種:軟核、固核和硬核
- 當前數碼相機中用於存儲相片的大多是閃存卡,即Flash存儲器
- WLAN所採用的主要通信協議是802.11;數據傳輸速率可達到11 Mbps. 54Mbps、 108Mbps甚至更高.
經典ARM處理器有7種異常:主要包括
- 復位RESET
- 未定義指令UND
- 軟件中斷SWl
- 指令預取中止PABT
- 數據訪問中止DABT
- 外部中斷請IRQ
- 快速中斷FIQ
指令 | 作用 |
---|---|
CPSID I | 關中斷 |
CPSIE I | 開中斷 |
CPSID F | 關異常 |
CPSIE F | 開異常 |
I:IRQ中斷; F:FIQ中斷
當調用子程序時,子程序調用指令爲BL fun_name
子程序返回調用程序的指令爲MOV PC,LR(注意逗號)
按照AMBA總線規範,基於ARM內核的嵌入式處理器芯片採用系統總線與外圍總線兩層結構的方式構建片上系統。其中的系統總線主要用於連接高帶寬快速組件。
嵌入式系統的存儲器以半導體存儲器爲主,FRAM和MRAM,分別稱爲鐵電隨機存取存儲器和磁性隨機存取存儲器。
l2C總線的仲裁機制。I2C總線被啓動後,多個主機在每發送一個數據位時都要對SDA信號線電平進行檢測,只要檢測的電平與自己發出的電平相同就會繼續佔用總線。
總線的控制遵循"低電平優先”的原則。
UART由發送器、接收器、控制單元及波特率發生器等構成。
基於操作系統的外圍工具軟件運行在嵌入式系統上,往往具有內部結構精簡,代碼輕量化,佔用存儲資源少的特點。
任務時限的兩種類型。實時系統的任務時限有兩種:截止時間,也就是任務開始執行時間到任務必須完成的時間間隔。任務執行預設時間,或者叫做任務最快完成時間,這是無中斷響應情況下的任務最快執行時間。
實時系統對時間約束要求的嚴格性,使可預測性成爲實時系統的-項重要性能要求,它是指RTOS能夠對外部事件的響應時間和實時任務的執行時間進行判斷,以確定被事件觸發的實時任務能否在規定的時間內完成。
實時系統按響應時間一般分成三類:
- 強實時系統,其響應時間一般在毫秒級或微秒級;
- 普通實時系統,其響應時間一般在秒級;
- 弱實時系統,其響應時間一般在數十秒級;
一般嵌入式系統的開發過程,通常分爲:
- 需求分析與規格說明
- 系統設計
- 構件設計
- 系統集成與測試
等4個階段。
嵌入式系統的分類
- 按系統的軟硬件技術複雜度,嵌入式系統分爲低端系統、中端系統和高端系統。
以太網傳輸數據計算
10Mbps理論速度是每秒1.25MB,算上損耗後在計算時當做1Mbyte每秒計算.
最小系統
嵌入式最小硬件系統一般包括
- 嵌入式處理器
- 時鐘電路
- 電源電路
- 復位電路
- 存儲器
- 調試測試接口。
前向通道和後向通道
- 前向通道通常指的是輸入接口,由模擬量輸入接口和數字量輸入接口組成
- 模擬輸入接口包括傳感器,信號調節電路(濾波,放大器等), A/D轉換器等構成
- 後向通道是輸出接口,由模擬量和數字量接口組成,
- 包括D/A轉換器,功率放大器,執行器等
系統總線相關
按照AMBA總線規範,以ARM內核爲基礎的嵌入式處理器芯片採用系統總線與外圍總線兩層結構的方式構建片上系統。
連接到系統總線上高帶寬組件主要包括:
- 電源管理與時鐘控制器
- 測試接口
- 外部存儲器控制接口
- DMA控制器
- USB主機
- 中斷控制器等
AMBA是ARM公司爲連接ARM內核與處理器芯片中的其他各種組件而定義的總線規範,即先進的微控制器總線體系結構
總線帶寬和存儲器帶寬
- 存儲器帶寬計算公式: (儲存器工作頻率MHzx 數據線寬度/8)x 1B/s= 帶寬 MB/S;
- 存儲器總線採用串行總線,以10位爲一個數據幀(包含一個字節的存儲數據),則總線帶寬=總線頻率/10。[總線帶寬=總線頻率/數據幀大小]
跳轉進入操作系統內核
指令BL_ main來引導應用程序的主函數main()
網頁設計
- 網頁設計時通常採用HTML語言來進行編程。
- 客戶機一般用瀏覽器訪問因特網。
Web服務器和CGI概述
CGI概述
CGI(公用網關接口)規定了Web服務器調用其他可執行程序(CGI程序)的接口協議標準。Web服務器通過調用CGI程序實現和Web瀏覽器的交互,
也就是CGI程序接受Web瀏覽器發送給Web服務器的信息,進行處理,將響應結果再回送給Web服務器及Web瀏覽器。CGI程序一般完成Web網頁中表單(Form)數據的處理、數據庫查詢和實現與傳統應用系統的集成等工作。CGI程序可以用任何程序設計語言編寫,如Shell腳本語言、Perl、Fortran、Pascal、C語言等。但是用C語言編寫的CGI程序具有執行速度快、安全性高(因爲C語言程序是編譯執行且不可被修改)等特點。
- CGI接口程序可以用任何語言編程,在HTML網頁中嵌入CGI接口程序可以完成與設備操控組件的信息交互。
數據位寬
- 控制芯片AX88796的數據總線寬度爲16位。
漢字編碼
- 我國大陸地區目前廣泛使用的漢字編碼國家標準有GB2312和GB1 8030兩種
- 常用漢字採用2個字節表示。
內存映射
上面的每個bank最大支持128M,除了bank0,其它的每個bank都支持8/16/32位操作,bank0只支持16/32位操作.
網絡
TCP/IP
TCP/IP協議簇中的IP協議,在Internet中負責選擇合適的路由,使發送的數據分組(packet) 能夠正確無誤地按照地址找到目的計算機
以太網數據幀
- 前導碼(7字節)
- 幀起始定界符(1字節)
- 目的MAC地址(6字節)
- 源MAC地址(6字節)
- 類型/長度(2字節)
- 數據(46~1500字節)
- 幀校驗序列(4字節)
IP地址中A類、B類、C類地址的區別
1、IP地址表示方法不同:
A類
一個A類IP地址是指, 在IP地址的四段號碼中,第一段號碼爲網絡號碼,剩下的三段號碼爲本地計算機的號碼。如果用二進制表示IP地址的話,A類IP地址就由1字節的網絡地址和3字節主機地址組成,網絡地址的最高位必須是“0”。A類IP地址中網絡的標識長度爲8位,主機標識的長度爲24位。
B類
一個B類IP地址是指,在IP地址的四段號碼中,前兩段號碼爲網絡號碼。如果用二進制表示IP地址的話,B類IP地址就由2字節的網絡地址和2字節主機地址組成,網絡地址的最高位必須是“10”。B類IP地址中網絡的標識長度爲16位,主機標識的長度爲16位。
C類
一個C類IP地址是指,在IP地址的四段號碼中,前三段號碼爲網絡號碼,剩下的一段號碼爲本地計算機的號碼。如果用二進制表示IP地址的話,C類IP地址就由3字節的網絡地址和1字節主機地址組成,網絡地址的最高位必須是“110”。C類IP地址中網絡的標識長度爲24位,主機標識的長度爲8位。
2、IP地址範圍不同:
A類IP地址 地址範圍從1.0.0.1到127.255.255.254
(二進制表示爲:
00000001 00000000 00000000 00000001 - 01111111 11111111 11111111 11111110)。
最後一個是廣播地址。
B類IP地址地址範圍從128.0.0.1-191.255.255.254
(二進制表示爲:
10000000 00000000 00000000 00000001 - 10111111 11111111 11111111 11111110)。
最後一個是廣播地址。
C類IP地址範圍從192.0.0.1-223.255.255.254
(二進制表示爲:
11000000 00000000 00000000 00000001 - 11011111 11111111 11111111 11111110)。
最後一個是廣播地址。
3、子網掩碼不同:
A類IP地址的子網掩碼爲255.0.0.0
B類IP地址的子網掩碼爲255.255.0.0
C類IP地址的子網掩碼爲255.255.255.0
4、適用範圍不同:
A類適用的類型爲大型網絡,A類網絡地址數量較少,有126個網絡,每個網絡支持的最大主機數爲256的3次方-2=16777214臺;
B類適用的類型爲中型網絡,B類網絡地址數量適中,有16384個網絡,每個網絡支持的最大主機數爲256的2次方-2=65534臺;
C類適用的類型爲小型網絡,C類網絡地址數量較多,有209萬餘個網絡,適用於小規模的局域網絡,每個網絡支持的最大主機數爲256的1次方-2=254臺。
開發工具
GCC調試
- 要對源程序進行調試,通常需要在GCC命令中加入參數-g
RVDS
- RVDS支持 所有ARM芯片,包括Cortex全系列,還支持其他內核的處理器,如51系列
- RVDS中包括工程管理器、編譯連接器、調試器和指令集仿真器
- RVDS支持對Flash存儲器的編程
- RVDS編譯的代碼比ADS1.2編譯的代碼執行效率高
協議
SPI
- SPI總線是一種同步串行外設接口總線
- SPI的信號線MISO稱爲主機輸入從機輸出數據線, MOSI稱爲主機輸出從機輸入數據線
操作系統理論
響應時間
響應時間(Response Time)是計算機從識別一個外部事件到做出響應的時間,其具體指標包括:中斷延遲時間和任務切換時間
需要掌握的計算以及參數
- 波特率計算
- 定時器計算
- 以太網傳輸數據量計算
- 波特率傳輸數據量計算
- 圖片佔用大小計算
- 存儲器容量計算
- 總線和帶寬計算
- 語音採樣頻率計算
– 根據奈奎斯特定理(香農定理)
在進行模擬/數字信號的轉換過程中,
當採樣頻率fs.max大於信號中最高頻率fmax的2倍時(fs.max>2fmax) - 人的語音信號是頻率範圍爲300Hz ~ 3400/4000Hz的模擬信號
- 設計語音回放軟件時,爲了使回放時語音不會失真,需定時把數字語音信號輸出到D/A芯片中,這個定時時間間隔應該是一個採樣週期
需要會配置的外設寄存器
各個模式都需要會配置(*爲重點)
*IIC
*RTC(報警功能)
*UART
*LCD
*GPIO
*TIME(PWM)
紅外
ADC
DAC
DMA
SPI
串口配置
波特率計算
- 當題目要求設置的波特率採用四捨五入的方式時需要在最後+0.5再-1
//例 設置波特爲9600,時鐘源爲PCLK
UBRDIVu = ((int)(PCLK)/(9600*16+0.5)-1);
//因爲*和/的優先級比+高,所以會再計算完後四捨五入再減一
定時器配置
相關參數計算
- 定時器輸入時鐘頻率 = { 微處理器的系統頻率參數 / ( 預分頻係數+1 ) } / 分割器值
– 注意此處是連除,不能當做除以一個分子來處理 - 計數常數 = 定時時間間隔 / ( 1 / 定時器輸入時鐘頻率 )
– 此處可以當做除以一個分子等價於 = > 定時時間間隔 * 定時器輸入時鐘頻率
//例 需設置定時間隔0.01秒
系統的主頻參數PCLK爲264MHz,分頻器值選擇爲16,預分頻係數選擇爲3,Timer0的計數常數爲
1.定時器輸入時鐘頻率 = 微處理器的系統頻率參數/(預分頻係數+1)/分割器值
= (264*1000000Hz)/(3+1)/16
= 4125000 Hz
2.計數常數 = 定時時間間隔/(1/定時器輸入時鐘頻率)
= 0.01*4125000 Hz
= 41250
3.所求結果41250位計數常數的結果
寄存器設置
在設置該寄存器時需注意順序
例設置定時器0的預分頻係數爲4,則TCFG0 = 0X40;
因爲Prescaler 0的順序從低到高是定時器1,定時器0
LCD控制器
相關管腳
- s3c2410
– GPIOC和GPIOD
– 管腳全部複用 配置數值爲0xAAAAAAAA和0xAAAAAAAA
寄存器設置
RTC實時時鐘
- 一般寄存器均爲8位
- TICNT設置爲0xFF(0X7F)則時間間隔爲1秒
- RTCALM設置爲0則禁止所有報警功能
- RTC讀寫操作完成後對RTCCON“使能位”操作,不需要復位即設置爲0X0E
RTCEN 位可以控制所有 CPU 與 RTC 之間的接口,因此在系統復位後在 RTC 控制程序中必須設置爲 1 來使
能數據的讀/寫。同樣的在掉電前,RTCEN 位應該清除爲 0 來預防誤寫入 RTC 寄存器中。
- 注意在寫之前需要將RTCEN 置1,即對寄存器RTCCON = RTCCON | 0x01
- 注意在寫之後需要將RTCEN 清0,即對寄存器RTCCON = RTCCON & 0xFE