• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > μC/OS-II系統在AVM處理器上的移植

    μC/OS-II系統在AVM處理器上的移植

    作者: 時間:2013-04-12 來源:網絡 收藏

    *--stk=(unsigned int)task; /*lr*/

    *--stk=(unsigned int)task /*pc*/

    *--stk=0; /*r12*/

    *--stk=0; /*r11*/

    *--stk=0; /*r10*/

    *--stk=0; /*r9*/

    *--stk=0; /*r8*/

    *--stk=0; /*r7*/

    *--stk=0; /*r6*/

    *--stk=0; /*r5*/

    *--stk=0; /*r4*/

    *--stk=0; /*r3*/

    *--stk=0; /*r2*/

    *--stk=0; /*r1*/

    *--stk=(unsigned int)pdata; /*r0*/

    *--stk=(SVC32MODE0x0); /*cpsr IRQ,

    *--stk=(SVC32MODE0x0); /*spsr IRQ,關閉FIQ*/

    return((void*)stk);

    }

    后5個函數是鉤子函數,可以不加代碼:

    void OSTaskCreateHook(OS_TCB *ptcb)

    void OSTaksDelHool (OS_TCB *ptcb)

    void OSTaskSwHook(void)

    void OSTaskStatHook(void)

    (3)用匯編語言編寫4個與處理器相關的函數(OS_CPU.ASM)

    OSStartHighRdy() ;運行優先級最高的就緒任務

    LDR r4,addr_OSTCBCur ;得到當前任務的TCB地址

    LDR r5,addr_OSTCBHighRdy ;得到高優先級任務的TCB地址

    LDR r5,addr_OSTCBHighRdy ;得到高優先級任務的TCB地址

    LDR r5,[r5] ;得到堆棧指針

    LDR sp,[r5] ;切換到新的堆棧

    STR r5,[r4] ;設置新的當前任務的TCB地址

    LDMFD sp!,{r4}

    MSR CPSR_cxsf,r4

    LDMFD sp!,{r0-r12,lr,pc} ;開始新的任務

    END

    OSCtxsw() 任務級的任務切換函數

    STMFD sp!,{lr} ;保存PC指針

    STMFD sp!,{lr} ;保存lr指針

    STMFD sp!,{r0-r12} ;保存寄存器文件和返回地址

    MRS r4,CPSR

    STMFD sp!,{r4} ;保存當前PSR

    MRS r4,SPSR

    STMFD sp!,{r4}

    ;OSPrioCur=OSPrioHighRdy

    LDR r4,addr_OSPrioCur

    LDR r5,addr_OSPrioHighRdy

    LDRB r6,[r5]

    STRB r6,[r4]

    ;得到當前任務的TCB地址

    LDR r4,addr_OSTCBCur

    LDR r5,[r4]

    STR sp,[r5] ;保存棧指針在占先任務的TCB上

    ;取得高優先級任務的TCB地址



    關鍵詞: μCOS-II S3C44BOX 移植

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 梁山县| 壶关县| 兰州市| 凤城市| 兰溪市| 城口县| 缙云县| 板桥市| 西丰县| 云和县| 荆门市| 信丰县| 洛宁县| 东明县| 德保县| 射洪县| 延津县| 会同县| 河西区| 宁河县| 锡林郭勒盟| 宁海县| 鱼台县| 临猗县| 天长市| 龙山县| 会东县| 温宿县| 贵南县| 石屏县| 图木舒克市| 疏勒县| 聂荣县| 颍上县| 六枝特区| 榆林市| 迁安市| 孟州市| 襄樊市| 湟源县| 宜都市|