版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
基于S3C44B0X的uC/OS移植SC06023001莫凡SC06023002鐘軼基于S3C44B0X的uC/OS移植SC06023001莫1主要內(nèi)容 基本概念uC/OS-Ⅱ在S3CEV40上的移植調(diào)試與測試主要內(nèi)容 基本概念2有關(guān)操作系統(tǒng)移植的三個(gè)問題什么情況下需要進(jìn)行移植操作系統(tǒng)?什么情況下需要移植實(shí)時(shí)操作系統(tǒng)?選擇什么樣的實(shí)時(shí)操作系統(tǒng)進(jìn)行移植?有關(guān)操作系統(tǒng)移植的三個(gè)問題什么情況下需要進(jìn)行移植操作系統(tǒng)?3問題1:操作系統(tǒng)的必要性為什么需要操作系統(tǒng)硬件資源的復(fù)雜,需要在應(yīng)用程序與硬件之間提供一個(gè)軟件層次以簡化開發(fā)資源的豐富,需要有專門的資源管理任務(wù)的增加,需要有系統(tǒng)來進(jìn)行任務(wù)的調(diào)度操作系統(tǒng)的功能設(shè)備訪問、資源管理、任務(wù)管理、統(tǒng)計(jì)及其他功能問題1:操作系統(tǒng)的必要性為什么需要操作系統(tǒng)4問題2:實(shí)時(shí)性的需求實(shí)時(shí)性指的是系統(tǒng)對(duì)于特定的事件的處理需要在要求的時(shí)間內(nèi)完成。從操作系統(tǒng)的角度來講,實(shí)時(shí)性指的系統(tǒng)的結(jié)構(gòu)能在多大程度上保證反映的速度早期的嵌入式操作系統(tǒng)幾乎都是實(shí)時(shí)操作系統(tǒng),但近年隨著一些手持通用計(jì)算機(jī)設(shè)備的出現(xiàn),使得現(xiàn)在的嵌入式操作系統(tǒng)有很多不需要實(shí)時(shí)性問題2:實(shí)時(shí)性的需求實(shí)時(shí)性指的是系統(tǒng)對(duì)于特定的事件的處理需要5問題2:實(shí)時(shí)性的需求(續(xù))是否需要完全取決于軟件項(xiàng)目的復(fù)雜程度要保證多個(gè)模塊的執(zhí)行時(shí)間并行的功能模塊比較多定時(shí)處理的功能比較多程序的執(zhí)行需要判斷很多條件參數(shù)或資源需要規(guī)劃代碼執(zhí)行的優(yōu)先順序要保證多個(gè)模塊的執(zhí)行時(shí)間問題2:實(shí)時(shí)性的需求(續(xù))是否需要完全取決于軟件項(xiàng)目的復(fù)雜程6問題3:RTOS的選擇內(nèi)核占用存儲(chǔ)區(qū)尺寸RTOS性能:任務(wù)切換時(shí)間、任務(wù)調(diào)度數(shù)、任務(wù)優(yōu)先級(jí)數(shù)開發(fā)調(diào)試工具易用性兼容性許可證形式問題3:RTOS的選擇內(nèi)核占用存儲(chǔ)區(qū)尺寸7uC/OS-Ⅱ簡介uC/OS-Ⅱ是美國一個(gè)名為JeanLabrosse的工程師開發(fā)的實(shí)時(shí)操作系統(tǒng)。它以小內(nèi)核、多任務(wù)、豐富的系統(tǒng)服務(wù)、容易使用等特點(diǎn)越來越受歡迎uC/OS-Ⅱ?qū)崟r(shí)系統(tǒng)的商業(yè)應(yīng)用非常廣泛,具有非常穩(wěn)定、可靠的性能,成功應(yīng)用于生命科學(xué)、航天工程等重大科研項(xiàng)目中。由于其極小的內(nèi)核,特別適用于對(duì)程序代碼存儲(chǔ)空間極其敏感的嵌入式系統(tǒng)開發(fā)uC/OS-Ⅱ是一款源碼公開的實(shí)時(shí)性操作系統(tǒng)uC/OS-Ⅱ簡介uC/OS-Ⅱ是美國一個(gè)名為JeanLa8uC/OS-Ⅱ的實(shí)時(shí)性“可剝奪內(nèi)核”與“不可剝奪內(nèi)核”的區(qū)分往往是RTOS與非實(shí)時(shí)嵌入式操作系統(tǒng)的區(qū)別所在uC/OS-Ⅱ是可剝奪型內(nèi)核,它總是讓就緒態(tài)的高優(yōu)先級(jí)的任務(wù)先運(yùn)行,并規(guī)定所有任務(wù)的優(yōu)先級(jí)必須不同,任務(wù)的優(yōu)先級(jí)同時(shí)也唯一的標(biāo)識(shí)了任務(wù)。uC/OS-Ⅱ的實(shí)時(shí)性“可剝奪內(nèi)核”與“不可剝奪內(nèi)核”的區(qū)分9uC/OS-Ⅱ的特點(diǎn)可移植性絕大部分uC/OS-Ⅱ的源代碼是用移植性很強(qiáng)的ANSIC寫的,和微處理器相關(guān)部分使用匯編語言寫的,且已經(jīng)壓到最低限度,可以在絕大部分8位,16位,32位,64位微處理器上,微控制器上和DSP上運(yùn)行可裁減用戶可以在應(yīng)用程序中通過語句#defineconstants來定義所需的uC/OS-Ⅱ功能模塊,以減少不必要的存儲(chǔ)器空間開支uC/OS-Ⅱ的特點(diǎn)可移植性10uC/OS-Ⅱ的特點(diǎn)(續(xù))占先式uC/OS-Ⅱ?qū)儆谕耆枷仁降膬?nèi)核,這意味著uC/OS-Ⅱ總是運(yùn)行就緒條件下優(yōu)先級(jí)最高的任務(wù)多任務(wù)可以管理64個(gè)任務(wù),支持56個(gè)用戶任務(wù),賦予每個(gè)任務(wù)的優(yōu)先級(jí)必須是不相同的,不支持時(shí)間片輪轉(zhuǎn)調(diào)度法uC/OS-Ⅱ的特點(diǎn)(續(xù))占先式11uC/OS-Ⅱ的特點(diǎn)(續(xù))中斷管理中斷可以使正在執(zhí)行的任務(wù)掛起,如果優(yōu)先級(jí)更高的任務(wù)被喚喚醒,則高優(yōu)先級(jí)的任務(wù)再中斷嵌套全部推出后立即執(zhí)行,中斷嵌套可達(dá)255層其它公開源代碼、可固化、可確定性、任務(wù)棧、提供很多系統(tǒng)服務(wù)、穩(wěn)定性和可靠性強(qiáng)uC/OS-Ⅱ的特點(diǎn)(續(xù))中斷管理12uC/OS-Ⅱ內(nèi)核中的概念臨界區(qū)(共享資源的保護(hù)手段)任務(wù)和任務(wù)的狀態(tài)任務(wù)的控制塊任務(wù)的調(diào)度任務(wù)的切換過程時(shí)鐘節(jié)拍uC/OS-Ⅱ的中斷uC/OS-Ⅱ的初始化和啟動(dòng)uC/OS-Ⅱ內(nèi)核中的概念臨界區(qū)(共享資源的保護(hù)手段)13uC/OS-Ⅱ文件體系結(jié)構(gòu)uC/OS-Ⅱ文件體系結(jié)構(gòu)14uC/OS-Ⅱ在S3CEV40上的移植所謂移植,就是使一個(gè)實(shí)時(shí)操作系統(tǒng)能夠在某個(gè)微處理器平臺(tái)或微控制器上運(yùn)行,在移植之前,先要了解移植uC/OS-Ⅱ到處理器上必須滿足的條件。uC/OS-Ⅱ在S3CEV40上的移植所謂移植,就是使一個(gè)實(shí)15移植條件處理器的C編譯器能產(chǎn)生可重入代碼用C語言可打開和關(guān)閉中斷處理器支持中斷并且能產(chǎn)生定時(shí)中斷處理器支持能夠容納一定量數(shù)據(jù)的硬件棧處理器有將堆棧指針和其它CPU寄存器讀出和存儲(chǔ)到堆棧或內(nèi)存中的指令移植條件處理器的C編譯器能產(chǎn)生可重入代碼16移植條件(續(xù))對(duì)于S3C44BOX來說,上面的這些條件都是可以滿足的。開發(fā)工具采用EmbestIDEforARM,可以生成可重入代碼;在ARM7TDMl的處理器上可以產(chǎn)生定時(shí)器中斷;開/關(guān)中斷可以通過設(shè)置相應(yīng)寄存器來實(shí)現(xiàn);ARM7TDMl核的處理器支持容納一定量數(shù)據(jù)的硬件堆棧且具有有關(guān)的堆棧指令。移植條件(續(xù))對(duì)于S3C44BOX來說,上面的這些條件都是可17移植過程由uC/OS-Ⅱ的文件體系結(jié)構(gòu)可知,移植的主要工作就是修改與CPU相關(guān)的三個(gè)文件修改OS_CPU.H文件修改OS_CPU_A.ASM文件修改OS_CPU_C.C文件移植過程由uC/OS-Ⅱ的文件體系結(jié)構(gòu)可知,移植的主要工作就18修改OS_CPU.H文件該部分主要完成基本的配置和定義,包括:定義與編譯器相關(guān)的數(shù)據(jù)類型定義使能和禁止中斷宏定義棧的增長方向定義OS_TASK_SW宏修改OS_CPU.H文件該部分主要完成基本的配置和定義,包括19定義數(shù)據(jù)類型uC/OS-II有8種整數(shù)數(shù)據(jù)類型:INT8U無符號(hào)8位整數(shù)INT8S有符號(hào)8位整數(shù)INT16U無符號(hào)16位整數(shù)INT16S有符號(hào)16位整數(shù)INT32U無符號(hào)32位整數(shù)INT32S有符號(hào)32位整數(shù)他們需要同編譯器中的數(shù)據(jù)類型相匹配。定義數(shù)據(jù)類型uC/OS-II有8種整數(shù)數(shù)據(jù)類型:20定義數(shù)據(jù)類型(續(xù))匹配方法:TypedefunsignedcharINT8UTypedefsignedcharINT8UTypedefunsignedintINT16UTypedefsignedintINT16STypedefsignedlongINT32STypedefINT32UintOS_STK;TypedefINT16UOS_CPU_SR;定義數(shù)據(jù)類型(續(xù))匹配方法:21定義使能和禁止中斷宏定義OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL();uC/OS-II使用這兩個(gè)語句開關(guān)中斷,開關(guān)中斷具體指令和方式需要根據(jù)不同的處理器來編寫和選擇。定義使能和禁止中斷宏定義22定義使能和禁止中斷宏(續(xù))使用場合執(zhí)行臨界代碼段時(shí)cpu不容許被打斷,因此在臨界代碼段前后添加兩個(gè)函數(shù)來保護(hù)臨界代碼段。{OS_ENTER_CRITICAL();/*uc/OS-II臨界代碼段*/OS_EXIT_CRITICAL();}定義使能和禁止中斷宏(續(xù))使用場合23開關(guān)中斷的方式uC/OS-II定義了三種開關(guān)中斷的方法:方法一直接開,直接關(guān)。方法二直接開,利用psw恢復(fù)。方法三直接開,利用局部變量恢復(fù)psw的內(nèi)容。究竟選擇那種方法跟編譯器和處理器有關(guān),三種方法各有優(yōu)劣。開關(guān)中斷的方式uC/OS-II定義了三種開關(guān)中斷的方法:24方式一方法一的示意程序#defineOS_ENTER_CRITICAL()disable_int()#defineOS_EXIT_CRITICAL()enable_int()方式一方法一的示意程序25方式一(續(xù))使用方法一的場合處理器相應(yīng)的編譯器只能使用某條指令開中斷或關(guān)中斷方法一存在問題如果在禁止中斷的情況下調(diào)用uC/OS-II函數(shù),那么從uC/OS-II函數(shù),那么從uC/OS-II返回時(shí)中斷可能就允許了。方式一(續(xù))使用方法一的場合26方式二方式二的示意程序#defineOS_ENTER_CRITICAL()Asm(“PUSHPSW”);Asm(“DI”);#defineOS_EXIT_CRITICAL()Asm(“poppsw”)方式二方式二的示意程序27方式二(續(xù))使用方式二的場合:處理器及相應(yīng)的編譯器有從PSW中恢復(fù)相應(yīng)的中斷狀態(tài)的語句。優(yōu)點(diǎn):保證臨界段代碼執(zhí)行時(shí)中斷關(guān)閉,執(zhí)行完畢恢復(fù)原先開關(guān)中斷的狀態(tài)。方式二(續(xù))使用方式二的場合:28方式三方法三的示意程序:#defineOS_ENTER_CRITICAL()Cpu_sr=get_processor_psw();Disable_interrupts()OS_CRITICAL()enable_int()方式三方法三的示意程序:29方式三(續(xù))使用方式二的場合:處理器及相應(yīng)的編譯器有從PSW中恢復(fù)相應(yīng)的中斷狀態(tài)的語句。但需要使用局部變量。注意事項(xiàng)用戶在編寫應(yīng)用程序中開關(guān)中斷必須添加相應(yīng)的聲明和語句。方式三(續(xù))使用方式二的場合:30方式三(續(xù))添加聲明和語句的示意程序:VoidSom_uCOS_II_Service(arguments){OS_CPU_SRcpu_srCpu_sr=get_processor_psw();Disable_interrupts()/*臨界段代碼*/Set_processor_psw()}方式三(續(xù))添加聲明和語句的示意程序:31三種方式的選擇三種方式比較:方法二最好,但需要處理器和編譯器的支持。方法的選擇:使用S3C44B0X處理器及GCC編譯器具備使用方法二的條件。三種方式的選擇三種方式比較:32定義堆棧增長方向OS_CPU.H中的相關(guān)代碼:#defineOS_STK_GROWTH0表示堆棧從下往上生長;#defineOS_STK_GROWTH1表示堆棧從上往下生長;堆棧增長方向的選擇:該選項(xiàng)跟處理器和編譯器有關(guān)。雖然ARM處理器核對(duì)于兩種方式都支持,但GCC的C語言編譯器僅支持從上往下生長,故選1。定義堆棧增長方向OS_CPU.H中的相關(guān)代碼:33定義OS_TASK_SW()宏OS_TASK_SW()函數(shù)被調(diào)用的場合OS_TASK_SW()宏是uC/OS-II從低優(yōu)先級(jí)切換到最高優(yōu)先級(jí)任務(wù)時(shí)被調(diào)用的。如果處理器支持軟中斷,則可使用軟中斷將中斷向量指向OSCtx-SW()函數(shù);或者直接調(diào)用OSCtxSW()函數(shù)。定義OS_TASK_SW()宏OS_TASK_SW()函數(shù)被34修改OS_CPU_A.ASM文件OS_CPU_A.ASM匯編代碼文件有4個(gè)匯編函數(shù)需要移植。OSStartHighRdy()_多任務(wù)執(zhí)行時(shí)的最高優(yōu)先級(jí)任務(wù)切換OSCtxSw()_任務(wù)完成任務(wù)切換OSIntCtxSw()_中斷退出任務(wù)切換OSTickISR()_節(jié)拍中斷處理修改OS_CPU_A.ASM文件OS_CPU_A.ASM匯編35OSStartHighRdy()OSStartHighRdy()函數(shù)是在OSStart()多任務(wù)啟動(dòng)之后,負(fù)責(zé)從最高優(yōu)先級(jí)任務(wù)的TCB控制塊中獲得該任務(wù)的堆棧指針,并通過SP,并通過SP依次將CPU現(xiàn)場恢復(fù)。這時(shí)系統(tǒng)將控制權(quán)交給用戶創(chuàng)建的任務(wù)進(jìn)程,直到該任務(wù)被阻塞或者被其他更高優(yōu)先級(jí)的任務(wù)搶占CPU。該函數(shù)僅僅在多任務(wù)啟動(dòng)時(shí)被執(zhí)行一次,用來啟動(dòng)最高優(yōu)先級(jí)的任務(wù)執(zhí)行。OSStartHighRdy()OSStartHighR36OSCtxSw()該函數(shù)由OS_TAST_SW宏調(diào)用,OS_TAST_SW()由OSSched()函數(shù)調(diào)用,OSSched()函數(shù)負(fù)責(zé)任務(wù)之間的調(diào)度。OSCtxSw()函數(shù)的工作是,先將當(dāng)前任務(wù)的CPU現(xiàn)場保存到然后獲得最高優(yōu)先級(jí)任務(wù)的指針,并從該堆棧中恢復(fù)此任務(wù)的CPU現(xiàn)場,使之繼續(xù)執(zhí)行。該函數(shù)就完成了一次任務(wù)切換。OSCtxSw()該函數(shù)由OS_TAST_SW宏調(diào)用,OS_37OSIntCtxSw()該函數(shù)由OSIntExit()調(diào)用。由于中斷可能會(huì)使更高優(yōu)先級(jí)的任務(wù)進(jìn)入就緒態(tài),因此,為了更高優(yōu)先級(jí)的任務(wù)能立即運(yùn)行,在中斷服務(wù)子程序的最后,OSIntExit()函數(shù)會(huì)調(diào)用OSIntCtxSw()做任務(wù)切換。這樣做的目的主要是能夠盡快地讓高優(yōu)先級(jí)的任務(wù)得到響應(yīng),保證系統(tǒng)的實(shí)時(shí)性能。OSIntCtxSW()與OSCtxSw()都是用于任務(wù)切換的函數(shù),其區(qū)別在于,在OSIntCtxSw()中無需再保存CPU寄存器,因?yàn)樵谡{(diào)用OSInCtxSw()之前已發(fā)生了中斷,OSIntCtxSw()已將默認(rèn)的cpu寄存器保存到了被中斷的任務(wù)級(jí)堆棧中。OSIntCtxSw()該函數(shù)由OSIntExit()調(diào)用。38OSTickISR()時(shí)鐘節(jié)拍是特定的周期性中斷,是由硬件定時(shí)器產(chǎn)生的。這個(gè)中斷可看作是系統(tǒng)心臟的脈動(dòng)。時(shí)鐘的節(jié)拍式中斷使得內(nèi)核可將任務(wù)延時(shí)若干個(gè)整數(shù)時(shí)鐘節(jié)拍,以及當(dāng)任務(wù)等待事件發(fā)生時(shí),提供等待超時(shí)的依據(jù)。時(shí)鐘節(jié)拍的頻率越高,系統(tǒng)的額外開銷就越大。中斷間的時(shí)間間隔取決于不同的應(yīng)用。OSTickISR()時(shí)鐘節(jié)拍是特定的周期性中斷,是由硬件定39OSTickISR()(續(xù))OSTickISR()首先將CPU寄存器的值保存在被中斷任務(wù)的堆棧中,之后調(diào)用OSIntEnter()。隨后,OSTickISR()調(diào)用OSTimeTick(),檢查所用處于延時(shí)等待狀態(tài)的任務(wù)。OSTimeTick(),檢查所有處于延時(shí)等待狀態(tài)的任務(wù),判斷是否有延時(shí)結(jié)束的就緒的任務(wù)。OSTickISR()最后調(diào)用OSIntExit(),如果在中斷中(或其他嵌套的中斷)有更高優(yōu)先級(jí)的任務(wù)就緒,并且當(dāng)前中斷為嵌套的最后一層,那么OSIntExit()將進(jìn)行任務(wù)調(diào)度。OSTickISR()(續(xù))OSTickISR()首先將CP40修改OS_CPU_C.C文件什么是鉤子函數(shù)操作系統(tǒng)在特殊時(shí)刻調(diào)用用來補(bǔ)充擴(kuò)展uC/OS操作系統(tǒng)功能修改OS_CPU_C.C文件什么是鉤子函數(shù)41OS_CPU_C.C中的鉤子函數(shù)OSTaskStkInit()OSInitHookBegin()OSInitHookEnd()OSTaskCreatHook()OSTaskDelHook()OSTaskSwHook()OSTaskStatHook()OSTCBInitHook()OSTimeTickHook()OSTaskIdleHook()uC/OS-II中的鉤子函數(shù)共有十個(gè)OS_CPU_C.C中的鉤子函數(shù)OSTaskStkInit(42OSTaskStkInit()這是將UC/OS-II移植到S3C44B0X上唯一必須編寫的鉤子函數(shù)這個(gè)函數(shù)在任務(wù)創(chuàng)建時(shí)被調(diào)用,負(fù)責(zé)初始化任務(wù)的堆棧結(jié)構(gòu)并返回新的堆棧指針。OSTaskStkInit()這是將UC/OS-II移植到S43OSTaskCreatHook()調(diào)用者OSTaskCreat()OSTaskCreatExt()調(diào)用時(shí)中斷是禁止的,所以要減少代碼。OSTaskCreatHook()調(diào)用者44OSTaskDelHook()調(diào)用場合任務(wù)被刪除時(shí)。用途被調(diào)用時(shí)會(huì)收到指向被刪除任務(wù)的OS_TCB的指針,這樣它就可訪問所有的結(jié)構(gòu)成員了。用來檢驗(yàn)TCB擴(kuò)展是否被建立了,并進(jìn)行清除操作。OSTaskDelHook()調(diào)用場合45OSTaskSwHook()調(diào)用者OSCtxSw()OSIntCtxSw()功能能夠訪問OSTCBCur和OSTCBHighRdy這兩個(gè)變量分別指向被切換出去的任務(wù)和新任務(wù)注意該函數(shù)執(zhí)行時(shí)中斷是關(guān)掉的。OSTaskSwHook()調(diào)用者46OSTaskStatHook()調(diào)用者OSTaskStatHook()功能可以擴(kuò)展統(tǒng)計(jì)功能。OSTaskStatHook()調(diào)用者47OSTimeTickHook()調(diào)用場合每個(gè)時(shí)鐘節(jié)拍中斷,OSTimeTick()之前調(diào)用功能優(yōu)先處理緊急任務(wù)OSTimeTickHook()調(diào)用場合48OSInitHookBegin()調(diào)用場合OSInt()剛進(jìn)入時(shí)調(diào)用功能讓用戶自己擴(kuò)充初始化功能。OSInitHookBegin()調(diào)用場合49OSInitHookEnd()調(diào)用場合OSInt()剛返回時(shí)調(diào)用功能讓用戶自己擴(kuò)充初始化功能。OSInitHookEnd()調(diào)用場合50OSTCBInitHook()調(diào)用者OS_TCBInit()在調(diào)用OSTaskCreatHook()之前,會(huì)現(xiàn)調(diào)用OSTCBInitHook().功能能夠做初始化功能塊OS_TCB。OSTCBInitHook()調(diào)用者51OSTaskIdleHook()調(diào)用者OSTaskIdle()功能能實(shí)現(xiàn)無任務(wù)時(shí)進(jìn)入cpu的功耗模式后面的調(diào)試也將用到該函數(shù)。OSTaskIdleHook()調(diào)用者52uC/OS-II的調(diào)試調(diào)試的任務(wù)驗(yàn)證調(diào)試系統(tǒng)驗(yàn)證OSTaskStkInit()和OSStartHighRdy()驗(yàn)證OSCtxSw()函數(shù)驗(yàn)證OSIntCtx()函數(shù)uC/OS-II的調(diào)試調(diào)試的任務(wù)53調(diào)試涉及到的文件用戶調(diào)試編寫的測試文件TEST.C測試主程序,程序從此運(yùn)行OS_CFG.HuC/OS-II的注冊表INCLUDES.H各種庫OS_CFG.HOS_CPU.HUCOS_ii.h
調(diào)試涉及到的文件用戶調(diào)試編寫的測試文件54OS_CFG.H各種定義事件標(biāo)志消息郵箱內(nèi)存管理互斥型信號(hào)量消息隊(duì)列信號(hào)量任務(wù)管理時(shí)間管理OS_CFG.H各種定義55調(diào)試涉及到的文件移植須編寫的文件OS_CPU_A.ASMOS_CPU_C.COS_CPU.H調(diào)試涉及到的文件移植須編寫的文件56調(diào)試涉及到的文件與移植無關(guān)的Uc/os-II文件OS_CORE.COS_FLAG.COS_MBOX.COS_MEM.COS_MUTEX.COS_Q.COS_SEM.COS_TASK.COS_TIME.CUcos_II.CUcos_II.CuCOS_II.H調(diào)試涉及到的文件與移植無關(guān)的Uc/os-II文件57驗(yàn)證調(diào)試環(huán)境編寫最小的TEST.C
#include“includes.h”Voidmain(void){OSInt();OSStart();}驗(yàn)證調(diào)試環(huán)境編寫最小的TEST.C58驗(yàn)證OSTaskStkInit()和OSStartHighRdy修改OS_CFG.H,設(shè)置OS_TAST_STAT_EN為0。單步執(zhí)行main()程序進(jìn)入OSStart中的OSStartHighRdy()驗(yàn)證OSTaskStkInit()和OSStartHighR59驗(yàn)證OSTaskStkInit()和OSStartHighRdyOS_TaskIdle()的最后一條語句會(huì)從中斷中返回。一旦執(zhí)行這條語句,調(diào)試器就應(yīng)該指向OS_TaskIdle()的第1條指令。而如果這一步?jīng)]有發(fā)生,那么可能沒有將正確的任務(wù)地址放在任務(wù)堆棧中。這是就要修改上述兩個(gè)函數(shù)。驗(yàn)證OSTaskStkInit()和OSStartHighR60驗(yàn)證OSCtxSw()函數(shù)#include“includes.h”O(jiān)S_STKTestTaskStk[100];Voidmain(void){OSInit();OSTaskCreate(TestTask,(void*)0,&TestStk[99],0)OSStart();}VoidTestTask(void*pdata){pdata=pdata;while(1){OSTimeDly(1);}
驗(yàn)證OSCtxSw()函數(shù)#include“include61驗(yàn)證OSCtxSw()函數(shù)正常情況下程序能進(jìn)入到OSTimeDly()函數(shù)。OSTimeDly()調(diào)用OS_Sched(),而OS_Sched()調(diào)用OSCtxSw()的代碼。OSCtxSw()的代碼查找優(yōu)先級(jí)最高的任務(wù)。從軟中斷中返回。此后,應(yīng)該進(jìn)入OS_TaskIdle()如果沒有進(jìn)入,應(yīng)當(dāng)是OSCtxSw()有錯(cuò)。驗(yàn)證OSCtxSw()函數(shù)正常情況下程序能進(jìn)入到OSTime62驗(yàn)證OSIntCtxSw()和OSTickISR()改寫Test.C。觀察LED指示等。驗(yàn)證OSIntCtxSw()和OSTickISR()改寫Te63Test.c中的示意代碼#include“Include.h”O(jiān)S_STKTestTaskStk[100];Voidmain(void){OSInit();off_led();Set_clk_int();OSTaskCreate(TsetTask,(void*)0,&TestTaskStk[99],0);OSStart();}VoidTestTask(void*pdata){BOOLEANled_state;pdata=pdata;int_clk_timer()led_state=FALSE;on_led();while(1){OSTimeDly(1);if(led_state==FALSE){led_state=TRUE;led_on();}else{led_state=FALSE;off_led;}}}Test.c中的示意代碼#include“Include.64驗(yàn)證OSIntCtxSw()和OSTickISR()如果Led能夠閃爍,調(diào)試成功。如果不閃爍,在test.c中單獨(dú)測試OStickISR(),如果閃爍檢查OSIntCtxSw(),不閃爍檢查OSTickISR()。驗(yàn)證OSIntCtxSw()和OSTickISR()如果Le65結(jié)語uC/OS-Ⅱ提供的僅僅是一個(gè)任務(wù)調(diào)度的內(nèi)核,將其移植到ARM7微處理器上以后,要想實(shí)現(xiàn)一個(gè)相對(duì)完整、實(shí)用的RTOS,還需要進(jìn)行相當(dāng)多的擴(kuò)展性工作。這部分工作主要包括:建立文件系統(tǒng)、為外部設(shè)備建立驅(qū)動(dòng)程序并規(guī)范相應(yīng)的API函數(shù)、創(chuàng)建圖形用戶接口(GUI)函數(shù)、建立其他實(shí)用的應(yīng)用程序接口函數(shù)等。結(jié)語uC/OS-Ⅱ提供的僅僅是一個(gè)任務(wù)調(diào)度的內(nèi)核,將其移植到66uC/OS-II內(nèi)核擴(kuò)展的RTOS框圖uC/OS-II內(nèi)核擴(kuò)展的RTOS框圖67基于S3C44B0X的uC/OS移植SC06023001莫凡SC06023002鐘軼基于S3C44B0X的uC/OS移植SC06023001莫68主要內(nèi)容 基本概念uC/OS-Ⅱ在S3CEV40上的移植調(diào)試與測試主要內(nèi)容 基本概念69有關(guān)操作系統(tǒng)移植的三個(gè)問題什么情況下需要進(jìn)行移植操作系統(tǒng)?什么情況下需要移植實(shí)時(shí)操作系統(tǒng)?選擇什么樣的實(shí)時(shí)操作系統(tǒng)進(jìn)行移植?有關(guān)操作系統(tǒng)移植的三個(gè)問題什么情況下需要進(jìn)行移植操作系統(tǒng)?70問題1:操作系統(tǒng)的必要性為什么需要操作系統(tǒng)硬件資源的復(fù)雜,需要在應(yīng)用程序與硬件之間提供一個(gè)軟件層次以簡化開發(fā)資源的豐富,需要有專門的資源管理任務(wù)的增加,需要有系統(tǒng)來進(jìn)行任務(wù)的調(diào)度操作系統(tǒng)的功能設(shè)備訪問、資源管理、任務(wù)管理、統(tǒng)計(jì)及其他功能問題1:操作系統(tǒng)的必要性為什么需要操作系統(tǒng)71問題2:實(shí)時(shí)性的需求實(shí)時(shí)性指的是系統(tǒng)對(duì)于特定的事件的處理需要在要求的時(shí)間內(nèi)完成。從操作系統(tǒng)的角度來講,實(shí)時(shí)性指的系統(tǒng)的結(jié)構(gòu)能在多大程度上保證反映的速度早期的嵌入式操作系統(tǒng)幾乎都是實(shí)時(shí)操作系統(tǒng),但近年隨著一些手持通用計(jì)算機(jī)設(shè)備的出現(xiàn),使得現(xiàn)在的嵌入式操作系統(tǒng)有很多不需要實(shí)時(shí)性問題2:實(shí)時(shí)性的需求實(shí)時(shí)性指的是系統(tǒng)對(duì)于特定的事件的處理需要72問題2:實(shí)時(shí)性的需求(續(xù))是否需要完全取決于軟件項(xiàng)目的復(fù)雜程度要保證多個(gè)模塊的執(zhí)行時(shí)間并行的功能模塊比較多定時(shí)處理的功能比較多程序的執(zhí)行需要判斷很多條件參數(shù)或資源需要規(guī)劃代碼執(zhí)行的優(yōu)先順序要保證多個(gè)模塊的執(zhí)行時(shí)間問題2:實(shí)時(shí)性的需求(續(xù))是否需要完全取決于軟件項(xiàng)目的復(fù)雜程73問題3:RTOS的選擇內(nèi)核占用存儲(chǔ)區(qū)尺寸RTOS性能:任務(wù)切換時(shí)間、任務(wù)調(diào)度數(shù)、任務(wù)優(yōu)先級(jí)數(shù)開發(fā)調(diào)試工具易用性兼容性許可證形式問題3:RTOS的選擇內(nèi)核占用存儲(chǔ)區(qū)尺寸74uC/OS-Ⅱ簡介uC/OS-Ⅱ是美國一個(gè)名為JeanLabrosse的工程師開發(fā)的實(shí)時(shí)操作系統(tǒng)。它以小內(nèi)核、多任務(wù)、豐富的系統(tǒng)服務(wù)、容易使用等特點(diǎn)越來越受歡迎uC/OS-Ⅱ?qū)崟r(shí)系統(tǒng)的商業(yè)應(yīng)用非常廣泛,具有非常穩(wěn)定、可靠的性能,成功應(yīng)用于生命科學(xué)、航天工程等重大科研項(xiàng)目中。由于其極小的內(nèi)核,特別適用于對(duì)程序代碼存儲(chǔ)空間極其敏感的嵌入式系統(tǒng)開發(fā)uC/OS-Ⅱ是一款源碼公開的實(shí)時(shí)性操作系統(tǒng)uC/OS-Ⅱ簡介uC/OS-Ⅱ是美國一個(gè)名為JeanLa75uC/OS-Ⅱ的實(shí)時(shí)性“可剝奪內(nèi)核”與“不可剝奪內(nèi)核”的區(qū)分往往是RTOS與非實(shí)時(shí)嵌入式操作系統(tǒng)的區(qū)別所在uC/OS-Ⅱ是可剝奪型內(nèi)核,它總是讓就緒態(tài)的高優(yōu)先級(jí)的任務(wù)先運(yùn)行,并規(guī)定所有任務(wù)的優(yōu)先級(jí)必須不同,任務(wù)的優(yōu)先級(jí)同時(shí)也唯一的標(biāo)識(shí)了任務(wù)。uC/OS-Ⅱ的實(shí)時(shí)性“可剝奪內(nèi)核”與“不可剝奪內(nèi)核”的區(qū)分76uC/OS-Ⅱ的特點(diǎn)可移植性絕大部分uC/OS-Ⅱ的源代碼是用移植性很強(qiáng)的ANSIC寫的,和微處理器相關(guān)部分使用匯編語言寫的,且已經(jīng)壓到最低限度,可以在絕大部分8位,16位,32位,64位微處理器上,微控制器上和DSP上運(yùn)行可裁減用戶可以在應(yīng)用程序中通過語句#defineconstants來定義所需的uC/OS-Ⅱ功能模塊,以減少不必要的存儲(chǔ)器空間開支uC/OS-Ⅱ的特點(diǎn)可移植性77uC/OS-Ⅱ的特點(diǎn)(續(xù))占先式uC/OS-Ⅱ?qū)儆谕耆枷仁降膬?nèi)核,這意味著uC/OS-Ⅱ總是運(yùn)行就緒條件下優(yōu)先級(jí)最高的任務(wù)多任務(wù)可以管理64個(gè)任務(wù),支持56個(gè)用戶任務(wù),賦予每個(gè)任務(wù)的優(yōu)先級(jí)必須是不相同的,不支持時(shí)間片輪轉(zhuǎn)調(diào)度法uC/OS-Ⅱ的特點(diǎn)(續(xù))占先式78uC/OS-Ⅱ的特點(diǎn)(續(xù))中斷管理中斷可以使正在執(zhí)行的任務(wù)掛起,如果優(yōu)先級(jí)更高的任務(wù)被喚喚醒,則高優(yōu)先級(jí)的任務(wù)再中斷嵌套全部推出后立即執(zhí)行,中斷嵌套可達(dá)255層其它公開源代碼、可固化、可確定性、任務(wù)棧、提供很多系統(tǒng)服務(wù)、穩(wěn)定性和可靠性強(qiáng)uC/OS-Ⅱ的特點(diǎn)(續(xù))中斷管理79uC/OS-Ⅱ內(nèi)核中的概念臨界區(qū)(共享資源的保護(hù)手段)任務(wù)和任務(wù)的狀態(tài)任務(wù)的控制塊任務(wù)的調(diào)度任務(wù)的切換過程時(shí)鐘節(jié)拍uC/OS-Ⅱ的中斷uC/OS-Ⅱ的初始化和啟動(dòng)uC/OS-Ⅱ內(nèi)核中的概念臨界區(qū)(共享資源的保護(hù)手段)80uC/OS-Ⅱ文件體系結(jié)構(gòu)uC/OS-Ⅱ文件體系結(jié)構(gòu)81uC/OS-Ⅱ在S3CEV40上的移植所謂移植,就是使一個(gè)實(shí)時(shí)操作系統(tǒng)能夠在某個(gè)微處理器平臺(tái)或微控制器上運(yùn)行,在移植之前,先要了解移植uC/OS-Ⅱ到處理器上必須滿足的條件。uC/OS-Ⅱ在S3CEV40上的移植所謂移植,就是使一個(gè)實(shí)82移植條件處理器的C編譯器能產(chǎn)生可重入代碼用C語言可打開和關(guān)閉中斷處理器支持中斷并且能產(chǎn)生定時(shí)中斷處理器支持能夠容納一定量數(shù)據(jù)的硬件棧處理器有將堆棧指針和其它CPU寄存器讀出和存儲(chǔ)到堆棧或內(nèi)存中的指令移植條件處理器的C編譯器能產(chǎn)生可重入代碼83移植條件(續(xù))對(duì)于S3C44BOX來說,上面的這些條件都是可以滿足的。開發(fā)工具采用EmbestIDEforARM,可以生成可重入代碼;在ARM7TDMl的處理器上可以產(chǎn)生定時(shí)器中斷;開/關(guān)中斷可以通過設(shè)置相應(yīng)寄存器來實(shí)現(xiàn);ARM7TDMl核的處理器支持容納一定量數(shù)據(jù)的硬件堆棧且具有有關(guān)的堆棧指令。移植條件(續(xù))對(duì)于S3C44BOX來說,上面的這些條件都是可84移植過程由uC/OS-Ⅱ的文件體系結(jié)構(gòu)可知,移植的主要工作就是修改與CPU相關(guān)的三個(gè)文件修改OS_CPU.H文件修改OS_CPU_A.ASM文件修改OS_CPU_C.C文件移植過程由uC/OS-Ⅱ的文件體系結(jié)構(gòu)可知,移植的主要工作就85修改OS_CPU.H文件該部分主要完成基本的配置和定義,包括:定義與編譯器相關(guān)的數(shù)據(jù)類型定義使能和禁止中斷宏定義棧的增長方向定義OS_TASK_SW宏修改OS_CPU.H文件該部分主要完成基本的配置和定義,包括86定義數(shù)據(jù)類型uC/OS-II有8種整數(shù)數(shù)據(jù)類型:INT8U無符號(hào)8位整數(shù)INT8S有符號(hào)8位整數(shù)INT16U無符號(hào)16位整數(shù)INT16S有符號(hào)16位整數(shù)INT32U無符號(hào)32位整數(shù)INT32S有符號(hào)32位整數(shù)他們需要同編譯器中的數(shù)據(jù)類型相匹配。定義數(shù)據(jù)類型uC/OS-II有8種整數(shù)數(shù)據(jù)類型:87定義數(shù)據(jù)類型(續(xù))匹配方法:TypedefunsignedcharINT8UTypedefsignedcharINT8UTypedefunsignedintINT16UTypedefsignedintINT16STypedefsignedlongINT32STypedefINT32UintOS_STK;TypedefINT16UOS_CPU_SR;定義數(shù)據(jù)類型(續(xù))匹配方法:88定義使能和禁止中斷宏定義OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL();uC/OS-II使用這兩個(gè)語句開關(guān)中斷,開關(guān)中斷具體指令和方式需要根據(jù)不同的處理器來編寫和選擇。定義使能和禁止中斷宏定義89定義使能和禁止中斷宏(續(xù))使用場合執(zhí)行臨界代碼段時(shí)cpu不容許被打斷,因此在臨界代碼段前后添加兩個(gè)函數(shù)來保護(hù)臨界代碼段。{OS_ENTER_CRITICAL();/*uc/OS-II臨界代碼段*/OS_EXIT_CRITICAL();}定義使能和禁止中斷宏(續(xù))使用場合90開關(guān)中斷的方式uC/OS-II定義了三種開關(guān)中斷的方法:方法一直接開,直接關(guān)。方法二直接開,利用psw恢復(fù)。方法三直接開,利用局部變量恢復(fù)psw的內(nèi)容。究竟選擇那種方法跟編譯器和處理器有關(guān),三種方法各有優(yōu)劣。開關(guān)中斷的方式uC/OS-II定義了三種開關(guān)中斷的方法:91方式一方法一的示意程序#defineOS_ENTER_CRITICAL()disable_int()#defineOS_EXIT_CRITICAL()enable_int()方式一方法一的示意程序92方式一(續(xù))使用方法一的場合處理器相應(yīng)的編譯器只能使用某條指令開中斷或關(guān)中斷方法一存在問題如果在禁止中斷的情況下調(diào)用uC/OS-II函數(shù),那么從uC/OS-II函數(shù),那么從uC/OS-II返回時(shí)中斷可能就允許了。方式一(續(xù))使用方法一的場合93方式二方式二的示意程序#defineOS_ENTER_CRITICAL()Asm(“PUSHPSW”);Asm(“DI”);#defineOS_EXIT_CRITICAL()Asm(“poppsw”)方式二方式二的示意程序94方式二(續(xù))使用方式二的場合:處理器及相應(yīng)的編譯器有從PSW中恢復(fù)相應(yīng)的中斷狀態(tài)的語句。優(yōu)點(diǎn):保證臨界段代碼執(zhí)行時(shí)中斷關(guān)閉,執(zhí)行完畢恢復(fù)原先開關(guān)中斷的狀態(tài)。方式二(續(xù))使用方式二的場合:95方式三方法三的示意程序:#defineOS_ENTER_CRITICAL()Cpu_sr=get_processor_psw();Disable_interrupts()OS_CRITICAL()enable_int()方式三方法三的示意程序:96方式三(續(xù))使用方式二的場合:處理器及相應(yīng)的編譯器有從PSW中恢復(fù)相應(yīng)的中斷狀態(tài)的語句。但需要使用局部變量。注意事項(xiàng)用戶在編寫應(yīng)用程序中開關(guān)中斷必須添加相應(yīng)的聲明和語句。方式三(續(xù))使用方式二的場合:97方式三(續(xù))添加聲明和語句的示意程序:VoidSom_uCOS_II_Service(arguments){OS_CPU_SRcpu_srCpu_sr=get_processor_psw();Disable_interrupts()/*臨界段代碼*/Set_processor_psw()}方式三(續(xù))添加聲明和語句的示意程序:98三種方式的選擇三種方式比較:方法二最好,但需要處理器和編譯器的支持。方法的選擇:使用S3C44B0X處理器及GCC編譯器具備使用方法二的條件。三種方式的選擇三種方式比較:99定義堆棧增長方向OS_CPU.H中的相關(guān)代碼:#defineOS_STK_GROWTH0表示堆棧從下往上生長;#defineOS_STK_GROWTH1表示堆棧從上往下生長;堆棧增長方向的選擇:該選項(xiàng)跟處理器和編譯器有關(guān)。雖然ARM處理器核對(duì)于兩種方式都支持,但GCC的C語言編譯器僅支持從上往下生長,故選1。定義堆棧增長方向OS_CPU.H中的相關(guān)代碼:100定義OS_TASK_SW()宏OS_TASK_SW()函數(shù)被調(diào)用的場合OS_TASK_SW()宏是uC/OS-II從低優(yōu)先級(jí)切換到最高優(yōu)先級(jí)任務(wù)時(shí)被調(diào)用的。如果處理器支持軟中斷,則可使用軟中斷將中斷向量指向OSCtx-SW()函數(shù);或者直接調(diào)用OSCtxSW()函數(shù)。定義OS_TASK_SW()宏OS_TASK_SW()函數(shù)被101修改OS_CPU_A.ASM文件OS_CPU_A.ASM匯編代碼文件有4個(gè)匯編函數(shù)需要移植。OSStartHighRdy()_多任務(wù)執(zhí)行時(shí)的最高優(yōu)先級(jí)任務(wù)切換OSCtxSw()_任務(wù)完成任務(wù)切換OSIntCtxSw()_中斷退出任務(wù)切換OSTickISR()_節(jié)拍中斷處理修改OS_CPU_A.ASM文件OS_CPU_A.ASM匯編102OSStartHighRdy()OSStartHighRdy()函數(shù)是在OSStart()多任務(wù)啟動(dòng)之后,負(fù)責(zé)從最高優(yōu)先級(jí)任務(wù)的TCB控制塊中獲得該任務(wù)的堆棧指針,并通過SP,并通過SP依次將CPU現(xiàn)場恢復(fù)。這時(shí)系統(tǒng)將控制權(quán)交給用戶創(chuàng)建的任務(wù)進(jìn)程,直到該任務(wù)被阻塞或者被其他更高優(yōu)先級(jí)的任務(wù)搶占CPU。該函數(shù)僅僅在多任務(wù)啟動(dòng)時(shí)被執(zhí)行一次,用來啟動(dòng)最高優(yōu)先級(jí)的任務(wù)執(zhí)行。OSStartHighRdy()OSStartHighR103OSCtxSw()該函數(shù)由OS_TAST_SW宏調(diào)用,OS_TAST_SW()由OSSched()函數(shù)調(diào)用,OSSched()函數(shù)負(fù)責(zé)任務(wù)之間的調(diào)度。OSCtxSw()函數(shù)的工作是,先將當(dāng)前任務(wù)的CPU現(xiàn)場保存到然后獲得最高優(yōu)先級(jí)任務(wù)的指針,并從該堆棧中恢復(fù)此任務(wù)的CPU現(xiàn)場,使之繼續(xù)執(zhí)行。該函數(shù)就完成了一次任務(wù)切換。OSCtxSw()該函數(shù)由OS_TAST_SW宏調(diào)用,OS_104OSIntCtxSw()該函數(shù)由OSIntExit()調(diào)用。由于中斷可能會(huì)使更高優(yōu)先級(jí)的任務(wù)進(jìn)入就緒態(tài),因此,為了更高優(yōu)先級(jí)的任務(wù)能立即運(yùn)行,在中斷服務(wù)子程序的最后,OSIntExit()函數(shù)會(huì)調(diào)用OSIntCtxSw()做任務(wù)切換。這樣做的目的主要是能夠盡快地讓高優(yōu)先級(jí)的任務(wù)得到響應(yīng),保證系統(tǒng)的實(shí)時(shí)性能。OSIntCtxSW()與OSCtxSw()都是用于任務(wù)切換的函數(shù),其區(qū)別在于,在OSIntCtxSw()中無需再保存CPU寄存器,因?yàn)樵谡{(diào)用OSInCtxSw()之前已發(fā)生了中斷,OSIntCtxSw()已將默認(rèn)的cpu寄存器保存到了被中斷的任務(wù)級(jí)堆棧中。OSIntCtxSw()該函數(shù)由OSIntExit()調(diào)用。105OSTickISR()時(shí)鐘節(jié)拍是特定的周期性中斷,是由硬件定時(shí)器產(chǎn)生的。這個(gè)中斷可看作是系統(tǒng)心臟的脈動(dòng)。時(shí)鐘的節(jié)拍式中斷使得內(nèi)核可將任務(wù)延時(shí)若干個(gè)整數(shù)時(shí)鐘節(jié)拍,以及當(dāng)任務(wù)等待事件發(fā)生時(shí),提供等待超時(shí)的依據(jù)。時(shí)鐘節(jié)拍的頻率越高,系統(tǒng)的額外開銷就越大。中斷間的時(shí)間間隔取決于不同的應(yīng)用。OSTickISR()時(shí)鐘節(jié)拍是特定的周期性中斷,是由硬件定106OSTickISR()(續(xù))OSTickISR()首先將CPU寄存器的值保存在被中斷任務(wù)的堆棧中,之后調(diào)用OSIntEnter()。隨后,OSTickISR()調(diào)用OSTimeTick(),檢查所用處于延時(shí)等待狀態(tài)的任務(wù)。OSTimeTick(),檢查所有處于延時(shí)等待狀態(tài)的任務(wù),判斷是否有延時(shí)結(jié)束的就緒的任務(wù)。OSTickISR()最后調(diào)用OSIntExit(),如果在中斷中(或其他嵌套的中斷)有更高優(yōu)先級(jí)的任務(wù)就緒,并且當(dāng)前中斷為嵌套的最后一層,那么OSIntExit()將進(jìn)行任務(wù)調(diào)度。OSTickISR()(續(xù))OSTickISR()首先將CP107修改OS_CPU_C.C文件什么是鉤子函數(shù)操作系統(tǒng)在特殊時(shí)刻調(diào)用用來補(bǔ)充擴(kuò)展uC/OS操作系統(tǒng)功能修改OS_CPU_C.C文件什么是鉤子函數(shù)108OS_CPU_C.C中的鉤子函數(shù)OSTaskStkInit()OSInitHookBegin()OSInitHookEnd()OSTaskCreatHook()OSTaskDelHook()OSTaskSwHook()OSTaskStatHook()OSTCBInitHook()OSTimeTickHook()OSTaskIdleHook()uC/OS-II中的鉤子函數(shù)共有十個(gè)OS_CPU_C.C中的鉤子函數(shù)OSTaskStkInit(109OSTaskStkInit()這是將UC/OS-II移植到S3C44B0X上唯一必須編寫的鉤子函數(shù)這個(gè)函數(shù)在任務(wù)創(chuàng)建時(shí)被調(diào)用,負(fù)責(zé)初始化任務(wù)的堆棧結(jié)構(gòu)并返回新的堆棧指針。OSTaskStkInit()這是將UC/OS-II移植到S110OSTaskCreatHook()調(diào)用者OSTaskCreat()OSTaskCreatExt()調(diào)用時(shí)中斷是禁止的,所以要減少代碼。OSTaskCreatHook()調(diào)用者111OSTaskDelHook()調(diào)用場合任務(wù)被刪除時(shí)。用途被調(diào)用時(shí)會(huì)收到指向被刪除任務(wù)的OS_TCB的指針,這樣它就可訪問所有的結(jié)構(gòu)成員了。用來檢驗(yàn)TCB擴(kuò)展是否被建立了,并進(jìn)行清除操作。OSTaskDelHook()調(diào)用場合112OSTaskSwHook()調(diào)用者OSCtxSw()OSIntCtxSw()功能能夠訪問OSTCBCur和OSTCBHighRdy這兩個(gè)變量分別指向被切換出去的任務(wù)和新任務(wù)注意該函數(shù)執(zhí)行時(shí)中斷是關(guān)掉的。OSTaskSwHook()調(diào)用者113OSTaskStatHook()調(diào)用者OSTaskStatHook()功能可以擴(kuò)展統(tǒng)計(jì)功能。OSTaskStatHook()調(diào)用者114OSTimeTickHook()調(diào)用場合每個(gè)時(shí)鐘節(jié)拍中斷,OSTimeTick()之前調(diào)用功能優(yōu)先處理緊急任務(wù)OSTimeTickHook()調(diào)用場合115OSInitHookBegin()調(diào)用場合OSInt()剛進(jìn)入時(shí)調(diào)用功能讓用戶自己擴(kuò)充初始化功能。OSInitHookBegin()調(diào)用場合116OSInitHookEnd()調(diào)用場合OSInt()剛返回時(shí)調(diào)用功能讓用戶自己擴(kuò)充初始化功能。OSInitHookEnd()調(diào)用場合117OSTCBInitHook()調(diào)用者OS_TCBInit()在調(diào)用OSTaskCreatHook()之前,會(huì)現(xiàn)調(diào)用OSTCBInitHook().功能能夠做初始化功能塊OS_TCB。OSTCBInitHook()調(diào)用者118OSTaskIdleHook()調(diào)用者OSTaskIdle()功能能實(shí)現(xiàn)無任務(wù)時(shí)進(jìn)入cpu的功耗模式后面的調(diào)試也將用到該函數(shù)。OSTaskIdleHook()調(diào)用者119uC/OS-II的調(diào)試調(diào)試的任務(wù)驗(yàn)證調(diào)試系統(tǒng)驗(yàn)證OSTaskStkInit()和OSStartHighRdy()驗(yàn)證OSCtxSw()函數(shù)驗(yàn)證OSIntCtx()函數(shù)uC/OS-II的調(diào)試調(diào)試的任務(wù)120調(diào)試涉及到的文件用戶調(diào)試編寫的測試文件TEST.C測試主程序,程序從此運(yùn)行OS_CFG.HuC/OS-II的注冊表INCLUDES.H各種庫OS_CFG.HOS_CPU.HUCOS_ii.h
調(diào)試涉及到的文件用戶調(diào)試編寫的測試文件121OS_CFG.H各種定義事件標(biāo)志消息郵箱內(nèi)存管理互斥型信號(hào)量消息隊(duì)列信號(hào)量任務(wù)管理時(shí)間管理OS_CFG.H各種定義122調(diào)試涉及到的文件移植須編寫的文件OS_CPU_A.ASMOS_CPU_C.COS_CPU.H調(diào)試涉及到的文件移植須編寫的文件123調(diào)試涉及到的文件與移植無關(guān)的Uc/os-II文件OS_CORE.COS_FLAG.COS_MBOX.COS_
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 教師招聘語文面試唐詩三首教學(xué)設(shè)計(jì)
- 兩位好友合作經(jīng)營店鋪合同模板
- 個(gè)人與個(gè)人借款合同范本
- 中外合資企業(yè)采購合同中英文對(duì)照
- 中外合資經(jīng)營企業(yè)合同(適用于零售連鎖業(yè)務(wù))
- 個(gè)人二手房交易合同擔(dān)保協(xié)議書
- 專利交易合同協(xié)議
- 個(gè)人向企業(yè)借款合同樣板
- 個(gè)人與公司合作承包項(xiàng)目合同
- 專業(yè)帶小孩勞動(dòng)合同范本
- 2025集團(tuán)公司內(nèi)部借款合同范本
- 2023高考語文文言文復(fù)習(xí):《說苑》練習(xí)題(含答案解析)
- 老人心理特征和溝通技巧
- 幼兒阿拉伯?dāng)?shù)字描紅(0-100)打印版
- 標(biāo)桿地產(chǎn)集團(tuán) 研發(fā)設(shè)計(jì) 工程管理 品質(zhì)地庫標(biāo)準(zhǔn)研發(fā)成果V1.0
- TMS開發(fā)業(yè)務(wù)需求文檔
- 2023年1月浙江高考英語聽力試題及答案(含MP3+錄音原文)
- HI-IPDV10芯片產(chǎn)品開發(fā)流程V10宣課件
- 房產(chǎn)抵押注銷申請表
- 【課件】第三課 蒙娜麗莎 課件高中美術(shù)湘美版美術(shù)鑒賞
- A320系列飛行訓(xùn)練課程:電子飛行儀表系統(tǒng)概況
評(píng)論
0/150
提交評(píng)論