c_learn_2
892
2022-05-29
嵌入式系統(tǒng)
嵌入式系統(tǒng)上的軟件具有結(jié)構(gòu)精簡,代碼輕量化,占用存儲資源少的特點(diǎn)。
嵌入式系統(tǒng)和計(jì)算機(jī)操作系統(tǒng)的共同特征是:引導(dǎo)加載程序、外設(shè)驅(qū)動程序、操作系統(tǒng)、文件系統(tǒng)、網(wǎng)絡(luò)協(xié)議棧、圖形用戶界面、數(shù)據(jù)庫。
嵌入式系統(tǒng)應(yīng)用開發(fā)工具的主要目的:提高開發(fā)質(zhì)量,縮短開發(fā)周期,降低開發(fā)成本。
按照軟硬件技術(shù)的復(fù)雜程度進(jìn)行分類,可以把嵌入式系統(tǒng)分為:高端系統(tǒng)、終端系統(tǒng)和低端系統(tǒng)三大類。
仿真平臺指嵌入式系統(tǒng)開發(fā)中使用的虛擬機(jī)管理軟件、仿真軟件或者指令集模式器
對應(yīng)內(nèi)存容量而言1KB = 1024B,對應(yīng)外存(磁盤、U盤)等容量而言,1KB=1000B
OS裝載方式:串口、以太網(wǎng)和USB裝載。
嵌入式應(yīng)用程序經(jīng)過交叉工具鏈生成映像文件后,需要下載到目標(biāo)機(jī)進(jìn)行調(diào)試。
調(diào)試完畢后映像文件必須有專用工具燒寫到ROM中去,這種燒寫工具俗稱編程器!
文本根據(jù)排版格式可分為:純文本和豐富文本。windows環(huán)境下,txt就是純文本。相對于線性文本,超文本按著網(wǎng)狀結(jié)構(gòu)組織信息。WWW網(wǎng)頁是最為常見超文本。
當(dāng)前速度最快的CPU已經(jīng)超過10GHz。
嵌套向量中斷控制器縮寫為NVIC
GCC是GNU套件的編譯鏈接器,能編譯C語言,匯編語言。
GDB調(diào)試下,file命令是裝入需要調(diào)試的可執(zhí)行文件,run命令執(zhí)行當(dāng)前被調(diào)試的程序。
源文件到可執(zhí)行文件的步驟:預(yù)處理->編譯->匯編->連接。
前向通道和后向通道
前向通道 - 輸入接口,A/D
后向通道 - 輸出接口,D/A
AX88796芯片內(nèi)部寄存器的地址范圍:0x10000000 ~ 0x100003FF
嵌入式系統(tǒng)硬件的邏輯組成
硬件主體中央處理器和存儲器,他們通過IO接口或者IO設(shè)備與外部世界聯(lián)系,并借助總線相互連接
中央處理器主要由運(yùn)算器、控制器、寄存器和高速緩沖區(qū)(cache)組成
嵌入式系統(tǒng)的特點(diǎn)
專用型
隱蔽型
資源受限
高可靠性
軟件固化
實(shí)時性
嵌入式系統(tǒng)的CPU特點(diǎn)
實(shí)時處理
低功耗
結(jié)構(gòu)特拓展性
集成了測試電路
4、8、16、32位字長
CPU
嵌入式系統(tǒng)的CPU主要使用的有DSP、RAM以及FPGA。
DSP介紹
適用于數(shù)字信號處理的微處理器(DSP并非高性能通用處理器,它是一種專用于數(shù)字信號處理的微處理器)
支持單指令多數(shù)據(jù)(SIMD)并行處理的指令
顯著提高音頻、視頻等數(shù)字信號的數(shù)據(jù)處理效率
手機(jī)和數(shù)碼產(chǎn)品均有DSP
嵌入式開發(fā)流程
需求分析和規(guī)格說明 -> 系統(tǒng)設(shè)計(jì) -> 構(gòu)件設(shè)計(jì) -> 系統(tǒng)集成與測試
測試的目的是驗(yàn)證模塊/系統(tǒng)的功能和性能,以及時發(fā)現(xiàn)錯誤
基于嵌入式WEB的應(yīng)用系統(tǒng)中,構(gòu)件設(shè)計(jì)階段需要設(shè)計(jì)支持以太網(wǎng)通信的電路,包括以太網(wǎng)控制電路和以太網(wǎng)驅(qū)動電路。AX8879芯片內(nèi)部寄存器的讀/寫地址,其首地址一般是0x1000 0000
嵌入式開發(fā)特點(diǎn)
宿主機(jī) - 目標(biāo)機(jī)的開發(fā)架構(gòu)
與底層硬件控制程序的關(guān)系密切
軟硬件資源受限制
需要固化程序
嵌入式系統(tǒng)開發(fā)調(diào)試工具
在線仿真器
JTAG適配器
示波器
GPIO
GPIO引腳一般是多功能復(fù)用的,具有0態(tài),1態(tài)和高阻態(tài)。
作為輸入接口時一般具有緩沖功能,作為輸出接口時一般具有鎖存功能。
GPIO可以實(shí)現(xiàn)并行IO,SPI、UART、I2C都是串行。
UART
UART由發(fā)生器、接收器、控制單元以及波特率發(fā)生器等組成。
可實(shí)現(xiàn)全雙工通信!
RAM芯片中的UART收發(fā)信息時,可以采用FIFO,也可以采用普通模式
一般接收和發(fā)送緩沖區(qū)的FIFO字節(jié)數(shù)一樣的,長度可編程選擇4B、8B、16B、64B。
UART傳送消息的格式是以起始位開始以停止位結(jié)束
UART傳送信息時,一次可傳輸?shù)臄?shù)據(jù)位可以是5,6,7,8位,由編程決定
基于UART可組成RS-232接口
RS232 - 最遠(yuǎn)15m
RS485 - 最遠(yuǎn)1.2k
RAM實(shí)現(xiàn)485總線的功能,需要采用S3C2410芯片內(nèi)部的UART部件外加轉(zhuǎn)換芯片等來實(shí)現(xiàn)。在軟件設(shè)計(jì)時,初始化波特率9600bps,數(shù)據(jù)格式格式為:8位數(shù)據(jù)位,無數(shù)據(jù)檢驗(yàn)位,1位停止位。那么1s時間內(nèi)最多傳輸960個字節(jié)。(注意計(jì)算還得加上起始位和停止位)
CAN
即: 控制器局域網(wǎng)
能夠?qū)崿F(xiàn)多主通信
CAN總線的數(shù)據(jù)幀由7個不同的域組成,其中域的長度可以是0~8位
采用CRC校驗(yàn)
RAM芯片內(nèi)部嵌入CAN控制器
鍵盤
8個GPIO腳最多構(gòu)成64個按鍵的鍵盤
矩陣鍵盤通常有行掃描法和反轉(zhuǎn)法讀取按鍵的特征值(還有一種方法叫做中斷方式)
嵌入式處理器內(nèi)核的分類
按照字長可以分為:8/16/32/64 位結(jié)構(gòu)
按照存儲可以分為:馮諾依曼和哈佛(程序和數(shù)據(jù)分開存儲)結(jié)構(gòu)
按照指令集可以分為:CISC、 RISC結(jié)構(gòu)
CISC(complex instruction set computer 復(fù)雜指令集)
RISC(reduced instruction set computer 精簡指令集)
SOC片上系統(tǒng)
SOC已成為嵌入式處理器芯片的主流發(fā)展趨勢
它是集成電路進(jìn)入深亞微米時代的產(chǎn)物
既能把數(shù)字電路也能把模擬電路集成到單個芯片上
包含數(shù)字電路、模擬電路以及射頻電路
單個芯片即可完成采集、轉(zhuǎn)換、存儲、處理和I/O等多種功能
SOC有通用SOC芯片和專用SOC芯片之分
專用SOC芯片按其工藝分為定制芯片和現(xiàn)場可編程芯片兩類
集成電路
集成電路有小規(guī)模(SSI)、中規(guī)模(MSI)、大規(guī)模(LSI)、超大規(guī)模(VLSI)和極大規(guī)模(ULSI)組成,嵌入式處理芯片一般屬于VLSI和USLI。
集成電路大多是在硅襯底上制作,硅襯底是單晶硅錠經(jīng)切割,研磨和拋光而成的圓形薄片。
集成電路中的電路及電子元件,需要反復(fù)交叉氧化、光刻、摻雜和互連等工序才能制成。
嵌入式最小系統(tǒng)組成
嵌入式系統(tǒng)一般包括嵌入式處理器、時鐘電路、電源電路、復(fù)位電路、存儲器和調(diào)試測試接口。
JTAG調(diào)試技術(shù)
JTAG標(biāo)準(zhǔn)中規(guī)定的TAP接口具有5根信號線
構(gòu)建一個宿主機(jī) - 目標(biāo)機(jī)的開發(fā)環(huán)境,若目標(biāo)機(jī)是裸機(jī),那么為了調(diào)試和下載軟件需要將調(diào)試仿真器連接到目標(biāo)機(jī)的JTAG接口!
JATG是一種嵌入式測試技術(shù),大多數(shù)嵌入式CPU、DSP、FPGA器件都支持JTAG
JTAG允許多個芯片的邊界掃描寄存器BSR通過JTAG接口串聯(lián)在一起,實(shí)現(xiàn)對多個器件的測試
通過JTAG可以實(shí)現(xiàn)在線編程功能
主頻時鐘
0.01s基準(zhǔn)定時時間選用S3C2410芯片內(nèi)部的Timer0部件產(chǎn)生。若系統(tǒng)的主頻參數(shù)PCLK=264MHz,分頻器選擇16,預(yù)分頻系數(shù)選擇為3,那么,Timer0的計(jì)數(shù)常數(shù)為:41250
計(jì)算方法:定時器輸入時鐘頻率 = PCLK/(預(yù)分頻系數(shù)+1)/(分割器值),計(jì)數(shù)常數(shù) = 定時間間隔/(1/定時器輸入時鐘頻率)
帶寬 = 總線頻率 × 數(shù)據(jù)線寬度 / 8 × 次數(shù) / 周期
板級升級包(BSP)
引導(dǎo)加載程序、初始化程序、設(shè)備驅(qū)動程序、配置文件
含有電路板的初始化程序
所有與特定電路板上硬件相關(guān)的功能都集成在板級支持包的庫里
操作系統(tǒng)的上層代碼通過板級支持包訪問底層硬件
ARM
單指令周期和流水線技術(shù)是RAM處理器的技術(shù)特征。
RAM都是RISC,但是存儲結(jié)構(gòu)有的是哈佛結(jié)構(gòu),有的是馮諾依曼結(jié)構(gòu)。
PowerPC、MC68K、MIPS都是RISC,哈佛結(jié)構(gòu)!
Cortex 系列分為A-R-M ,A系列是面向尖端虛擬內(nèi)存的操作系統(tǒng)和用戶應(yīng)用,R系列是針對實(shí)時系統(tǒng),M系列是對微控制器。 Cortex - M3系列是哈佛結(jié)構(gòu)。
RAM內(nèi)部一般有:UART/I2C/SPI/CAN/USB/Ethernet等多個互連通信組件
RAM處理器共37個,包括31個通用寄存器(含PC)和6個狀態(tài)寄存器
RAM異常
將CPRS的值保存到將要執(zhí)行的異常中斷對應(yīng)的SPSR中
設(shè)置CPSR的相應(yīng)位
斷點(diǎn)地址保存到R14
PC賦值,轉(zhuǎn)入向量地址
ADS
按照存儲區(qū)域類型劃分為3類,RO段,RW段,ZI段,RO段是指代碼存儲區(qū)和常數(shù)存儲區(qū),具有只讀屬性
可執(zhí)行輸出文件有3個生成目標(biāo):Debug、Release、DEbugRel
工程項(xiàng)目按照一定的邏輯來分組管理文件:
文件映射關(guān)系較簡單時:使用編譯、鏈接選項(xiàng)來確定輸入文件的連接關(guān)系
地址映射關(guān)系較復(fù)雜時:使用scatter(分散加載)格式的文件來確定輸入文件的連接關(guān)系
RVDS
RVDS開發(fā)工具套件中,主要包括工程管理器、編譯連接器、調(diào)試器和指令集仿真器。調(diào)試器支持硬件在線調(diào)試和軟件仿真調(diào)試。
電源管理模塊
正常模式
慢速模式
休眠模式 - 僅斷開RAM內(nèi)核時鐘FCLK,CPU處于休眠模式,仍為外圍硬件組件提供時鐘。
掉電模式 - 切斷內(nèi)部電源,除非喚醒邏輯有效,否則內(nèi)核不產(chǎn)生功耗
正常模式下,電源管理模式為內(nèi)核及RAM芯片內(nèi)部所有硬件組成提供時鐘源,用戶可以通過軟件控制暫時不用的內(nèi)置硬件組件處于關(guān)閉狀態(tài)降低功耗。
硬件抽象層HAL
向操作系統(tǒng)內(nèi)核提供了訪問硬件底層的函數(shù)接口
嵌入式軟件中直接訪問底層硬件的例程集合
增加的HAL位于硬件電路板和操作系統(tǒng)內(nèi)核之間
嵌入式電路板的最基本軟件
HAL函數(shù)是移植操作系統(tǒng)的基礎(chǔ)
HAL隱藏了不同硬件平臺的差異性,從而改善了操作系統(tǒng)的可移植性!
AMBA總線
RAM的總線結(jié)構(gòu)成為 AMBA -先進(jìn)微控制器總線結(jié)構(gòu)(一種開放式總線結(jié)構(gòu))
從1995的AMBA1.0到目前的AMBA4.0共四個版本!
RAM7 - AMBA1; RAM11 - AMBA2
按照AMBA總線規(guī)范,基于RAM內(nèi)核的嵌入式處理芯片采用系統(tǒng)總線和外圍總線兩層結(jié)構(gòu)的方式構(gòu)建片上系統(tǒng)
連接系統(tǒng)總線的高帶寬組件(AHB接口)主要包括:電源管理和時鐘控制器,測試接口(JTAG),外部存儲器控制接口,DMA控制器,USB主機(jī),中斷控制器。(可以看出大多數(shù)為控制器)
RTC是與外圍總線(APB接口)連接的硬件組件
MMU
MMU,內(nèi)存管理單元,它是用來管理虛擬存儲器、物理存儲器的控制線路,同時也負(fù)責(zé)虛擬地址映射為物理地址,以及提供硬件機(jī)制的內(nèi)存訪問授權(quán)。
虛擬地址到物理地址的轉(zhuǎn)換通過查找頁表來完成,每次在訪問內(nèi)存時先插TLB,查不到再到內(nèi)存中查整個頁表。
ARM7 ≠ ARMv7
RAM7 - 馮諾依曼的結(jié)構(gòu)。 RAM9~RAM11 采用哈佛結(jié)構(gòu)!
ARMv7是一種構(gòu)架。ARM7是一種處理器型號,ARM7(馮諾依曼結(jié)構(gòu))是在ARMv4構(gòu)架上設(shè)計(jì)出來的處理器。**RAM11(ARMv6架構(gòu))之后便是以Cortex(ARMv7架構(gòu))**來命名了!
ARM7沒有MMU(內(nèi)存管理單元),只能叫做MCU(微控制器),不能運(yùn)行諸如Linux、WinCE(大型嵌入式操作系統(tǒng))等這些現(xiàn)代的多用戶多進(jìn)程操作系統(tǒng),因?yàn)檫\(yùn)行這些系統(tǒng)需要MMU,才能給每個用戶進(jìn)程分配進(jìn)程自己獨(dú)立的地址空間。ucOS、ucLinux這些精簡實(shí)時的RTOS不需要MMU,當(dāng)然可以在ARM7上運(yùn)行。
ARM9、ARM11,是嵌入式CPU(處理器),帶有MMU,可以運(yùn)行諸如Linux等多用戶多進(jìn)程的操作系統(tǒng),應(yīng)用場合也不同于ARM7。
此外,Cortex-M系列還細(xì)分為M0、M3、M4和超低功耗的M0+,用戶依據(jù)成本、性能、功耗等因素來選擇芯片。
Cortex-M系列(ARMv7架構(gòu))的指令集只有Thumb-2。
ARM處理器 ≠ ARM處理器核
處理器核:在某種架構(gòu)的基礎(chǔ)上具有取指令和執(zhí)行指令的組件。
處理器: 以處理器核為中心,加上MMU,中斷控制器,浮點(diǎn)運(yùn)算器,總線接口等就構(gòu)成了RAM處理器。
當(dāng)然了,單獨(dú)的處理器核也可以作為某一代RAM處理器的。
RAM常考寄存器
R13 - SP (堆棧指針)
R14 - LR(鏈接寄存器)
R15 - PC(程序計(jì)數(shù)器)
xPSR - (CPSR 和 SPSR)狀態(tài)寄存器
SP寄存器
SP有兩個,分別為R13(MSP)和R13(PSP)即主堆棧指針(MSP)和進(jìn)程堆棧指針(PSP),但在同一時刻只能有一個可以看到,這也就是所謂的“banked”寄存器。
這些寄存器都是32位的。
CPSR寄存器
CPSR(當(dāng)前程序狀態(tài)寄存器)在任何處理器模式下被訪問。它包含了條件標(biāo)志位、中斷禁止位、當(dāng)前處理器模式標(biāo)志以及其他的一些控制和狀態(tài)位。
RAM中表示程序狀態(tài)的寄存器是CPSR,其中狀態(tài)位T的作用是在RAM狀態(tài)與Thumb狀態(tài)間進(jìn)行切換,當(dāng)T = 1時處理器處于的狀態(tài)是Thumb狀態(tài)。
N為符號標(biāo)志位 - N=1表示運(yùn)算結(jié)果為負(fù),否則運(yùn)算結(jié)果為正
F為禁止快讀中斷為 - F=1表示禁止快速中斷控制位,否則允許!
V為溢出標(biāo)志位,等于1表示溢出
Z為全0標(biāo)志,運(yùn)算結(jié)果為0
SPSR寄存器
每一種處理器模式下(看下面的其中運(yùn)行模式)都有一個專用的物理狀態(tài)寄存器,稱為SPSR(備份程序狀態(tài)寄存器)。
當(dāng)特定的異常中斷發(fā)生時,這個寄存器用于存放當(dāng)前程序狀態(tài)寄存器的內(nèi)容。在異常中斷退出時,可以用SPSR來恢復(fù)CPSR。
由于用戶模式和系統(tǒng)模式不是異常中斷模式,所以他沒有SPSR。當(dāng)用戶在用戶模式或系統(tǒng)模式訪問SPSR,將產(chǎn)生不可預(yù)知的后果。
控制寄存器和數(shù)據(jù)寄存器
控制寄存器是4個字節(jié),比如端口E的控制寄存器rGPECON = 0x00005555
數(shù)據(jù)寄存器是2個字節(jié),比如端口E的數(shù)據(jù)寄存器rGPEDAT=0x0020
關(guān)于賦值,也寫一個小例子
rGPDCON = ((rGPDCON | 0x00005555) & 0xFFFF5555);//GPD0~GPD7配置為輸出模式
先置位,然后再清零。
ARM微處理器的七種運(yùn)行模式
用戶模式:user (沒有SPSR寄存器):正常程序執(zhí)行的模式
系統(tǒng)模式 – SYS (沒有SPSR寄存器): 用于運(yùn)行特權(quán)級的操作系統(tǒng)任務(wù)
快速中斷模式 – FIQ :用于高速數(shù)據(jù)傳輸和通道處理、高速中斷!
外部中斷模式 – IRQ :用于通常的中斷處理
管理模式 – SVC :又稱特權(quán)模式,操作系統(tǒng)使用的一種保護(hù)模式
終止模式 – ABT :用于虛擬存儲及存儲保護(hù),處理存儲器故障
未定義指令模式 – UND :用于支持通過軟件方針硬件的協(xié)處理器
經(jīng)典RAM的七種異常
復(fù)位RESET
未定義指令 UND
軟件中斷 SWI
指令預(yù)取終止 PABT
數(shù)據(jù)訪問終止 DABT
外部中斷請求 IRQ
快速中斷FIQ
IRQ
IRQ異常對應(yīng)的異常向量地址為:0x00000018
IRQ異常向量地址和下一個異常向量地址之間的間隔為4個字節(jié)
復(fù)位異常的異常向量地址是0x00000000。系統(tǒng)上電復(fù)位后,將從該地址處執(zhí)行程序,RAM9的體系結(jié)構(gòu)規(guī)定的各異常向量地址間隔通常是4個字節(jié),以此復(fù)位異常向量地址處通常存儲一條分支指令
S3C2410必備知識
S3C2410擁有2個串口,UART0/UART1
控制組件包括存儲器控制器、總線控制器、外部主控器、NAND FLASH(以頁為單位進(jìn)行閃存)
存儲器控制器提供訪問外部存儲器所需的存儲器控制信號,支持大小端模式,地址空間供1GB,8個BANK,每個BANK128MB。
以ARM芯片為信合的嵌入式系統(tǒng)其I/O與存儲器采用統(tǒng)一編址的方式,并不像×86那樣采用I/O映射編址(獨(dú)立編址)
只有BANK0是總線16、32位的訪問,其他BANK均可以進(jìn)行8、16、32位的訪問
GPIO 有GPIOA~H
哈佛體系結(jié)構(gòu),數(shù)據(jù)與程序存儲分開
哈佛體系結(jié)構(gòu),數(shù)據(jù)與程序存儲分開
內(nèi)部集成ADC
矩陣按鍵代碼
#define KEYOUTPUT (*(VOLATILE int8u *)0X56000044) #define KEYINPUT (*(VOLATILE int8u *)0X56000044) INT16U ScanKey() { INT16U key = 0xFFFF; INT16U i; INT8U temp=0xFF, output; rGPECON = ((rGPECON & 0xFFFFFF00) | 0x00000055); //初始化GPE0~GPE3為輸出 rGPECON = rGPECON & 0xFFFFFF0F; //初始化GPE4~GPE7為輸入 //判斷鍵盤中是否有鍵按下 for(i=1; ((i<=8) && (i>0)); i<<=1) { output |= 0xFF; output &= (~i); KEYOUTPUT = output; temp = KEYINPUT; if((temp & 0xF0) != 0xF0)//判斷列信號是否全部為1 { key = (~i); key <<= 8; key |= ((temp & 0xF0)|0x0F); return key; } } return 0xFFFF; } //key返回判斷哪個按鍵的方法:最高4位和最低四位都是1, //即 1111 ---- ---- 1111,然后次高字節(jié)是行,再次高是列, //比如第2行第3個按鍵按下, 對應(yīng)為 1111 1101 1011 1111 - 0xFDBF
網(wǎng)絡(luò)
WLAN通信協(xié)議是802.11,傳輸速率可達(dá)到11Mbps,54Mbps,108Mbps。
IP
IP地址分為A類、B類、C類三個基本類。另外兩類分別為組播地址和備用地址。
IP地址解決了網(wǎng)絡(luò)中所有計(jì)算機(jī)統(tǒng)一編址的問題
IP數(shù)據(jù)報是一種獨(dú)立于各種物理網(wǎng)絡(luò)的數(shù)據(jù)包格式
路由器是實(shí)現(xiàn)網(wǎng)絡(luò)與網(wǎng)絡(luò)互連的關(guān)鍵設(shè)備
A類
1.0.0.0 到126.255.255.255
分配給具有大量主機(jī)而局域網(wǎng)絡(luò)數(shù)量較少的大型網(wǎng)絡(luò)
由1個字節(jié)的網(wǎng)絡(luò)地址和3個字節(jié)主機(jī)地址組成
網(wǎng)絡(luò)地址的最高位必須是“0”,即第一字段的范圍 0~127,但是由于全0和全1的地址用作特殊用途,實(shí)際可指派的第一個字段范圍是1~126
每個IP地址可連16387064臺主機(jī),Internet有126個A類地址
可以用于多目的地址發(fā)送,言外之意可以組播
B類
128.0.0.0到191.255.255.255
用于國際性大公司和政府機(jī)構(gòu)
前兩個八位字節(jié)指明網(wǎng)絡(luò),后兩個八位字節(jié)指明網(wǎng)絡(luò)上的主機(jī)
C類
C類IP地址范圍192.0.0.0 ~ 223.255.255.255
第1、2、3字節(jié)為網(wǎng)絡(luò)地址,第四個字節(jié)為主機(jī)地址
C類地址數(shù)量較多,使用于局部局域網(wǎng)中,每個網(wǎng)絡(luò)中最多包含254臺計(jì)算機(jī)
用于一般小公司 校園網(wǎng) 研究機(jī)構(gòu)
以太網(wǎng)數(shù)據(jù)幀(里面不包括IP地址)
前導(dǎo)碼(7個字節(jié)) -> 幀起始界定符(1字節(jié)) -> 目的MAC地址(6字節(jié)) -> 源MAC地址(6字節(jié))-> 類型/長度(2字節(jié)) -> 數(shù)據(jù)(46~1500字節(jié)) ->幀校驗(yàn)序列(4字節(jié))
局域網(wǎng)采用分組交換技術(shù)
發(fā)送設(shè)備MAC地址 - > 接收設(shè)備MAC地址 -> 控制信息 ->有效載荷 -> 校驗(yàn)信息
路由器
多個異構(gòu)或者同構(gòu)網(wǎng)絡(luò)進(jìn)行互聯(lián)
網(wǎng)絡(luò)層
集線器來放大信號實(shí)現(xiàn)遠(yuǎn)距離傳輸
協(xié)議轉(zhuǎn)換器:用于傳輸層及以上各層的協(xié)議轉(zhuǎn)換
熱點(diǎn) - 正式名稱無線接入點(diǎn),它實(shí)際上是一個無線交換機(jī)或無線路由器。
局域網(wǎng)
按照介質(zhì)所使用的訪問控制方法可分為:以太網(wǎng),F(xiàn)DDI網(wǎng)和令牌網(wǎng)
必不可少的部分是集線器與交換機(jī)
指令集
Thumb指令集是16位的,ARM指令集是32位的,中間有Thumb-2作為橋接。
ARM處理器的三種工作狀態(tài)
ARM狀態(tài) (指令寬度32)
Thumb 及 Thumb-2狀態(tài)
調(diào)試狀態(tài)
Thumb狀態(tài)和ARM狀態(tài)的切換
通過BX指令,寫數(shù)據(jù)到操作數(shù)寄存器(R0)的最低位。
R0[0]=1 – 從RAM狀態(tài)切換到Thumb狀態(tài)。 R0[0]=0 – 從Thumb狀態(tài)切換到RAM狀態(tài)。
RAM復(fù)位后的狀態(tài)
ARM處理器復(fù)位后的狀態(tài)都是ARM狀態(tài)
BootLoader
U-BOOT
Linux中引導(dǎo)程序加載時所支持不同體系結(jié)構(gòu)處理器種類最多的Bootloader 是- U-BOOT。
全稱universal-Boot-Loader
支持PowerPC、x86、ARM等多種體系結(jié)構(gòu)的處理器
支持嵌入式Linux、VxWorks、QNX、RTEMS、Windows CE等操作系統(tǒng)
采用兩個階段完成操作系統(tǒng)的引導(dǎo)加載
引導(dǎo)加載程序主要完成:加電自檢、外設(shè)存在自檢**、內(nèi)存地址映射**、初始化外圍設(shè)備、內(nèi)存尋址定位、加載并啟動操作系統(tǒng)
BootLoader通常分為stage1和stage2兩大部分。依賴于CPU的體系結(jié)構(gòu),比如設(shè)備初始化代碼通常放在stage1中,且使用匯編語言實(shí)現(xiàn),以達(dá)到短小精悍的目的。stage2通常用于C語言實(shí)現(xiàn)更復(fù)雜的功能,同時代碼也具有更好的可讀性和可移植性。
BootLoader的stage1的基本步驟是:基本硬件初始化,為加載stage2準(zhǔn)備RAM空間,拷貝stage2的執(zhí)行代碼到RAM空間中,設(shè)置棧區(qū)指針SP,跳轉(zhuǎn)到stage2的C程序入口點(diǎn)。
作用
改變程序大小端排序
關(guān)閉看門狗
屏蔽中斷
設(shè)置各個時鐘
設(shè)置從SLEEP或者IDLE啟動時的程序
初始化SDRAM
設(shè)置各模式指向的堆棧
設(shè)置好中斷向量表
判斷是從NOR FLASH(行讀寫,較慢)還是NAND FLASH(頁讀寫)啟動,
將文件拷到SDRAM中
操作系統(tǒng)
IOS 的前身是 UNIX-BSD(宏內(nèi)核架構(gòu),但是是微內(nèi)核操作系統(tǒng))
內(nèi)核的概念
內(nèi)核提供任務(wù)調(diào)度、任務(wù)間通信與同步、任務(wù)管理、時間管理和存儲管理。
典型的單片機(jī)程序在程序指針復(fù)位后,首先進(jìn)行堆棧、中斷、中斷向量、定時器、串行口等接口設(shè)置、初始化數(shù)據(jù)存儲區(qū)和顯示內(nèi)容,然后就來到了一個監(jiān)測、等待或空循環(huán),在這個循環(huán)中,CPU可以監(jiān)視外設(shè)、響應(yīng)中斷或用戶輸入。 這段主程序可以看作是一個內(nèi)核,內(nèi)核負(fù)責(zé)系統(tǒng)的初始化和開放、調(diào)度其它任務(wù),相當(dāng)于C語言中的主函數(shù)。
現(xiàn)代操作系統(tǒng)設(shè)計(jì)中,為減少系統(tǒng)本身的開銷,往往將一些與硬件緊密相關(guān)的(如中斷處理程序、設(shè)備驅(qū)動程序等)、基本的、公共的、運(yùn)行頻率較高的模塊(如時鐘管理、進(jìn)程調(diào)度等)以及關(guān)鍵性數(shù)據(jù)結(jié)構(gòu)獨(dú)立開來,使之常駐內(nèi)存,并對他們進(jìn)行保護(hù)。通常把這一部分稱之為操作系統(tǒng)的內(nèi)核。
Linux
UCLinux、RTLinux、uC/OS - II是開源嵌入式操作系統(tǒng)
Linux最初以Unix為原型,以實(shí)現(xiàn)POSIX標(biāo)準(zhǔn)作為其目標(biāo)。
OS服務(wù)組件、用戶進(jìn)程、Linux內(nèi)核、硬件
系統(tǒng)調(diào)用是Linux中用戶進(jìn)程和操作系統(tǒng)之間的重要接口!
Linux和Unix
其兩者源碼是完全不相同的,盡管函數(shù)和命令的功能處理結(jié)果、函數(shù)名稱和參數(shù)十分相同,以及Unix的行命令、驅(qū)動程序和應(yīng)用程序在Linux上能夠運(yùn)行。
Linux運(yùn)行效率沒有Unix高!
Linux命令
arm - linux - gcc交叉編譯器來編譯應(yīng)用程序
要對一個應(yīng)用程序進(jìn)行調(diào)試排錯,應(yīng)在編譯指令中加g參數(shù)對它進(jìn)行編譯
Linux內(nèi)核主要由5個子系統(tǒng)組成 進(jìn)程調(diào)度(SCHED) 內(nèi)存(任務(wù))管理(MM) 虛擬文件系統(tǒng)(VFS) 網(wǎng)絡(luò)接口(NET) 進(jìn)程間通信(IPC) 進(jìn)程調(diào)度模塊負(fù)責(zé)控制進(jìn)程對CPU資源的使用,所采取的調(diào)度策略是使得各個進(jìn)程能夠平均訪問CPU,同時保證內(nèi)核能及時地執(zhí)行硬件操作。 內(nèi)存管理模塊的功能之一是屏蔽各種硬件接口內(nèi)存結(jié)構(gòu)的差異并向上返回一個統(tǒng)一的訪問接口 網(wǎng)絡(luò)接口模塊包含網(wǎng)絡(luò)接口驅(qū)動程序 支持進(jìn)程之間的各種通信機(jī)制,其通信機(jī)制包括:信號、管道、消息隊(duì)列、信號量、共享內(nèi)存、套接字(socket) 微內(nèi)核和宏內(nèi)核 微內(nèi)核特征 內(nèi)核小巧,傳統(tǒng)操作系統(tǒng)中的許多部分都被移出內(nèi)核。 接口一致,所有進(jìn)程請求使用統(tǒng)一接口,進(jìn)程不區(qū)分內(nèi)核模式和用戶模式服務(wù)。 各個功能模塊之間松散耦合,只完成服務(wù)功能,系統(tǒng)管理功能交給一個或多個特權(quán)服務(wù)程序。 微內(nèi)核擴(kuò)充方便,但是各個功能之間的切換引起的開銷很大! 屬于微內(nèi)核的典型嵌入式操作系統(tǒng)有:Symbian、VxWorks、QNX、uC/OS - II、IOS,而Symbian是普通實(shí)時操作系統(tǒng) VxWorks收取授權(quán)費(fèi)和版權(quán)費(fèi)。 VxWokrs用于尖端科技中 宏內(nèi)核 傳統(tǒng)操作系統(tǒng)常采用的結(jié)構(gòu) 應(yīng)用程序效率高 切換開銷小 對外來時間反應(yīng)速度快 內(nèi)存大 拓展性不高,維護(hù)困難 可預(yù)測性較低 可靠性較低 Android OS是典型的宏內(nèi)核操作系統(tǒng) 宏內(nèi)核又稱為單內(nèi)核! Tiny OS 是開放源代碼操作系統(tǒng),屬于深度輕量級的操作系統(tǒng),專為嵌入式無線傳感器網(wǎng)絡(luò)設(shè)計(jì),功耗較低,特別適合傳感器這種受內(nèi)存,功耗限制的設(shè)備。 輕線程,主動消息和組件化編程。 QNX 符合POSIX基本標(biāo)準(zhǔn)和實(shí)時標(biāo)準(zhǔn) 微內(nèi)核操作系統(tǒng) 內(nèi)核提供四種服務(wù):進(jìn)程調(diào)度,進(jìn)程間通信,底層網(wǎng)絡(luò)通信和中斷處理 uC/OS-II 搶占式實(shí)時操作系統(tǒng) 搶占式實(shí)時操作系統(tǒng)且每個任務(wù)都有自用棧 使用它的棧空間校驗(yàn)函數(shù),可以確定每個任務(wù)到底需要多少棧空間 該系統(tǒng)不包含設(shè)備驅(qū)動程序,只是一個純內(nèi)核 不支持時間片輪轉(zhuǎn)調(diào)度,所以賦給每個任務(wù)的優(yōu)先級是不相同的 允許每個任務(wù)之間有不同的棧空間 升級版的UC/OS - III是商用操作系統(tǒng) II 具有良好的可剪裁性和可移植性 能夠支持的任務(wù)數(shù)最多是64(保留8個給系統(tǒng),實(shí)際剩下56個) 最多允許的中斷嵌套層數(shù)可以達(dá)到255層 軟件結(jié)構(gòu)一般具有:應(yīng)用軟件層,API層,內(nèi)核層和設(shè)備驅(qū)動層 該系統(tǒng)能提供周期性時鐘信號(時鐘節(jié)拍),用于實(shí)現(xiàn)任務(wù)的正確延時和超時確認(rèn),節(jié)拍率在10~100Hz之間 用戶必須在多任務(wù)調(diào)度啟動以后再使能時鐘節(jié)拍中斷 在中斷返回之前,必須調(diào)用退出中斷函數(shù) voidIntExit(void) 互斥信號量可以解決優(yōu)先級反轉(zhuǎn)的問題 事件控制塊用以對信號的管理 任務(wù)管理中空閑任務(wù)是系統(tǒng)創(chuàng)建的第一個任務(wù)(空閑任務(wù)永遠(yuǎn)不會處于掛起態(tài),還可能運(yùn)行態(tài),即使優(yōu)先級最低,一旦其他任務(wù)都被堵塞他就可以執(zhí)行了!) 中斷服務(wù)子程序的偽碼結(jié)構(gòu):保存全部CPU寄存器到棧,調(diào)用OSIntEnter()或者OSIntNesting變量加1,執(zhí)行中斷服務(wù)代碼或發(fā)出IPC信息通知特定任務(wù)去執(zhí)行中斷服務(wù),調(diào)用OSIntExit()函數(shù),恢復(fù)所有CPU寄存器,執(zhí)行中斷返回指令。 uC/OS-II 移植到一個 嵌入式系統(tǒng)電路板上正常運(yùn)行,必須具備的條件 處理器的C編譯器能產(chǎn)生可重入代碼,且用C語言就可以打開和關(guān)閉中斷。 處理器支持中斷,并且能產(chǎn)生定時中斷。(通常在10至100Hz之間)。 處理器支持能夠容納一定量數(shù)據(jù)(可能幾千字節(jié))的硬件棧區(qū)。 uC/OS-II 保護(hù)任務(wù)之間的共享數(shù)據(jù)和提供任務(wù)之間的通信,可達(dá)到保護(hù)目的方法通常有 利用宏OS_ENTER_CRITICAL()和OS_EXIT_CRITCAL來打開和關(guān)閉中斷。 利用函數(shù)OSSchedLock()和OSSchedUnlock()對任務(wù)調(diào)度函數(shù)上鎖和開鎖。 利用信號量、互斥量、郵箱和消息隊(duì)列進(jìn)行任務(wù)間通信。 系統(tǒng)啟動過程中,Bootloader執(zhí)行完畢后,調(diào)用應(yīng)用程序主文件(通常是main.c)里的main函數(shù)。main函數(shù)在執(zhí)行過程中除了用戶函數(shù)和硬件初始化函數(shù)之外,需要執(zhí)行下面三個重要函數(shù):OSInit() -> OSTaskCreate() -> OSStart()(注意先后順序) OSInit()函數(shù)先建立最初的任務(wù)就緒表,然后建立4個空白的數(shù)據(jù)鏈表,即:任務(wù)控制塊鏈表,事件控制塊鏈表、標(biāo)志鏈表、內(nèi)存控制塊鏈表。 系統(tǒng)中任務(wù)的五種狀態(tài) 休眠態(tài)(任務(wù)停留在內(nèi)存中,還沒有交給內(nèi)核管理。) 就緒態(tài)(該任務(wù)已經(jīng)準(zhǔn)備好,可以運(yùn)行了,但是由于任務(wù)的優(yōu)先級比正在運(yùn)行任務(wù)的優(yōu)先級低,還暫時不能運(yùn)行。)(還有一種情況被更高優(yōu)先級打斷!) 運(yùn)行態(tài)(任務(wù)得到了CPU的控制權(quán)正在運(yùn)行之中) 掛起態(tài) 被中斷態(tài)(發(fā)生中斷執(zhí)行相應(yīng)的中斷服務(wù),原來在正在運(yùn)行后的任務(wù)暫時停止運(yùn)行,進(jìn)入被中斷狀態(tài)) 一些系統(tǒng)函數(shù) OSTaskCreate() - 任務(wù)創(chuàng)建相關(guān) OSCtxSw() - 真正實(shí)現(xiàn)任務(wù)切換的函數(shù) OSIntExit() - 中斷級的調(diào)度 OSTickISR() - 時鐘節(jié)拍中斷服務(wù)子程序,與時間管理相關(guān) OSSched() - 任務(wù)前導(dǎo)函數(shù),任務(wù)級的調(diào)度函數(shù) 判斷任務(wù)調(diào)度的三個條件是: 中斷嵌套層數(shù)共享全程變量OSIntNesting = 0,也就是所有的ISR已經(jīng)執(zhí)行完畢 任務(wù)調(diào)度加鎖層數(shù)共享全程變量OSLockNesting = 0,也就是調(diào)度沒有被禁止 就緒表找到最高優(yōu)先級比當(dāng)前任務(wù)的優(yōu)先級高 OSIntExit() - 中斷級的調(diào)度函數(shù) 系統(tǒng)事件控制塊的相關(guān)函數(shù) OSSemCreate()(信號量創(chuàng)建) OSMutexCreate()(創(chuàng)建互斥體) OSMboxCreate()(建立一個郵箱) OSQCreate()(創(chuàng)建事件控制塊) 就緒任務(wù)登記在就緒表中,OSRdyTbl[ ] 是就緒表的位圖映像矩陣,每一位代表了一個優(yōu)先級任務(wù)的就緒狀態(tài),成為就緒位,該矩陣最多有64位。 一些系統(tǒng)文件 OS_CPU_C.C - 創(chuàng)建任務(wù)的自用棧空間、定義用戶接口的hook原型 OS_CORE.C - 核心調(diào)度代碼,包括系統(tǒng)初始化、啟動多任務(wù)調(diào)度開始運(yùn)行、任務(wù)創(chuàng)建管理與調(diào)度、TCB初始化、就緒表初始化、ECB初始化、任務(wù)事件就緒表、空閑任務(wù) OS_MEM.C - 內(nèi)存管理,包括創(chuàng)建分區(qū),獲得存儲塊 OS_TASK.C - 任務(wù)管理,包括改變一個任務(wù)的優(yōu)先級、創(chuàng)建或者刪除一個任務(wù),恢復(fù)一個被掛起的任務(wù) uC/OS系統(tǒng)時鐘內(nèi)核的基本功能(通過GLIBC調(diào)用通用函數(shù)和內(nèi)核的內(nèi)部功能) 任務(wù)管理 時間管理 內(nèi)存管理 任務(wù)調(diào)度 任務(wù)間通信和同步 實(shí)時操作系統(tǒng)與非實(shí)時操作系統(tǒng) 實(shí)時系統(tǒng) 民航導(dǎo)航系統(tǒng) 防空預(yù)警系統(tǒng) 電力輸送控制系統(tǒng) 非實(shí)時 視頻播放系統(tǒng) 博客發(fā)布系統(tǒng) 手機(jī)交互式城市交通導(dǎo)航系統(tǒng) 實(shí)時操作系統(tǒng) RTOS響應(yīng)中斷請求并且完成相應(yīng)的中斷服務(wù)子函數(shù)的時間非常快!精細(xì)衡量這個時間一致性變化的術(shù)語是抖動! 中斷服務(wù)子函數(shù)也是可以調(diào)用函數(shù)然后進(jìn)行事件處理的,中斷服務(wù)子程序返回的最后一步執(zhí)行中斷返回指令。 RTOS特征(主要特征是能夠及時響應(yīng)外部發(fā)生的隨機(jī)任務(wù)請求并且能夠在規(guī)定的時限內(nèi)完成任務(wù)。)( 不包括輪轉(zhuǎn)調(diào)度) 異步IO和中斷處理能力 任務(wù)切換時間和中斷延遲時間確定 優(yōu)先級中斷和調(diào)度 搶占式調(diào)度 內(nèi)存鎖定 連續(xù)文件 同步 RTOS的實(shí)時性能主要由三個指標(biāo)衡量 響應(yīng)時間(包括中斷延遲時間和任務(wù)切換時間)(任務(wù)切換時間又包括人物搶占時間) 吞吐量 生存時間 響應(yīng)時間有兩個指標(biāo) - 中斷延遲時間和任務(wù)切換時間 實(shí)時系統(tǒng)對時間約束要求的嚴(yán)格性,使可預(yù)測性成為實(shí)時系統(tǒng)的一項(xiàng)重要性能要求,它是指RTOS能夠?qū)ν獠渴录捻憫?yīng)時間和實(shí)時任務(wù)的執(zhí)行時間進(jìn)行判斷,以確定被時間觸發(fā)的實(shí)時任務(wù)能否在規(guī)定的時間內(nèi)完成。 一般按照相應(yīng)時間能將實(shí)時系統(tǒng)分為三類:強(qiáng)實(shí)時系統(tǒng),其相應(yīng)時間一般在ms級或us級;普通實(shí)時操作系統(tǒng)一般在s級,弱實(shí)時系統(tǒng)一般在數(shù)十s級。 任務(wù)時限有兩種 截止時間:任務(wù)開始執(zhí)行時間到任務(wù)必須完成的時間間隔。 任務(wù)執(zhí)行預(yù)設(shè):又叫任務(wù)最快完成時間,這是在無中斷響應(yīng)情況下的任務(wù)最快執(zhí)行時間。 硬實(shí)時操作系統(tǒng)和軟實(shí)時操作系統(tǒng) 任務(wù)執(zhí)行時間超過截止時間系統(tǒng)的總損益就為負(fù),這種實(shí)時系統(tǒng)成為硬實(shí)時系統(tǒng)。而且伴隨有嚴(yán)重的后果,比如飛機(jī)控制器、核反應(yīng)堆處理裝置。 軟實(shí)時操作系統(tǒng)超過時限并不會造成嚴(yán)重的影響比如:DVD播放機(jī)。 存儲器 半導(dǎo)體存儲器芯片的存儲容量取決于該芯片的地址總線的條數(shù)和數(shù)據(jù)總線的位數(shù)。 存儲器帶寬與存儲器總線的工作頻率有關(guān),也與數(shù)據(jù)線的位數(shù)和每個總線周期的傳輸次數(shù)有關(guān)! 系統(tǒng)正在運(yùn)行的程序的大部分?jǐn)?shù)據(jù)和代碼存放在主存儲器(內(nèi)存)中 系統(tǒng)尚未運(yùn)行的程序的大部分?jǐn)?shù)據(jù)和代碼存放在外部存儲器中 分類 按照存取特性分為:RAM和ROM 按照物理位置分為:片內(nèi)存儲器和片外存儲器以及外部存儲器 按照存儲信息的類型分為:程序存儲區(qū)和數(shù)據(jù)存儲器 RAM RAM - 高速讀取, DRAM - 高集成度 RAM 通常又有DRAM和SRAM之分,SRAM較DRAM電路復(fù)雜,但是速度更快,高速緩沖區(qū)(cache)就是典型的SRAM。 SRAM的復(fù)雜決定了它做不大,至多幾十K。 內(nèi)存條就是DRAM,速度較SRAM慢,但是可以做的很大,比如內(nèi)存條就是典型的DRAM,其容量就上G了。 FRAM - 鐵電隨機(jī)存取存儲器,MRAM - 磁性隨機(jī)存取存儲器。 (以上兩個隨機(jī)存儲器是非易失性存儲器) FLASH Flash閃存有兩大類,或非型(NOR Flash)和與非型(NAND Flash)。 或非以字節(jié)為單位進(jìn)行隨機(jī)存取,存儲在里面的程序可以被CPU執(zhí)行。與非以頁為單位進(jìn)行存取,速度較前者慢。 與非門讀出程序或數(shù)據(jù)時,是先將其預(yù)存入RAM,然后才被使用的。雖然速度較慢,但是其壽命,容量成本等方面有很大優(yōu)勢,常用的U盤基本都是NAND Flash。 DDR DDR - dual data rate - 雙倍數(shù)據(jù)速率 DDR2 - 使原來DDR可預(yù)取讀取2位變成可預(yù)取讀取4位或8位,把DDR的數(shù)據(jù)傳輸速率又提升了兩倍或四倍 USB USB2.0 的速度可達(dá)到 480Mb/s USB3.0的速度可達(dá)到 5Gb/s, 即640MB/s 半雙工差分方式通信 編碼 ASCII ASCII共128個字符,96個可打印字符,32個控制字符。 ASCII是7位編碼,但在計(jì)算機(jī)里用一個字節(jié)存放(計(jì)算機(jī)最基本的存儲和處理單位) 每個字節(jié)多出的1位在計(jì)算機(jī)內(nèi)部常保持為0,在數(shù)據(jù)傳輸中是奇偶校驗(yàn)位。 漢字編碼 GB2312 – 兩字節(jié)編碼(每個字節(jié)最高位默認(rèn)為1),包含常用的中國漢字和圖形符號。 GB18030 與國際Unicode相兼容。單字節(jié)對應(yīng)ASCII,雙字節(jié)對應(yīng)漢字(GB2312在這完全適用,但是比它范圍廣),其余四字節(jié)對應(yīng)其他字符。 Unicode UTF-8 – 單字節(jié)可變長編碼,單字節(jié)向下兼容ASCII,音節(jié)文字對應(yīng)兩字節(jié),CJK漢字(china japan koera 中日韓漢字)對應(yīng)三字節(jié),其余對應(yīng)四字節(jié)。Linux 常用。 UTF-16 – 雙字節(jié)可變長編碼,CJK漢字及常用字符兩字節(jié),其余四字節(jié)。JAVA .NET 常用。 同步IO和異步IO CPU的速度遠(yuǎn)遠(yuǎn)快于磁盤、網(wǎng)絡(luò)等IO。在一個線程中,CPU執(zhí)行代碼的速度極快,然而,一旦遇到IO操作,如讀寫文件、發(fā)送網(wǎng)絡(luò)數(shù)據(jù)時,就需要等待IO操作完成,才能繼續(xù)進(jìn)行下一步操作。這種情況稱為 同步IO。 在IO操作的過程中,當(dāng)前線程被掛起,而其他需要CPU執(zhí)行的代碼就無法被當(dāng)前線程執(zhí)行了。因?yàn)橐粋€IO操作就阻塞了當(dāng)前線程,導(dǎo)致其他代碼無法執(zhí)行,所以我們必須使用多線程或者多進(jìn)程來并發(fā)執(zhí)行代碼,為多個用戶服務(wù)。每個用戶都會分配一個線程,如果遇到IO導(dǎo)致線程被掛起,其他用戶的線程不受影響。 多線程和多進(jìn)程的模型雖然解決了并發(fā)問題,但是系統(tǒng)不能無上限地增加線程。由于系統(tǒng)切換線程的開銷也很大,所以,一旦線程數(shù)量過多,CPU的時間就花在線程切換上了,真正運(yùn)行代碼的時間就少了,結(jié)果導(dǎo)致性能嚴(yán)重下降。 另一種解決IO問題的方法是 異步IO。 當(dāng)代碼需要執(zhí)行一個耗時的IO操作時,它只發(fā)出IO指令,并不等待IO結(jié)果,然后就去執(zhí)行其他代碼了。一段時間后,當(dāng)IO返回結(jié)果時,再通知CPU進(jìn)行處理。 指令相關(guān) 子程序返回調(diào)用程序除了MOV PC, LR。還可以MOV R15, LR 匯編語言調(diào)用一個名為My的子程序的指令為: BL My 子程序返回調(diào)用程序的指令為:MOV PC, LR。 Thumb - 2指令集中關(guān)外部中斷使用的指令是:CPSID I。開外部中斷的指令為:CPSIE I。 EQ表示相等,NE表示不等 RAM匯編程序采用分支指令B 子程序調(diào)用指令BL 條件轉(zhuǎn)移指令BX RAM匯編中沒有專門的指令實(shí)現(xiàn)循環(huán),一般采用比較指令CMP、ADD、SUB等 才能產(chǎn)生條件的指令,然后再通過帶狀態(tài)的條件轉(zhuǎn)移指令BX來實(shí)現(xiàn)。 指令后面加個!表示更新基地址寄存器符號 寄存器間接尋址就是以寄存器中的值作為操作數(shù)地址,而操作數(shù)本身存放在存儲器中。用于間接尋址的寄存器必須用[ ] 括起來 Test EQU 50 定義 標(biāo)號 Test的值為50! RAM完成有條件無符號加法運(yùn)算,并更新CPSR中的狀態(tài),條件如果是相等,要求指令執(zhí)行R1+R2,結(jié)果放入R3中,則這條指令A(yù)DDCEQ R3, R1, R2。如果條件是大于,要求執(zhí)行R1 - R2,結(jié)果放入R3,則該指令是SUBHIS R3, R1, R2 指令的條件碼總結(jié) EQ - 相等 NE - 不等 MI - minus負(fù)數(shù) PL - plus正數(shù)或0 vs - overflow set溢出 vc - overflow clear未溢出 GT - greater than帶符號數(shù)大于 GE - greater and equal帶符號數(shù)大于或等于 LT - lower than帶符號數(shù)小于 LE - lower equal帶符號數(shù)小于或等于 HI - high無符號數(shù)大于 CS - carry same無符號數(shù)大于或等于 CC - carry clear無符號數(shù)小于 LS - low and same無符號數(shù)小于或等于 常考指令 LDR 字?jǐn)?shù)據(jù)加載指令(存儲器到寄存器的數(shù)據(jù)傳送指令) LDRB 字節(jié)數(shù)據(jù)加載指令 LDRH 半字?jǐn)?shù)據(jù)加載指令 STR 字?jǐn)?shù)據(jù)存儲指令 STRB 字節(jié)數(shù)據(jù)存儲指令 STRH 半字?jǐn)?shù)據(jù)存儲指令 STR R0, [R1] - 將R0中一個字的數(shù)據(jù),存入以R1的值為地址的存儲器中。 LDR R0, [R1] - 以R1的值為地址的存儲器中的字?jǐn)?shù)據(jù)(為32位)讀入寄存器R0 LDRH R0, [R1] -以R1的值為地址的存儲器中的半字?jǐn)?shù)據(jù)(為16位)讀入寄存器R0 LDRB R0, [R1] -以R1的值為地址的存儲器的字節(jié)數(shù)據(jù)(為8位)讀入寄存器R0 注意了,LDR R1, #0x12345678 LDR是加載存儲指令,表示存儲器到寄存器的數(shù)據(jù)傳送,而#是立即數(shù)符號,表示立即數(shù)尋址**。所以這樣寫是不正確的!** ADC R1, R2, R3 表示 R1 = R2+R3+C(C表示進(jìn)位)(ADD表示加法)(ADC表示) 置1清0的操作 常見的操作是:or可實(shí)現(xiàn)置1,and可實(shí)現(xiàn)清0。比如ORR R0,R0,#00000003 該指令設(shè)置R0的0、1位,其余位保持不變。再比如AND R0,R0,#FFFFFFFE實(shí)現(xiàn)R0的最低位清零。還有一個是用ARM的指令進(jìn)行位清0,BIC R1, R1 #0X00000088 立即數(shù) 匯編語言中中操作數(shù)有三種:寄存器操作數(shù)、存儲器操作數(shù)和立即數(shù)。 其中立即數(shù)相當(dāng)于高級語言中的常量(常數(shù)),它是直接出現(xiàn)在指令中的數(shù),不用存儲在寄存器或存儲器中的數(shù),如指令A(yù)DD AL,06H中的06H即為立即數(shù)。 大小端存儲 所謂的大端模式就是,低地址存儲高位字節(jié)。 所謂的小端模式就是,低地址存儲低位字節(jié)。 計(jì)算機(jī)存儲結(jié)構(gòu) 馮諾依曼,是一種程序指令儲存和數(shù)據(jù)儲存在一起的存儲器結(jié)構(gòu) 哈佛結(jié)構(gòu),是一種將程序指令儲存和數(shù)據(jù)儲存分開的存儲器結(jié)構(gòu) 音頻圖像 音頻 數(shù)字音頻的正確處理順序是:取樣 -> 量化 -> 編碼 數(shù)字音頻的主要參數(shù):取樣頻率、量化位數(shù)、聲道數(shù)目、使用的壓縮編碼方法、比特率 比特率(碼率)計(jì)算方式:碼率 = 取樣頻率×量化位數(shù)×聲道數(shù),壓縮后的碼率和壓縮前的碼率也就差一個壓縮比。 mp3 MPEG - 1層③算法進(jìn)行有損的壓縮編碼,以8~12倍的比率大幅度降低了聲音的數(shù)據(jù)量 圖像 包括BMP.、TIF、GIF、JPEG、PNG 數(shù)字圖像的獲取過程分為:掃描、分色、取樣 GIF是互聯(lián)網(wǎng)上廣泛使用的一種圖像文件格式,它的顏色數(shù)目較少,不超過 256色 ,文件特別小,適合互聯(lián)網(wǎng)傳輸 JPEG是 靜止圖像數(shù)據(jù)壓縮編碼 的國際標(biāo)準(zhǔn),特別適合處理各種連續(xù)色調(diào)的彩色和灰度圖像,算法復(fù)雜度適中,軟硬件皆可實(shí)現(xiàn)。 屏幕 觸摸屏 電阻式觸摸屏(軟屏),結(jié)構(gòu)簡單價格低 電容式觸摸屏(硬屏),結(jié)構(gòu)復(fù)雜價格高 電容式觸摸屏可以實(shí)現(xiàn)多點(diǎn)觸摸和滑動操作 般寫硬筆字的觸摸屏是電阻屏 LCD顯示屏 LCD顯示屏自身不帶控制器,沒有驅(qū)動電路,僅僅是顯示器件,價格最低 LCD顯示模塊內(nèi)置LCD顯示屏,控制器和驅(qū)動模塊,有字符型和圖形點(diǎn)陣型 PC機(jī)通常使用的是LCD顯示器,除具備顯示屏外,還包括驅(qū)動器,控制器以及外殼,是完整的LCD顯示設(shè)備 DVI、VGA以及HDMI是一種接口標(biāo)準(zhǔn) 其他 微波通信:手機(jī)通信、衛(wèi)星通信、無線局域網(wǎng) 調(diào)頻廣播屬于短波以及超短波通信。 Linux 嵌入式
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。