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

正文內(nèi)容

移植μcos-ii到arm-資料下載頁

2025-10-07 02:59本頁面
  

【正文】 OSEnterSum為 1,防止在 OSIntExit函數(shù)中打開中斷 通知系統(tǒng),中斷退出 使 OSEnterSum為 0,運(yùn)行中斷打開 恢復(fù)任務(wù)的 R SP和LR ? 關(guān)于中斷及時鐘節(jié)拍 流程圖 保存當(dāng)前任務(wù)的 寄存器組 中斷嵌套數(shù)加 1 切換到系統(tǒng)模式 執(zhí)行中斷服務(wù)程序 關(guān)中斷 執(zhí)行 OSIntExit( ) 切換到 IRQ模式 判斷是否需要進(jìn)行任務(wù)切換 切換任務(wù)或返回 MACRO $IRQ_Label HANDLER $IRQ_Exception_Function EXPORT $IRQ_Label 。 輸出的標(biāo)號 IMPORT $IRQ_Exception_Function 。 引用的外部標(biāo)號 $IRQ_Label ... LDR R0, =OSTCBHighRdy LDR R0, [R0] LDR R1, =OSTCBCur LDR R1, [R1] CMP R0, R1 ADD SP, SP, 4*3 MSR SPSR_cxsf, R3 。 不進(jìn)行任務(wù)切換 LDMEQFD SP!, {R0R3, R12, PC}^ 。 進(jìn)行任務(wù)切換 LDR PC, =OSIntCtxSw MEND ? 關(guān)于中斷及時鐘節(jié)拍 比較當(dāng)前任務(wù)是否為就緒的最高優(yōu)先級任務(wù), 如果不是則進(jìn)行切換 設(shè)置堆棧指針和恢復(fù)SPSR 進(jìn)行任務(wù)切換或者恢復(fù)執(zhí)行被中斷任務(wù) ? 關(guān)于中斷及時鐘節(jié)拍 流程圖 保存當(dāng)前任務(wù)的 寄存器組 中斷嵌套數(shù)加 1 切換到系統(tǒng)模式 執(zhí)行中斷服務(wù)程序 關(guān)中斷 執(zhí)行 OSIntExit( ) 切換到 IRQ模式 判斷是否需要進(jìn)行任務(wù)切換 切換任務(wù)或返回 中斷服務(wù)程序 ( ISR) 在 ISR中可以打開中斷實(shí)現(xiàn)中斷嵌套 void ISR(void) { OS_ENTER_CRITICAL()或直接給變量 OsEnterSum賦 1。 清除中斷源 。 通知中斷控制器中斷結(jié)束: 開中斷: OS_EXIT_CRITICAL()。 用戶處理程序 。 } ? 中斷服務(wù)程序的編寫 因?yàn)橹袛喟l(fā)生時肯定是允許中斷的,所以如果用戶在清除中斷源之前調(diào)用 μ C/OSII的系統(tǒng)服務(wù)函數(shù)就很可能會造成芯片的中斷系統(tǒng)工作異常而使程序工作異常。因此在函數(shù)開始處關(guān)閉中斷,或者直接給變量 OSEnterSum賦 1。如果用戶程序沒有這種情況,則不需要這個操作。在執(zhí)行 OS_EXIT_CRITICAL( )后,中斷重新打開,如果在接下來的用戶處理程序中發(fā)生中斷,就可以實(shí)現(xiàn)中斷嵌套。 第 6章 目錄 ?1. μC/OSII簡介 ? ? μC/OSII ? LPC2021 移植代碼應(yīng)用到 LPC2021 ? 概述 項(xiàng)目中應(yīng)用移植代碼時,還要做一些工作,因?yàn)椋? 1.各種基于 ARM7處理器核的芯片的硬件結(jié)構(gòu)不盡相同,所以需要編寫部分啟動代碼。另外中斷服務(wù)程序的編寫方法也各不相同; ,所以盡管使用同一系列的芯片,其時鐘節(jié)拍中斷也可能使用不同的中斷實(shí)現(xiàn)。 移植代碼應(yīng)用到 LPC2021 ? 概述 將 μ C/OSII移植到 LPC2021時,需要完成的工作主要有以下幾個部分: ? 編寫或獲取啟動代碼; ? 掛接 SWI軟件中斷; ? 中斷及時鐘節(jié)拍中斷; ? 編寫應(yīng)用程序。 注 :其中“啟動代碼”已經(jīng)在第 5章中講述。 Reset LDR PC,ResetAddr LDR PC,UndefinedAddr LDR PC,SWI_Addr LDR PC,PrefetchAddr LDR PC,DataAbortAddr DCD 0xb9205f80 LDR PC,[PC, 0xff0] LDR PC,FIQ_Addr ResetAddr DCD ResetInit UndefinedAddr DCD Undefined SWI_Addr DCD SoftwareInterrupt PrefetchAddr DCD PrefetchAbort DataAbortAddr DCD DataAbort nouse DCD 0 IRQ_Addr DCD IRQ_Handler FIQ_Addr DCD FIQ_Handler ? 掛接 SWI軟件中斷 將軟中斷異常處理程序掛接到內(nèi)核是通過修改啟動代碼中的異常向量表實(shí)現(xiàn), 代碼如下所示: 發(fā)生軟件中斷時跳轉(zhuǎn)到軟件中斷服務(wù)函數(shù) 因?yàn)橹袛喟l(fā)生時肯定是允許中斷的,所以如果用戶在清除中斷源之前調(diào)用 μ C/OSII的系統(tǒng)服務(wù)函數(shù)就很可能會造成芯片的中斷系統(tǒng)工作異常而使程序工作異常。因此在函數(shù)開始處關(guān)閉中斷,或者直接給變量 OSEnterSum賦 1。如果用戶程序沒有這種情況,則不需要這個操作。在執(zhí)行 OS_EXIT_CRITICAL( )后,中斷重新打開,如果在接下來的用戶處理程序中發(fā)生中斷,就可以實(shí)現(xiàn)中斷嵌套。 void ISR(void) { OS_ENTER_CRITICAL()或直接給變量 OsEnterSum賦 1。 清除中斷源 。 通知中斷控制器中斷結(jié)束: 開中斷: OS_EXIT_CRITICAL()。 用戶處理程序 。 } 中斷及時鐘節(jié)拍中斷 方法是在文件中 ,其中xxx替換為自己需要的字符串。這樣,匯編接口就完成了。 xxx_Handler HANDLER xxx_Exception //中斷外設(shè)初始化 。 VICVectAddrX = (uint32) xxx_Handler 。 VICVectCntlX = (0x20 | Y)。 VICIntEnable = 1 Y。 每個中斷都有自己的匯編接口代碼 將匯編接口代碼的入口設(shè)置到向量中斷 中斷編寫完成后,關(guān)鍵在于把程序與芯片的相關(guān)中斷源掛接,使芯片在產(chǎn)生相應(yīng)的中斷后會調(diào)用相應(yīng)的處理程序。這需要做以下兩個方面的工作: 中斷程序編寫關(guān)鍵 ? 編寫應(yīng)用程序 移植 μ C/OSII是為了在自己的系統(tǒng)使用 μ C/OSII。使用μ C/OSII編寫應(yīng)用程序就必須遵守 μ C/OSII的編程規(guī)范。主要包括主函數(shù)和用戶任務(wù),它們的關(guān)系如下。 Main 函數(shù) 初始化操作系統(tǒng),并建立空閑任務(wù) 創(chuàng)建根任務(wù)或更多的任務(wù) 啟動多任務(wù)環(huán)境 根任務(wù) 目標(biāo)板初始化 (啟動系統(tǒng)時鐘) 創(chuàng)建其它的任務(wù) 執(zhí)行任務(wù)循環(huán) 任務(wù) 1 執(zhí)行特定操作 執(zhí)行任務(wù)循環(huán) 任務(wù) n 執(zhí)行特定操作 執(zhí)行任務(wù)循環(huán) . . . ? 編寫應(yīng)用程序 Main 函數(shù) 初始化操作系統(tǒng),并建立空閑任務(wù) 創(chuàng)建根任務(wù)或更多的任務(wù) 啟動多任務(wù)環(huán)境 根任務(wù) 目標(biāo)板初始化 (啟動系統(tǒng)時鐘) 創(chuàng)建其它的任務(wù) 執(zhí)行任務(wù)循環(huán) 任務(wù) 1 執(zhí)行特定操作 執(zhí)行任務(wù)循環(huán) 任務(wù) n 執(zhí)行特定操作 執(zhí)行任務(wù)循環(huán) . . . 多任務(wù)共享系統(tǒng)資源,分時執(zhí)行 多任務(wù)共享系統(tǒng)資源,多任務(wù)共享系統(tǒng)資源,多任務(wù)共享系統(tǒng)資源, 移植 μ C/OSII是為了在系統(tǒng)使用 μ C/OSII。使用 μ C/OSII編寫應(yīng)用程序就必須遵守 μ C/OSII的編程規(guī)范。主要包括主函數(shù)和用戶任務(wù),它們的關(guān)系如下。 ? 編寫應(yīng)用程序 Main 函數(shù) 初始化操作系統(tǒng),并建立空閑任務(wù) 創(chuàng)建根任務(wù)或更多的任務(wù) 啟動多任務(wù)環(huán)境 移植 μ C/OSII是為了在系統(tǒng)使用 μ C/OSII。要在系統(tǒng)中使用 μ C/OSII編寫應(yīng)用程序就必須遵守 μ C/OSII的編程規(guī)范。主要包括主函數(shù)和用戶任務(wù),它們的關(guān)系如下。 根任務(wù) 目標(biāo)板初始化 (啟動系統(tǒng)時鐘) 創(chuàng)建其它的任務(wù) 執(zhí)行任務(wù)循環(huán) 任務(wù) 1 執(zhí)行特定操作 執(zhí)行任務(wù)循環(huán) 任務(wù) n 執(zhí)行特定操作 執(zhí)行任務(wù)循環(huán) . . . 多任務(wù)共享系統(tǒng)資源,分時執(zhí)行 多任務(wù)共享系統(tǒng)資源,多任務(wù)共享系統(tǒng)資源,多任務(wù)共享系統(tǒng)資源,Main 函數(shù) 初始化操作系統(tǒng),并建立空閑任務(wù) 創(chuàng)建根任務(wù)或更多的任務(wù) 啟動多任務(wù)環(huán)境 include OS_STK TaskStartStk[TASK_STK_SIZE]。 OS_STK TaskStk[TASK_STK_SIZE]。 int main (void) { OSInit()。 OSTaskCreate(Task1, (void *)0, amp。TaskStartStk[TASK_STK_SIZE 1], 0)。 OSStart()。 return 0。 } 定義任務(wù)的堆棧 ? 編寫應(yīng)用程序 根任務(wù) 目標(biāo)板初始化 (啟動系統(tǒng)時鐘) 創(chuàng)建其它的任務(wù) 執(zhí)行任務(wù)循環(huán) void Task1(void *pdata) { pdata = pdata。 /* 避免編譯警告 */ TargetInit()。 /* 目標(biāo)板初始化 */ for (。) { OSTimeDly(OS_TICKS_PER_SEC / 50)。 if (GetKey() != KEY1) { continue。 } OSTimeDly(OS_TICKS_PER_SEC / 50)。 if (GetKey() != KEY1) { continue。 } OSTaskCreate(Task2, (void *)0, amp。TaskStk[TASK_STK_SIZE 1], 10)。 while (GetKey() != 0) { OSTimeDly(OS_TICKS_PER_SEC / 50)。 } } } 任務(wù) 1 執(zhí)行特定操作 執(zhí)行任務(wù)循環(huán) 將該任務(wù)放在循環(huán)中創(chuàng)建,是因?yàn)樵撊蝿?wù)執(zhí)行一次后會自行刪除 ? 編寫應(yīng)用程序 任務(wù) 1 執(zhí)行特定操作 執(zhí)行任務(wù)循環(huán) 根任務(wù) 目標(biāo)板初始化 (啟動系統(tǒng)時鐘) 創(chuàng)建其它的任務(wù) 執(zhí)行任務(wù)循環(huán) void Task1(void *pdata) { pdata = pdata。 /* 避免編譯警告 */ TargetInit()。 /* 目標(biāo)板初始化 */ for (。) { OSTimeDly(OS_TICKS_PER_SEC / 50)。 if (GetKey() != KEY1) { continue。 } OSTimeDly(OS_TICKS_PER_SEC / 50)。 if (GetKey() != KEY1) { continue。 } OSTaskCreate(Task2, (void *)0, amp。TaskStk[TASK_STK_SIZE 1], 10)。 while (GetKey() != 0) { OSTimeDly(OS_TICKS_PER_SEC / 50)。
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1