在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            UCOS移植心得

            作者: 時(shí)間:2016-11-27 來源:網(wǎng)絡(luò) 收藏


            然后是OSIntCtxSw():完成中斷級(jí)任務(wù)切換,大部分和上一個(gè)函數(shù)一樣

            _OSIntCtxSw:

            CALL _OSTaskSwHook




            //OSUCBCur=OSTCBHighRdy

            R1=_OSTCBCur

            R2=[_OSTCBHighRdy]

            [R1]=R2



            //OSPrioCur=OSPrioHighRdy

            R1=[_OSPrioHighRdy]

            [_OSPrioCur]=R1



            R1=[_OSTCBHighRdy]

            SP=[R1]



            POP R1 FROM [SP]

            [_InterruptC]=R1

            CMP R1,0//查看是否需要關(guān)中斷處理

            JE KAI1//如果不需要?jiǎng)t直接返回

            IRQ OFF//需要就關(guān)中斷

            KAI1:POP R1,R5 FROM [SP]

            RETI

            還有一個(gè)是OSTickISR():

            這個(gè)函數(shù)其實(shí)不是必須叫這個(gè)名字,可以根據(jù)具體情況改變的,在uCOS_II.h里面關(guān)于函數(shù)原型的部分可以看到,它的原型是條件編譯的,只要你定義一個(gè)OS_ISR_PROTO_EXT,編譯器就不會(huì)再去編譯這個(gè)原型了,定義OS_ISR_PROTO_EXT意味著你告訴編譯器你將自己另寫中斷函數(shù)的,不再使用OSTickISR(),同時(shí)由于OSCtxSw()和OSTickISR()使用相同的

            條件編譯,你還必須再自己在OS_CPU.H里面寫一條語句:#defineOS_TASK_SW()OSCtxSw();這樣的話,就在任務(wù)切換時(shí)將調(diào)用你編寫的函數(shù)(不過我開始沒有定義那個(gè)OS_ISR_PROTO_EXT時(shí)也沒有出現(xiàn)問題,所以這塊我也不太肯定)


            我自己寫的中斷函數(shù)是針對(duì)凌陽的,代碼如下:


            _IRQ6:

            PUSH R1,R5 TO [SP]

            R1=0x0002

            [P_INT_Clear]=R1//清中斷標(biāo)志



            CALL _Clear_Dog//俗稱喂狗



            R1=[_OSIntNesting]

            R1+=1

            [_OSIntNesting]=R1

            CMP R1,1

            JNE TCB//查看是否發(fā)生中斷嵌套,

            R1=[_InterruptC]//如果沒有嵌套,則保存當(dāng)前任務(wù)的中斷計(jì)數(shù)器

            PUSH R1 TO [SP]//及任務(wù)堆棧地址

            R2=[_OSTCBCur]

            [R2]=SP


            TCB:CALL _OSTimeTick

            CALL _OSIntExit


            R1=[_OSIntNesting]//如果能執(zhí)行到此,則說明不需要任務(wù)切換

            CMP R1,0//查看是否發(fā)生過中斷嵌套

            JNE TCB1//如果發(fā)生過,則沒有保存中斷計(jì)數(shù)器

            POP R1 FROM [SP]//否則需要彈出中斷計(jì)數(shù)器調(diào)整堆棧指針

            [_InterruptC]=R1

            TCB1:POPR1,R5 FROM [SP]

            RETI


            OS_CPU.H:

            在這個(gè)文件里面主要就是定義數(shù)據(jù)類型,一樣的數(shù)據(jù)不同的CPU有不同的位數(shù),在這里就是要定義移植過程中的數(shù)據(jù)位數(shù)問題,還有就是定義堆棧的生長(zhǎng)方式,及OS_ENTER_CRITICAL( ),OS_EXIT_CRITICAL( ),OS_TASK_SW( ),也都是比較簡(jiǎn)單的問題,比較容易處理,不多廢話

            雖然說編譯器有時(shí)候出些莫名其妙的問題,但我還是要說用好你的IDE真的是太重要了,象我在開始時(shí)老有問題,我不知道到底哪有毛病,懷疑是在保存堆棧指針時(shí)有問題,因?yàn)槟且粔K盡是一堆的指針操作,我開始不知道怎么用那個(gè)變量查看窗口,就沒辦法確定我是否操作正確,最后比不得已,弄了半天學(xué)會(huì)了,通過那個(gè)窗口查看變量后,才確定自己真的是錯(cuò)在那了……


            再有一個(gè)小小的經(jīng)驗(yàn)就是像這種比較大的東西你要step調(diào)試真的很暈,我是自己搭了個(gè)小小的測(cè)試平臺(tái)(其實(shí)就是8個(gè)發(fā)光二極管),連到B口,建立任務(wù)直接看結(jié)果,很簡(jiǎn)單,但真的很管用!

            上一頁 1 2 下一頁

            關(guān)鍵詞: UCOS移植心

            評(píng)論


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

            關(guān)閉