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

正文內(nèi)容

基于s3c44b0x的ucos移植-在線瀏覽

2025-03-10 01:57本頁面
  

【正文】 優(yōu)先級同時(shí)也唯一的標(biāo)識了任務(wù)。 移植條件 1. 處理器的 C編譯器能產(chǎn)生可重入代碼 2. 用 C語言可打開和關(guān)閉中斷 3. 處理器支持中斷并且能產(chǎn)生定時(shí)中斷 4. 處理器支持能夠容納一定量數(shù)據(jù)的硬件棧 5. 處理器有將堆棧指針和其它 CPU寄存器讀出和存儲(chǔ)到堆?;騼?nèi)存中的指令 移植條件(續(xù)) ? 對于 S3C44BOX來說,上面的這些條件都是可以滿足的。 移植過程 ? 由 uC/OS- Ⅱ 的文件體系結(jié)構(gòu)可知,移植的主要工作就是修改與 CPU相關(guān)的三個(gè)文件 ? 修改 ? 修改 ? 修改 修改 ? 該部分主要完成基本的配置和定義,包括: ? 定義與編譯器相關(guān)的數(shù)據(jù)類型 ? 定義使能和禁止中斷宏 ? 定義棧的增長方向 ? 定義 OS_TASK_SW宏 定義數(shù)據(jù)類型 uC/OSII有 8種整數(shù)數(shù)據(jù)類型: 1. INT8U 無符號 8位整數(shù) 2. INT8S 有符號 8位整數(shù) 3. INT16U 無符號 16位整數(shù) 4. INT16S 有符號 16位整數(shù) 5. INT32U 無符號 32位整數(shù) 6. INT32S 有符號 32位整數(shù) 他們需要同編譯器中的數(shù)據(jù)類型相匹配。 Typedef INT16U OS_CPU_SR。 ? uC/OSII使用這兩個(gè)語句開關(guān)中斷,開關(guān)中斷具體指令和方式需要根據(jù)不同的處理器來編寫和選擇。 { OS_ENTER_CRITICAL()。 } 開關(guān)中斷的方式 uC/OSII定義了三種開關(guān)中斷的方法: ? 方法一 直接開,直接關(guān)。 ? 方法三 直接開,利用局部變量恢復(fù) psw的內(nèi)容。 方式一 方法一的示意程序 # define OS_ENTER_CRITICAL() disable_int() define OS_EXIT_CRITICAL() enable_int() 方式一(續(xù)) ? 使用方法一的場合 處理器相應(yīng)的編譯器只能使用某條指令開中斷或關(guān)中斷 ? 方法一存在問題 如果在禁止中斷的情況下調(diào)用 uC/OSII函數(shù),那么從 uC/OSII函數(shù),那么從uC/OSII返回時(shí)中斷可能就允許了。 Asm(“ DI” )。 ? 優(yōu)點(diǎn): 保證臨界段代碼執(zhí)行時(shí)中斷關(guān)閉,執(zhí)行完畢恢復(fù)原先開關(guān)中斷的狀態(tài)。 Disable_interrupts() OS_CRITICAL() enable_int() 方式三(續(xù)) ? 使用方式二的場合: 處理器及相應(yīng)的編譯器有從 PSW中恢復(fù)相應(yīng)的中斷狀態(tài)的語句。 ? 注意事項(xiàng) 用戶在編寫應(yīng)用程序中開關(guān)中斷必須添加相應(yīng)的聲明和語句。 Disable_interrupts() /*臨界段代碼 */ Set_processor_psw() } 三種方式的選擇 ? 三種方式比較: 方法二最好,但需要處理器和編譯器的支持。 定義堆棧增長方向 ? : define OS_STK_GROWTH 0 表示堆棧從下往上生長; define OS_STK_GROWTH 1 表示堆棧從上往下生長; ? 堆棧增長方向的選擇: 該選項(xiàng)跟處理器和編譯器有關(guān)。 定義 OS_TASK_SW()宏 ? OS_TASK_SW()函數(shù)被調(diào)用的場合 1. OS_TASK_SW()宏是 uC/OSII從低優(yōu)先級切換到最高優(yōu)先級任務(wù)時(shí)被調(diào)用的。 修改 ? 4個(gè)匯編函數(shù)需要移植。這時(shí)系統(tǒng)將控制權(quán)交給用戶創(chuàng)建的任務(wù)進(jìn)程,直到該任務(wù)被阻塞或者被其他更高優(yōu)先級的任務(wù)搶占 CPU。 OSCtxSw() ? 該函數(shù)由 OS_TAST_SW宏調(diào)用,OS_TAST_SW()由 OSSched()函數(shù)調(diào)用,OSSched()函數(shù)負(fù)責(zé)任務(wù)之間的調(diào)度。該函數(shù)就完成了一次任務(wù)切換。由于中斷可能會(huì)使更高優(yōu)先級的任務(wù)進(jìn)入就緒態(tài),因此,為了更高優(yōu)先級的任務(wù)能立即運(yùn)行,在中斷服務(wù)子程序的最后,OSIntExit()函數(shù)會(huì)調(diào)用 OSIntCtxSw()做任務(wù)切換。 OSIntCtxSW()與OSCtxSw()都是用于任務(wù)切換的函數(shù),其區(qū)別在于,在OSIntCtxSw()中無需再保存 CPU寄存器,因?yàn)樵谡{(diào)用OSInCtxSw()之前已發(fā)生了中斷, OSIntCtxSw()已將默認(rèn)的 cpu寄存器 保存到了被中斷的任務(wù)級堆棧中。這個(gè)中斷可看作是系統(tǒng)心臟的脈動(dòng)。時(shí)鐘節(jié)拍的頻率越高,系統(tǒng)的額外開銷就越大。 OSTickISR()(續(xù)) ? OSTickISR()首先將 CPU寄存器的值保存在被中斷任務(wù)的堆棧中,之后調(diào)用 OSIntEnter()。OSTimeTick(),檢查所有處于延時(shí)等待狀態(tài)的任務(wù),判斷是否有延時(shí)結(jié)束的就緒的任務(wù)。 修改 ?
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1