新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > μC/OS-Ⅱ在ARM系列單片機S3C44B0x上的移植

        μC/OS-Ⅱ在ARM系列單片機S3C44B0x上的移植

        作者: 時間:2016-12-02 來源:網絡 收藏




        (2)移植OS_CPU_C.C文件

        在該文件中需要編寫10個簡單的C函數它們分別是:



        在這些函數中惟一必須需要編寫的函數是OSTa-skStkInit(),其他9個函數必須要聲明,但不一定要包含任何代碼。OSTaskCreate()和OSTaskCreateExt()通過調用OSTaskStkInit()函數來初始化任務的堆棧結構,因此,堆棧看起來就像剛發生過中斷,并將所有的寄存器都保存到堆棧中的情形一樣。OSTaskStkInit()的程序代碼如下:



        (3)移植OS_CPU_A.ASM文件

        在移植OS_CPU_A.ASM文件時,要求用戶編寫4個簡單的匯編語言函數,它們分別是:OS-StartHighRdy(),OSCtxSw(),OSIntCtxSw(),OS-TickISR()。

        ①OSStartHighRdy():運行最高優先級的就緒任務。此函數僅在多任務啟動時執行一次,用來啟動第1個(也就是最高優先級)任務運行。它的程序代碼如下:



        ②OSCtxSw():任務級任務切換函數。實現CPU在正常運行時任務間的切換,完成對當前任務堆棧的保存和對最高優先級任務堆棧的彈出,使最高優先級的任務得到運行。

        ③OSIntCtxSw():中斷級的任務切換函數。在中斷服務程序執行完后,如果中斷使得更高優先級的任務處于就緒狀態,則該函數實現對任務的切換:保存中斷發生之前的那個任務的執行現場.恢復已處于就緒態的那個更高優先級任務的執行現場,使優先級更高的那個任務得以運行,從而完成對任務的切換。

        ④OSTickISR():是系統時鐘的中斷服務函數。該函數的主要功能是檢查是否有由于延時而被掛起的任務轉為就緒態。如果有,則調用OSIntCtxSw()函數進行任務切換,使已處于就緒態的且具有最高優先級的任務運行。

        4 測試移植代碼

        為S3C44B0x移植好μC/OS-Ⅱ后,緊接著的工作就是驗證移植好的μC/OS-II是否能正常工作。在這里采用不加任何應用程序代碼的方法測試移植好的μC/OS-Ⅱ,這樣做有兩個優點:使測試移植代碼的工作變得更簡單;如果有部分,μC/OS-II代碼不能正常工作,可以明白是被移植代碼本身的問題,而不是應用代碼產生的問題。通過四個步驟來完成對移植代碼的測試:確保C編譯器、匯編編譯器及鏈接器正常工作;驗證OSTaskStkInit()和OSStartHighRdy()函數;驗證OSCtxSw()函數;驗證OSIntCtxSw()和OSTick-ISR()函數。經測試,以上四個測試過程均能正常通過,表明被移植到ARM系列單片機S3C44B0x中的μC/OS-Ⅱ操作系統已經能正常工作了。

        5 結束語

        μC/OS-II是一種可配置、可裁剪的嵌入式實時操作系統,現已被廣泛的移植應用到多種處理器當中。這里成功地將μC/OS-Ⅱ移植到了ARM系列單片機S3C44B0x中,經測試,移植好的μC/OS-Ⅱ代碼能正常的在S3C44B0x處理器中穩定運行。

        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 高尔夫| 繁峙县| 唐山市| 金湖县| 旺苍县| 连州市| 达州市| 靖西县| 赣州市| 虹口区| 专栏| 弥勒县| 郎溪县| 嫩江县| 临夏县| 内黄县| 喀什市| 宁都县| 东乌| 天等县| 恭城| 侯马市| 济南市| 仪陇县| 蚌埠市| 丘北县| 叶城县| 图木舒克市| 潜江市| 嘉黎县| 三台县| 阿拉尔市| 元氏县| 合水县| 理塘县| 邵武市| 锡林郭勒盟| 深水埗区| 永仁县| 龙泉市| 米脂县|