<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

UCOS移植心得

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


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

_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//如果不需要則直接返回

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

KAI1:POP R1,R5 FROM [SP]

RETI

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

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

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


我自己寫(xiě)的中斷函數是針對凌陽(yáng)的,代碼如下:


_IRQ6:

PUSH R1,R5 TO [SP]

R1=0x0002

[P_INT_Clear]=R1//清中斷標志



CALL _Clear_Dog//俗稱(chēng)喂狗



R1=[_OSIntNesting]

R1+=1

[_OSIntNesting]=R1

CMP R1,1

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

R1=[_InterruptC]//如果沒(méi)有嵌套,則保存當前任務(wù)的中斷計數器

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

R2=[_OSTCBCur]

[R2]=SP


TCB:CALL _OSTimeTick

CALL _OSIntExit


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

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

JNE TCB1//如果發(fā)生過(guò),則沒(méi)有保存中斷計數器

POP R1 FROM [SP]//否則需要彈出中斷計數器調整堆棧指針

[_InterruptC]=R1

TCB1:POPR1,R5 FROM [SP]

RETI


OS_CPU.H:

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

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


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

上一頁(yè) 1 2 下一頁(yè)

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

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>