欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: UCOSII中任務(wù)堆棧如何具體的實(shí)現(xiàn)保存CPU寄存器的值? [打印本頁(yè)]

作者: sayato    時(shí)間: 2017-1-11 21:32
標(biāo)題: UCOSII中任務(wù)堆棧如何具體的實(shí)現(xiàn)保存CPU寄存器的值?
小弟剛剛學(xué)習(xí)UCOS-II,問(wèn)題可能比較low,請(qǐng)各位大神不吝賜教,感激不盡。


如題所說(shuō),UCOS中穿件任務(wù)時(shí)都會(huì)調(diào)用到一個(gè)函數(shù)OSTaskStkInit(),該函數(shù)位于os_cpu_c.c
該函數(shù)將任務(wù)創(chuàng)建時(shí) 開(kāi)辟的任務(wù)堆棧的棧頂指針傳遞進(jìn)來(lái),以后任務(wù)堆棧就會(huì)保存在這塊內(nèi)存對(duì)吧,
問(wèn)1,我想,說(shuō)的是任務(wù)切換時(shí) 都是使用一個(gè)“陷阱“或者軟件中斷觸發(fā)的,這樣CPU就會(huì)進(jìn)行一次入棧,保存當(dāng)前任務(wù)堆棧,然后將上次被中斷的任務(wù)堆棧拷貝到CPU寄存器,然后執(zhí)行上次被中斷的任務(wù),這個(gè)理解對(duì)嗎?
問(wèn)2,每次產(chǎn)生軟件中斷或者陷阱的時(shí)候,CPU執(zhí)行入棧操作,保存當(dāng)前寄存器的狀態(tài),它是如何將這些值保存到任務(wù)堆棧中的?當(dāng)cpu切換任務(wù)時(shí)是怎么將任務(wù)堆棧保存的寄存器值拷貝到cpu寄存器中的?總之,就是任務(wù)堆棧是怎么和CPU寄存器之間建立數(shù)據(jù)交互的,麻煩詳細(xì)一點(diǎn)。
問(wèn)3,
#define  CPU_CRITICAL_ENTER()  do { CPU_INT_DIS(); } while (0)     
#define  CPU_CRITICAL_EXIT()   do { CPU_INT_EN();  } while (0)


#define  CPU_INT_DIS()         do { cpu_sr = CPU_SR_Save(); } while (0)
#define  CPU_INT_EN()          do { CPU_SR_Restore(cpu_sr); } while (0)
//以下內(nèi)容來(lái)源ucosII-F28335的OS_CPU_A.ASM
    .asmfunc
_OS_CPU_SR_Save:
    PUSH    ST1 //什么意思?
    DINT           //關(guān)中斷?
    POP    @AL//什么意思?
    AND     AL, #1//什么意思?
    LRETR            //什么意思?
    .endasmfunc


    .asmfunc
_OS_CPU_SR_Restore:
    PUSH    ST1     //什么意思?
    POP     AR0    //什么意思?
    AND     AR0, #0xFFFE  //什么意思?
    OR      AL, AR0   //什么意思?
    PUSH    AL   //什么意思?
    POP     ST1   //什么意思?
    LRETR      //什么意思?
    .endasmfunc
               
                能否幫忙纖細(xì)解釋一下上述匯編語(yǔ)言,最好結(jié)合上面問(wèn)題1,2回答。
               
                小弟對(duì)于上述問(wèn)題非常的不解,希望得到各位大神的指點(diǎn)感激不盡。


作者: utzuzu    時(shí)間: 2017-2-15 17:17
思路是這樣的: 每個(gè)任務(wù)都有各自獨(dú)立的堆棧區(qū),系統(tǒng)中斷后,任務(wù)切換過(guò)程是這樣,首先將當(dāng)前cpu主要寄存器內(nèi)容全部入棧(當(dāng)前任務(wù)棧),然后將堆棧指針重新賦值,指向新的任務(wù)的堆棧區(qū),再執(zhí)行出棧操作。入棧和出棧操作一般cpu有現(xiàn)成的指令支持的,ucos2將這些封裝成函數(shù)。每一個(gè)任務(wù)自己的堆棧指針存放在任務(wù)的控制塊數(shù)據(jù)結(jié)構(gòu)中(或理解為任務(wù)名片)。




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1