freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

嵌入式系統(tǒng)設(shè)計(jì)與實(shí)例開發(fā)——arm與?cos-ⅱ第五講?c-在線瀏覽

2024-11-04 11:15本頁面
  

【正文】 調(diào)用 uHAL函數(shù)對中斷初始化 uHAL函數(shù)對 ARM計(jì)數(shù)器初始化 結(jié)束 28 uHAL的功能 ? uHAL的作用之一是在操作系統(tǒng)本身進(jìn)入正常運(yùn)行之前,為系統(tǒng)提供基本的輸入輸出手段,例如 uHALr_printf()等。 ?通過 ARMDisable()關(guān)閉中斷。 ?通過 uHAL_InitTimer()對系統(tǒng)使用的計(jì)數(shù)器進(jìn)行初始 化。 30 提 要 1 2 嵌入式系統(tǒng)的初始化 ?C/OSⅡ 移植分析 31 操作系統(tǒng)移植的概念 ? 所謂操作系統(tǒng)的移植,是指使一個(gè)實(shí)時(shí)操作系統(tǒng)能夠在某個(gè)微處理器平臺上運(yùn)行。 ? 移植的主要工作是修改部分與處理器硬件相關(guān)的代碼。 ? 針對特定處理器的移植。 ? 在程序中可以打開或者關(guān)閉中斷。 ? 處理器支持能夠容納一定量數(shù)據(jù)的硬件堆棧。 34 什么是可重入代碼 ? 可重入的代碼指的是一段代碼(比如:一個(gè)函數(shù))可以被多個(gè)任務(wù)同時(shí)調(diào)用,而不必?fù)?dān)心會破壞數(shù)據(jù)。 35 可重入代碼舉例 程序 1:可重入型函數(shù) void swap(int *x, int *y) { int temp。 *x=*y。 } 36 非可重入代碼舉例 程序 2:非可重入型函數(shù) int temp。 *x=*y。 } 返回 37 不可重入函數(shù)被中斷破壞 38 如何使函數(shù)具有可重入性 使 Swap()函數(shù)具有可重入性: ? 把 Temp定義為局部變量。 ? 用信號量禁止該函數(shù)在使用過程中被再次調(diào)用。這需要處理器的支持。 40 處理器支持中斷并且能產(chǎn)生定時(shí)中斷 ? ?COSII是通過處理器產(chǎn)生的定時(shí)器的中斷來實(shí)現(xiàn)多任務(wù)之間的調(diào)度的。 41 處理器支持硬件堆棧 ? ?COSII進(jìn)行任務(wù)調(diào)度的時(shí)候,會把當(dāng)前任務(wù)的 CPU寄存器存放到此任務(wù)的堆棧中,然后,再從另一個(gè)任務(wù)的堆棧中恢復(fù)原來的工作寄存器,繼續(xù)運(yùn)行另一個(gè)任務(wù)。 ? ARM7處理器中有專門的指令處理堆棧,可以靈活的使用堆棧。 ? 由于移植時(shí)需要對 CPU的寄存器進(jìn)行操作,所以需要 C交叉編譯器能夠支持匯編語言程序。鏈接器是用來將不同的模塊(編譯或匯編過的文件)鏈接成目標(biāo)文件;定位器則允許將代碼和數(shù)據(jù)放置在目標(biāo)處理器的指定內(nèi)存空間中。C/OSII要點(diǎn) (1) 開關(guān)中斷的方式。 endif … OS_ENTER_CRITICAL()。 } 44 使用 method3方式的開關(guān)中斷 define OS_ENTER_CRITICAL() { cpu_sr = INTS_OFF()。 } 45 ARM的中斷模式 ? 設(shè)備的中斷在 ARM中被映射到了兩個(gè)異常中斷中 —— FIQ和 IRQ。 為了方便和統(tǒng)一 181。 46 移植 181。中斷處理函數(shù)調(diào)用前后需要通知系統(tǒng)。 yourInterruptFun()。 47 OSIntExit的意義 低 優(yōu) 先 級 任 務(wù)高 優(yōu) 先 級 任 務(wù)時(shí) 間中 斷 處 理高 優(yōu) 先 級任 務(wù) 就 緒是否O S I n t E x i t ( )48 ARM的工作模式 ? ARM處理器有 7種操作模式 : ? 用戶模式 (usr) 正常的程序執(zhí)行模式。 ? 中斷模式 (irq) 用于通用中斷處理。 ? 中止模式 (abt) 支持虛擬內(nèi)存和 /或內(nèi)存保護(hù)等異常。 ? 未定義模式 (und) 支持硬件協(xié)處理器的軟件仿真。 ?6 個(gè)狀態(tài)寄存器。 ? 可見的寄存器取決于處理器的模式,不同的模式映射了不同的工作寄存器。 ? R0 到 R14 是通用寄存器。 ?每種處理器模式都有單獨(dú)的堆棧。 ? R15:程序計(jì)數(shù)器 (PC)。 ? 5個(gè) SPSR(程序狀態(tài)保存寄存器 ) :當(dāng)異常發(fā)生時(shí)保存 CPSR狀態(tài)。C/OSII在 ARM上的任務(wù)切換 ? 任務(wù)級的任務(wù)切換; ? 中斷級的任務(wù)切換。 (1) if ((OSIntNesting | OSLockNesting) == 0) { (2) OSIntExitY = OSUnMapTbl[OSRdyGrp]。 if (OSPrioHighRdy != OSPrioCur) { OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy]。 OSIntCtxSw()。 } 55 OSIntExit的關(guān)鍵 —— OSIntCtxSw ? 實(shí)現(xiàn)中斷級的任務(wù)切換 ? ARM在棧指針調(diào)整過程中的優(yōu)勢 任 務(wù) 的 P C任 務(wù) 寄 存 器( r 0 r 1 2 )I R Q 中 堆 棧 的 使 用 情 況進(jìn) 入 時(shí) I R Q 的 S PU n k n o w nO S I n t C t x S w時(shí) I R Q 的 S P堆 棧 的 增 長 方 向高 地 址低 地 址56 移植 181。 ? Thumb可以在一定程度上節(jié)省代碼空間,提高系統(tǒng)效率。 ?CPSR中的 T位不能直接操作。 ? 解決辦法: ?對 Thumb的使用必須保證原子操作。 ? 建議,小心使用 C編譯器,盡量不使用 Thumb。C/OSII的要點(diǎn) (4)— 何時(shí)啟動(dòng)系統(tǒng)定時(shí)器 ? 如果在 OSStart之前啟動(dòng)定時(shí)器,則系統(tǒng)可能無法正確執(zhí)行完OSStartHighRdy。 ? 系統(tǒng)定時(shí)器應(yīng)該在系統(tǒng)的最高優(yōu)先級任務(wù)中啟動(dòng)。 ? 在我們的移植版本中,使用了 181。 58 例: ?C/OSII在 S3C44B0X上的移植 ? 設(shè)置 。 ? 用匯編語言編寫四個(gè)與處理器相關(guān)的函數(shù)( )。比如: INT8U、INT8S等。 ? 設(shè)置堆棧的增長方向 :堆棧由高地址向低地址增長 。 typedef unsigned char INT8U。 typedef unsigned int INT16U。 typedef unsigned long INT32U。 typedef float FP32。 typedef unsigned long OS_STK。 extern int INTS_OFF(void)。 define OS_ENTER_CRITICAL() { cpu_sr = INTS_OFF()。 } define OS_STK_GROWTH 1 /*從高向低 */ 61 程序狀態(tài)寄存器 ? 條件位: ? N = 1結(jié)果為負(fù) ,0結(jié)果為正或 0 ? Z = 1結(jié)果為 0,0結(jié)果不為 0 ? C =1進(jìn)位, 0借位 ? V =1結(jié)果溢出, 0結(jié)果沒溢出 ? Q 位: ? 僅 ARM 5TE/J架構(gòu)支持 ? 指示增強(qiáng)型 DSP指令是否溢出 ? J 位 ? 僅 ARM 5TE/J架構(gòu)支持 ? J = 1: 處理器處于 Jazelle狀態(tài) ? 中斷禁止位: ? I = 1: 禁止 IRQ ? F = 1: 禁止 FIQ ? T Bit ? 僅 ARM xT架構(gòu)支持 ? T = 0: 處理器處于 ARM 狀態(tài) ? T = 1: 處理器處于 Thumb 狀態(tài) ? Mode位 (處理器模式位 ): ? 0b10000 User ? 0b10001 FIQ ? 0b10010 IRQ ? 0b10011 Supervisor ? 0b10111 Abort ? 0b11011 Undefined ? 0b11111 System 27 31 N Z C V Q 28 6 7 I F T mode 16 23 8 15 5 4 0 24 f s x c U n d e f i n e d J 62 打開 /關(guān)閉中斷 EXPORT INTS_OFF EXPORT INTS_ON INTS_OFF mrs r0, cpsr 。 make a copy for masking orr r1, r1, 0xC0 。 disable ints and r0, r0, 0x80 。 return INTS_ON mrs r0, cpsr 。 mask on ints msr CPSR_cxsf, r0 。 return … 1 1 0 0 0 0 0 0 7 0 31 … 1 0 0 0 0 0 0 0 7 0 31 … I F T Mode 7 0 31 63 設(shè)置 OS_STK_GROWTH ? 絕大多數(shù)的微處理器和微控制器的堆棧是從上往下長的。 ?C/OSⅡ 被設(shè)計(jì)成兩種情況都可以處理,只要在結(jié)構(gòu)常量 OS_STK_GROWTH中指定堆棧的生長方式就可以了。 ? 置 OS_STK_GROWTH為 1表示堆棧從上往下長。 65 OSTaskStkInit ? OSTaskCreate()和 OSTaskCreateExt()通過調(diào)用 OSTaskStkInit()來初始化任務(wù)的堆棧結(jié)構(gòu)。這里我們定義了堆棧是從上往下長的。
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1