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

正文內(nèi)容

嵌入式實時操作系統(tǒng)的移植-wenkub

2023-05-23 06:46:02 本頁面
 

【正文】 器平臺上運行。 ?通過 ARMDisable()關(guān)閉中斷。C/OS 是建立在 uHAL的基礎(chǔ)之上的。 ? 從結(jié)構(gòu)上看, uHAL是一組庫程序,需要說明的是, uHAL并不是專門為 181。C/OS 的入口函數(shù),啟動對 181。C/OS 的初始化。 ? 這里有兩個循環(huán),第一個循環(huán)把預(yù)初始化的數(shù)據(jù)段(位于代碼段的后面)復(fù)制到 RAM中,另一個循環(huán)把未初始化的數(shù)據(jù)段 ZI初始化為 0,也就是實現(xiàn)把從 ROM中的 .data段復(fù)制到 RAM,對 ZI段內(nèi)的數(shù)據(jù)初始化為 0,以完成對 C環(huán)境的初始化。 ? 故在系統(tǒng)啟動時需要復(fù)制 ROM或 FLASH中的 .data段到 RAM,以完成對RAM的初始化。 ? 如果系統(tǒng)使用了 DRAM或其他外設(shè),需要設(shè)置一些寄存器,以確定其刷新頻率、數(shù)據(jù)總線寬度等信息。 13 中斷向量表 FIQ 0x1C 外部快速中斷 IRQ 0x18 一般外部中斷 (Reserved) 0x14 保留 Data Abort 0x10 數(shù)據(jù)異常 Frefetch Abort 0x0C 預(yù)取指異常 Software int 0x08 軟件中斷 Undef 0x04 未定義指令中斷 Reset 0x00 復(fù)位中斷 14 中斷向量表的程序 AREA Boot,CODE,READONLY ENTRY B Reset_handler B Undef_Handler B SWI_Handler B PreAbort_Handler B . 。 ? 啟動程序首先必須定義入口指針,而且整個應(yīng)用程序只有一個入口指針。 ?初始化中斷處理程序。 2)禁止中斷和高速緩存。handlerPAbort b HandlerDabort 。 4 嵌入式系統(tǒng)的初始化過程 復(fù)位向量最小硬件初始化其余硬件初始化RTOS初始化RTOS部件初始化啟動R T O S啟動應(yīng)用程序1234567硬件初始化RTOS初始化軟件初始化最小啟動代碼 BSPRTOS應(yīng)用程序5 嵌入式系統(tǒng)的初始化過程 復(fù)位向量最小硬件初始化其余硬件初始化123最小啟動代碼 BSP硬件初始化階段 1. 復(fù)位向量 ENTRY b ResetHandler 。for debug b HandlerUndef 。handlerDAbort b . 。 3)初始化內(nèi)存控制器、內(nèi)存芯片和高速緩存單元,包括: ?得到內(nèi)存的開始地址。 ?初始化總線接口。 例: AREA Boot,CODE,READONLY ENTRY /*設(shè)置程序入口指針 */ 12 二、設(shè)置中斷向量 ? ARM要求中斷向量必須設(shè)置在從 OX00000000地址開始,連續(xù) 8*4字節(jié)的地址空間。for reserved interrupt,stop here B IRQ_handler B FIQ_handler 15 三、初始化時鐘和設(shè)置相關(guān)的寄存器 通過設(shè)置時鐘控制器來確定 CPU的工作頻率,設(shè)置中斷控制寄存器屏蔽中斷。有的系統(tǒng)還需設(shè)置一些寄存器來控制 SDRAM、 USB、網(wǎng)絡(luò)接口等。在初始化期間應(yīng)將系統(tǒng)需要讀寫的數(shù)據(jù)和變量從 ROM復(fù)制到 RAM里運行。 21 ROM地址的重映射 (remap) 0x0200 ( boot code) 0x0100 (Reset_handler) …… B Reset_Handler 0x0000 Flash (remap) 0x0204 ( boot code) 0x0200 (Reset_handler) B Reset_Handler 0x0000 RAM 22 初始化 C環(huán)境( 3) 23 七、呼叫 C程序 ? 對 main函數(shù)的調(diào)用進(jìn)入 181。 ? 例 IMPORT Main b Main 。C/OS 的初始化 。C/OS 準(zhǔn)備的,甚至也不是專為操作系統(tǒng)內(nèi)核準(zhǔn)備的。 26 181。 ?通過 uHAL_InitInterrupts()設(shè)置中斷向量處理程序。 ? ?COSII的主要代碼都是由標(biāo)準(zhǔn)的 C語言寫成的,移植方便。 33 移植 ?COSII滿足的條件 ? 處理器的 C編譯器能產(chǎn)生可重入代碼。 ? 處理器有將堆棧指針和其他 CPU寄存器存儲和讀出到堆棧(或者內(nèi)存)的指令。 temp=*x。 void swap(int *x, int *y) { temp=*x。 ? 調(diào)用 Swap()函數(shù)之前關(guān)中斷,調(diào)動后再開中斷。 在 ARM7TDMI的處理器上,可以設(shè)置相應(yīng)的寄存器來關(guān)閉或者打開系統(tǒng)的所有中斷。所以,寄存器的入棧和出棧是?COSII多任務(wù)調(diào)度的基礎(chǔ)。 ? 嵌入式 C編譯器一般都包括匯編器、鏈接器和定位器。推薦使用 method3 { if OS_CRITICAL_METHOD == 3 OS_CPU_SR cpu_sr。 } define OS_EXIT_CRITICAL() { if(cpu_sr == 0) INTS_ON()。C/OSII系統(tǒng)中斷的處理,只使用了 IRQ模式的中斷。例如: OSIntEnter()。 ? 快速中斷模式 (fiq) 支持高速數(shù)據(jù)傳輸或通道處理。 ? 系統(tǒng)模式 (sys) 支持操作系統(tǒng)的特殊用戶模式 (運行操作系統(tǒng)任務(wù))。 ?15個通用寄存器 (R0 to R14), 以及 2個狀態(tài)寄存器和程序計數(shù)器(PC)在任何時候都中可見的。 ? R13: 堆棧指針 (sp) (通常 )。 ? CPSR : 當(dāng)前程序狀態(tài)寄存器,包括代碼標(biāo)志狀態(tài)和當(dāng)前模式位。 任 務(wù) 1C P S R , S P S RC P UR 0 R 1 5任 務(wù) 2堆 棧堆 棧53 中斷處理過程 54 OSIntExit() void OSIntExit (void){ OS_ENTER_CRITICAL()。 OSCtxSwCtr++。C/OSII要點 (3)—— Thumb帶來的問題 ? 很多 ARM內(nèi)核集成了 16位 thumb指令集。 ?Thumb狀態(tài)將導(dǎo)致 CPSR恢復(fù)以后的指令不能運行。 57 移植 181。 ? 使用 OSRunning變量來控制操作系統(tǒng)的運行。 ? 用 C語言編寫六個操作系統(tǒng)相關(guān)的函數(shù)( )。 ? 與 ARM處理器相關(guān)的代碼,使用 OS_ENTER_CRITICAL() 和OS_EXIT_CRITICAL() 宏開啟/關(guān)閉中斷。 typedef signed char INT8S。 typedef signed long INT32S。 typedef unsigned long OS_CPU_SR。 } define OS_EXIT_CRITICAL() { if(cpu_sr == 0) INTS_ON()。 mask off int bits msr CPSR_cxsf, r1 。 current CSR bic r0, r0, 0x80 。但是某些處理器是用另外一種方式工作的。 64 用 C語言編寫六個操作系統(tǒng)相關(guān)的函數(shù) ? void *OSTaskStkInit (void (*task)(void *pd),void *pdata, void *ptos, INT16U opt) ? void OSTaskCreateHook (OS_TCB *ptcb) ? void OSTaskDelHook (OS_TCB *ptcb) ? void OSTaskSwHook (void) ? void OSTaskStatHook (void) ? void OSTimeTickHook (void) 后 5個函數(shù)為接口函數(shù),可以不加代碼。 ? 在用戶建立任務(wù)時,用戶傳遞任務(wù)的地址、 pdata指針、任務(wù)的堆棧棧頂和任務(wù)的優(yōu)先級給 OSTaskCreate()和 OSTaskCreateExt()。 stk = (unsigned int *)ptos。 /* pc */ *stk = (unsigned int) task。 /* r10 */ *stk = 9。 /* r6 */ *stk = 5。 /* r2 */ *stk = 1。 /* spsr */ return ((OS_STK *)stk)。該函數(shù)被調(diào)用的時候中斷是禁止的。 } 70 OSTaskDelHook ? 當(dāng)任務(wù)被刪除的時候,就會調(diào)用 OSTaskDelHook()函數(shù)。 ? 函數(shù)原型: void OSTaskDelHook (OS_TCB *ptcb) { ptcb=ptcb。注意在調(diào)用 OSTaskSwHook()期間中斷一直是被禁止的。例如,用戶可以保持并顯示每個任務(wù)的執(zhí)行時間,每個任務(wù)所用的 CPU份額,以及每個任務(wù)執(zhí)行的頻率等。 得到當(dāng)前任務(wù) TCB地址
點擊復(fù)制文檔內(nèi)容
高考資料相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1