新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 移植ucosii遇到的問題 B OSStartHang

        移植ucosii遇到的問題 B OSStartHang

        作者: 時間:2016-11-27 來源:網(wǎng)絡(luò) 收藏
        ucosii在STM32rbt6上可以正常地運行,工作需要,我將ucosii移植到STM32F103C8T6,更換了一下啟動代碼,結(jié)果程序 開始調(diào)度時就死在

        那了 OSStart(); 進去后
        void OSStart (void)
        {
        if (OSRunning == OS_FALSE) {
        OS_SchedNew();
        OSPrioCur = OSPrioHighRdy;
        OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy];
        OSTCBCur = OSTCBHighRdy;
        OSStartHighRdy();
        }
        }停在黑色加粗,通過調(diào)試找到匯編代碼.asm里邊
        OSStartHang
        B OSStartHang 這個位置。
        網(wǎng)上搜索后有網(wǎng)友提供答案
        關(guān)于STM32F107VC _OSStartHang解決方案
        問題:移植UCOS-II后,程序總是在
        B OSStartHang ,//根據(jù)提示,應(yīng)當(dāng)永遠(yuǎn)不會到這步的。
        其實很簡單,因為STM32本身的異常中斷PendSV_Handler替代了UCOS的異常中斷OSPendSV,使其不能正常執(zhí)行。這樣我們就需要更改

        本文引用地址:http://www.104case.com/article/201611/322263.htm

        PendSV_Handler為OSPendSV以讓中斷正常。
        第一種
        更改startup_stm32f10x_cl.s(V3.5.版本)
        1、DCD PendSV_Handler ; PendSV Handler
        更改為:
        DCD OSPendSV ; OSPendSV 中斷
        2、PendSV_Handler PROC
        EXPORT PendSV_Handler [WEAK]
        B .
        ENDP
        更改為:
        OSPendSV PROC
        EXPORT OSPendSV [WEAK]
        B .
        ENDP
        第二種: —startup_stm32f10x_cl.s中定義了中斷向量表(中斷函數(shù)的入口地址)
        —stm32f10x_it.c 中斷服務(wù)函數(shù)的C語言代碼。
        在startup_stm32f10x_cl.s中有兩段代碼如下:
        DCD PendSV_Handler
        DCD SysTick_Handler
        在stm32f10x_it.c中的服務(wù)函數(shù)如下
        void PendSV_Handler(void)
        void SysTick_Handler(void)
        1:ucos系統(tǒng)中斷函數(shù)更名為PendSV_Handler,注釋掉stm32f10x_it.c文件中void PendSV_Handler(void)函數(shù)。
        2:在void SysTick_Handler(void)函數(shù)中添加如下代碼:
        void SysTick_Handler(void)
        {
        OS_CPU_SR cpu_sr;
        OS_ENTER_CRITICAL(); // Tell uC/OS-II that we are starting an ISR
        OSIntNesting++;
        OS_EXIT_CRITICAL();
        OSTimeTick(); // Call uC/OS-II’s OSTimeTick()
        OSIntExit(); // Tell uC/OS-II that we are leaving the ISR
        }
        ================================================
        之前一直使用的stm32f10x_it.c中的PendSV_Handler函數(shù)里調(diào)用OSPendSV()的方式突然不好用了,可能和升級了IAR6有關(guān)系,之前一直使用

        的是IAR5.4。
        參照上述操作,已經(jīng)好用了,有些差別用的startup_stm32f10x_cl.s V3.1.2版本。
        DCD OSPendSV ; PendSV Handler
        PUBWEAK OSPendSV
        SECTION .text:CODE:REORDER(1)
        OSPendSV
        B OSPendSV



        評論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 兴文县| 张掖市| 临夏市| 罗平县| 宣汉县| 襄城县| 巴彦淖尔市| 霍山县| 西华县| 什邡市| 吴桥县| 金寨县| 闽清县| 济宁市| 广平县| 太原市| 阳高县| 和政县| 琼结县| 大足县| 林芝县| 樟树市| 乌鲁木齐县| 鄂温| 泽库县| 从江县| 吴川市| 汤原县| 云南省| 临江市| 当雄县| 田阳县| 卢龙县| 紫金县| 和硕县| 张家港市| 大关县| 丹寨县| 昌吉市| 阜城县| 阿拉善左旗|