亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? os_cpu_c.c

?? PIC18F452下的uCOS2移植成功代碼+MPLAB IDE V8.0的項(xiàng)目文件。結(jié)構(gòu)非常精簡
?? C
?? 第 1 頁 / 共 3 頁
字號(hào):
*                                           -   9       PRODH   register
*                                           -   8       AARGB3  memory location
*                                           -   7       AARGB2  memory location
*                                           -   6       AARGB1  memory location
*                                           -   5       AARGB0  memory location
*
*                                       (end repeating, based on number of items)
*                                           -   4       TOSL    (top of return stack, low)
*                                           -   3       TOSH    (top of return stack, high)
*                                           -   2       TOSU    (top of return stack, upper)
*                                       (start repeating, based on number of items)
*
*                                           -   1       (number of return stack items)
*
*               OSTCBHighRdy->OSTCBStkPtr   -   0 ----> (free item)
*                                                                                          HIGH MEMORY
*
*               2) OSStartHighRdy() MUST:
*                      a) Call OSTaskSwHook()
*                      b) Set OSRunning to TRUE
*                      c) Switch to the highest priority task.
*********************************************************************************************************
*/

void OSStartHighRdy (void)
{
    // Call user definable OSTaskSwHook();
    OSTaskSwHook();

    // Set OSRunning to TRUE
    OSRunning = TRUE;

    // Get the stack pointer of the task to resume.
    //  Stack Pointer = OSTCBHighRdy->OSTCBStkPtr;
_asm
    MOVFF   OSTCBHighRdy,   FSR0L   // load the STCBHighRdy->OSTCBStkPtr into the free indirect register
    MOVFF   OSTCBHighRdy+1, FSR0H
    MOVFF   POSTINC0,   FSR1L       // copy the variable into the stack pointer
    MOVFF   POSTDEC0,   FSR1H
_endasm

    // delete the contents of the hardware return stack - In OSStartHighRdy() ONLY
    while(STKPTR & 0x1F)
    {
    _asm
        POP     // discard the return address pointer
    _endasm
    }
    if(STKPTR)
        STKPTR = 0;

    // restore the hardware return stack
_asm
    MOVF    POSTDEC1,   1,  0       // decrement one to set it on the first item
    MOVF    POSTDEC1,   0,  0       // number of function pointers in hardware return stack
    MOVWF   FSR0L,  0               // user FSR0 as a temperary counter
_endasm
    do
    {
    _asm
        PUSH                            // push current address onto hardware stack
        MOVF    POSTDEC1,   0,  0       // then change to the function pointer in stack
        MOVWF   TOSU,   0
        MOVF    POSTDEC1,   0,  0
        MOVWF   TOSH,   0
        MOVF    POSTDEC1,   0,  0
        MOVWF   TOSL,   0
    _endasm
    } while(--FSR0L);               // decrement counter and loop if not finished

    // restore all processor registers from the new task's stack:
_asm
    MOVFF   POSTDEC1,   AARGB0
    MOVFF   POSTDEC1,   AARGB1
    MOVFF   POSTDEC1,   AARGB2

    MOVFF   POSTDEC1,   PRODH
    MOVFF   POSTDEC1,   PRODL
    MOVFF   POSTDEC1,   TBLPTRU
    MOVFF   POSTDEC1,   TBLPTRH
    MOVFF   POSTDEC1,   TBLPTRL
    MOVFF   POSTDEC1,   FSR2H
    MOVFF   INDF1,      FSR2L
    MOVF    POSTDEC1,   1,  0
    MOVFF   POSTDEC1,   FSR0H
    MOVFF   POSTDEC1,   FSR0L
    MOVF    POSTDEC1,   0,  0
    MOVFF   POSTDEC1,   BSR
    MOVFF   POSTDEC1,   STATUS
_endasm

    // execute a return from interrupt instruction
_asm
    RETFIE 0
_endasm
}

/*
*********************************************************************************************************
*                                       TASK LEVEL CONTEXT SWITCH
*
* Description : This function is called when a task makes a higher priority task ready-to-run.
*
* Arguments   : none
*
* Note(s)     : 1) Upon entry,
*                  OSTCBCur     points to the OS_TCB of the task to suspend
*                  OSTCBHighRdy points to the OS_TCB of the task to resume
*
*               2) The stack frame of the task to resume looks as follows:
*
*                                                                                          LOW MEMORY
*                                           -   23      pdata (lower 8 bits)
*                                           -   22      pdata (upper 8 bits)
*                                           -   21      XX (pointed to by FSR1, frame pointer)
*                                           -   20      STATUS  register
*                                           -   19      BSR     register
*                                           -   18      W       register
*                                           -   17      FSR0L   register
*                                           -   16      FSR0H   register
*                                           -   15      FSR2L   register (frame pointer, low)
*                                           -   14      FSR2H   register (frame pointer, high)
*                                           -   13      TBLPTRL register
*                                           -   12      TBLPTRH register
*                                           -   11      TBLPTRU register
*                                           -   10      PRODL   register
*                                           -   9       PRODH   register
*                                           -   8       AARGB3  memory location
*                                           -   7       AARGB2  memory location
*                                           -   6       AARGB1  memory location
*                                           -   5       AARGB0  memory location
*
*                                       (end repeating, based on number of items)
*                                           -   4       TOSL    (top of return stack, low)
*                                           -   3       TOSH    (top of return stack, high)
*                                           -   2       TOSU    (top of return stack, upper)
*                                       (start repeating, based on number of items)
*
*                                           -   1       (number of return stack items)
*
*               OSTCBHighRdy->OSTCBStkPtr   -   0 ----> (free item)
*                                                                                          HIGH MEMORY
*********************************************************************************************************
*/

//#pragma interrupt OSCtxSw
void  OSCtxSw (void)
{
    // disable interrupts
    INTCON &= (0b00111111 | (RCON & 0b10000000));
    
    // Save processor registers
_asm
    MOVFF   STATUS, PREINC1
    MOVFF   BSR,    PREINC1
    MOVWF   PREINC1,    0
    MOVFF   FSR0L,  PREINC1
    MOVFF   FSR0H,  PREINC1
    MOVF    POSTINC1,   1,  0
    MOVFF   FSR2L,  POSTINC1
    MOVFF   FSR2H,  POSTINC1
    MOVFF   TBLPTRL,POSTINC1
    MOVFF   TBLPTRH,POSTINC1
    MOVFF   TBLPTRU,POSTINC1
    MOVFF   PRODL,  POSTINC1
    MOVFF   PRODH,  POSTINC1

    MOVFF   AARGB2, POSTINC1
    MOVFF   AARGB1, POSTINC1
    MOVFF   AARGB0, POSTINC1
_endasm

    // Save the current task's return address hardware stack
    FSR0L = 0;
    while(STKPTR & 0x1F)
    {
    _asm
        MOVFF   TOSL,   POSTINC1        // copy the return address pointer
        MOVFF   TOSH,   POSTINC1        //   to the end of the software stack.
        MOVFF   TOSU,   POSTINC1
        POP                             // discard the top stack item that we just copied
    _endasm
        FSR0L++;
    }
_asm
    MOVFF   FSR0L,  POSTINC1            // copy the count to the last item in the software stack
_endasm
    if(STKPTR)
        STKPTR = 0;


    // Save the current task's stack pointer into the current task's OS_TCB:
    //   OSTCBCur->OSTCBStkPtr = Stack Pointer;
_asm
    MOVFF   OSTCBCur,   FSR0L       // load the OSTCBCur->OSTCBStkPtr into the free indirect register
    MOVFF   OSTCBCur+1, FSR0H
    MOVFF   FSR1L,      POSTINC0    // copy the stack pointer into the variable
    MOVFF   FSR1H,      POSTDEC0
_endasm

    // Call OSTaskSwHook()
    OSTaskSwHook();

    // re-arrange the pointers
    OSTCBCur = OSTCBHighRdy;
    OSPrioCur = OSPrioHighRdy;

    // Get the stack pointer of the task to resume.
    //  Stack Pointer = OSTCBHighRdy->OSTCBStkPtr;
_asm
    MOVFF   OSTCBHighRdy,   FSR0L   // load the STCBHighRdy->OSTCBStkPtr into the free indirect register
    MOVFF   OSTCBHighRdy+1, FSR0H
    MOVFF   POSTINC0,   FSR1L       // copy the variable into the stack pointer
    MOVFF   POSTDEC0,   FSR1H
_endasm

    // restore the hardware return stack
_asm
    MOVF    POSTDEC1,   1,  0       // decrement stack pointer one to set it on the first item
    MOVF    POSTDEC1,   0,  0       // number of function pointers in hardware return stack
    MOVWF   FSR0L,  0               // user FSR0 as a temperary counter
_endasm
    do
    {
    _asm
        PUSH                            // push current address onto hardware stack
        MOVF    POSTDEC1,   0,  0       // then change to the function pointer in stack
        MOVWF   TOSU,   0
        MOVF    POSTDEC1,   0,  0
        MOVWF   TOSH,   0
        MOVF    POSTDEC1,   0,  0
        MOVWF   TOSL,   0
    _endasm
    } while(--FSR0L);               // decrement counter and loop if not finished

    // restore all processor registers from the new task's stack:
_asm
    MOVFF   POSTDEC1,   AARGB0
    MOVFF   POSTDEC1,   AARGB1
    MOVFF   POSTDEC1,   AARGB2

    MOVFF   POSTDEC1,   PRODH
    MOVFF   POSTDEC1,   PRODL
    MOVFF   POSTDEC1,   TBLPTRU
    MOVFF   POSTDEC1,   TBLPTRH
    MOVFF   POSTDEC1,   TBLPTRL
    MOVFF   POSTDEC1,   FSR2H
    MOVFF   INDF1,      FSR2L
    MOVF    POSTDEC1,   1,  0
    MOVFF   POSTDEC1,   FSR0H
    MOVFF   POSTDEC1,   FSR0L
    MOVF    POSTDEC1,   0,  0
    MOVFF   POSTDEC1,   BSR
    MOVFF   POSTDEC1,   STATUS
_endasm

    // execute a return from interrupt instruction
_asm
    RETFIE 0
_endasm
}

/*
*********************************************************************************************************
*                                             TICK ISR
*
* Notes: 1) Your ISR MUST be added into the CPUInterruptHook()
*
*       setup the timer with the following instructions.
*       T1CON = 0x0F;
*         or
*       movlw   0x0F
*       movwf   T1CON
*********************************************************************************************************
*/
void CPUhighVector(void);
void CPUlowVector(void);
void CPUlowInterrupt(void);

#pragma code highVector=0x008
void CPUhighVector(void)

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区在线免费| 6080国产精品一区二区| 欧美激情中文字幕| 99国产精品久久久久久久久久久 | 奇米影视7777精品一区二区| 在线观看三级视频欧美| 亚洲欧美一区二区视频| 高清不卡在线观看| 国产欧美一区二区精品婷婷| 老司机精品视频线观看86| 中文av一区二区| 欧美日韩亚洲另类| 国产中文一区二区三区| 亚洲男同1069视频| 精品欧美久久久| 高清免费成人av| 亚洲午夜激情av| 国产日韩精品视频一区| 91在线国内视频| 麻豆国产精品一区二区三区| 亚洲欧美另类久久久精品| 成人福利视频在线| 一区二区三区美女视频| 欧美成人激情免费网| 色94色欧美sute亚洲线路一ni| 一区二区不卡在线播放 | 亚洲成a人片在线不卡一二三区| 高清在线成人网| 青草国产精品久久久久久| 亚洲欧美日韩国产手机在线| 亚洲午夜精品久久久久久久久| 蜜臀久久99精品久久久久久9| 国产成人在线看| 中文字幕欧美日韩一区| av欧美精品.com| 亚洲激情综合网| 欧美一级日韩一级| 国产伦精品一区二区三区免费迷| 国产精品久久久久影院亚瑟| 亚洲电影一级片| 亚洲精品国产a| 国产精品理论片在线观看| 精品免费国产二区三区| 日韩免费成人网| 成人性视频免费网站| 五月综合激情婷婷六月色窝| 亚洲精品成人在线| 亚洲成人av在线电影| 中文字幕一区二区在线播放| 亚洲精品高清在线| 日韩在线播放一区二区| 不卡欧美aaaaa| 7777精品伊人久久久大香线蕉超级流畅 | 久久一留热品黄| 成人免费不卡视频| av欧美精品.com| 日韩欧美一区二区三区在线| 久久精品视频一区| 日韩制服丝袜av| 99久久久无码国产精品| 精品日韩av一区二区| 一区二区三区在线免费视频| 国产一区美女在线| 欧美性猛交一区二区三区精品| 久久久青草青青国产亚洲免观| 亚洲国产视频网站| 成人av小说网| 久久久亚洲综合| 日本欧美一区二区| 在线欧美小视频| 亚洲欧洲精品一区二区精品久久久| 日本不卡一二三| 欧美日韩高清影院| 一区二区三区.www| 成人激情黄色小说| 欧美国产日产图区| 国产精品一区二区在线观看网站| 在线看国产一区| 欧美三级中文字幕在线观看| 成人精品视频一区| 国产成人在线网站| 成人动漫精品一区二区| 91猫先生在线| 7777精品伊人久久久大香线蕉| 欧美日韩成人一区二区| 久久99久久久久久久久久久| 国产亚洲综合在线| 欧美在线视频全部完| 日韩黄色免费网站| 中文字幕一区日韩精品欧美| 日韩情涩欧美日韩视频| 国精产品一区一区三区mba视频| 亚洲精品中文字幕在线观看| 91精品国产综合久久精品图片| 91麻豆精东视频| 美女视频一区二区三区| 一区二区欧美国产| 国产精品理论在线观看| 日韩精品中文字幕在线不卡尤物| 一本久道久久综合中文字幕| 免费人成精品欧美精品| 中文字幕日韩一区二区| 国产高清在线精品| 欧美成人a∨高清免费观看| 婷婷激情综合网| 国产精品系列在线观看| 色乱码一区二区三区88| 欧美激情一区二区三区不卡 | 色88888久久久久久影院按摩 | 国产.欧美.日韩| 国产大片一区二区| 亚洲第一狼人社区| 国产精品灌醉下药二区| 日韩你懂的电影在线观看| 欧美性xxxxx极品少妇| 成人小视频免费在线观看| 免费人成精品欧美精品| 夜夜嗨av一区二区三区| 国产精品国产自产拍高清av王其| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 免费成人av在线播放| 亚洲欧美日韩久久| 国产拍欧美日韩视频二区| 日韩免费看的电影| 色综合中文字幕国产 | 老司机精品视频导航| 亚洲高清免费观看| 亚洲欧美偷拍另类a∨色屁股| 久久精子c满五个校花| 日韩午夜激情视频| 欧美亚洲综合另类| 丰满白嫩尤物一区二区| 美女视频黄 久久| 日本不卡一二三| 视频在线观看91| 亚洲高清不卡在线观看| 亚洲一区二区三区自拍| 亚洲黄色小说网站| 日韩欧美另类在线| 99精品热视频| 麻豆91小视频| 裸体歌舞表演一区二区| 成人美女视频在线观看18| 日本一二三不卡| www.久久精品| 亚洲一区二区在线免费观看视频| 波多野结衣欧美| 亚洲色大成网站www久久九九| 91在线观看高清| 亚洲男人的天堂在线aⅴ视频| 久久99久久久久| 国产精品久久久久久久岛一牛影视| 亚洲夂夂婷婷色拍ww47| 在线视频亚洲一区| 激情综合网天天干| 亚洲人成亚洲人成在线观看图片 | 久久99久久99| 美国av一区二区| 久久99精品视频| 韩国一区二区视频| 日韩欧美国产不卡| 国产91对白在线观看九色| 专区另类欧美日韩| 在线观看国产91| 狠狠色丁香婷婷综合久久片| 欧美激情综合在线| 欧美在线观看一区| 国产综合久久久久影院| 最新欧美精品一区二区三区| 色综合咪咪久久| 久久99国产精品久久99| 最近日韩中文字幕| 欧美成人欧美edvon| av不卡一区二区三区| 亚洲午夜电影在线| 国产拍欧美日韩视频二区| 欧美午夜精品电影| 国产成人夜色高潮福利影视| 亚洲午夜精品一区二区三区他趣| 在线看国产一区二区| 91久久精品一区二区二区| 日韩和的一区二区| 日韩欧美一区中文| 色8久久人人97超碰香蕉987| 日韩电影免费一区| 综合色天天鬼久久鬼色| 亚洲三级视频在线观看| 国产精品影视天天线| 久久69国产一区二区蜜臀| 一级特黄大欧美久久久| 亚洲成a人v欧美综合天堂下载 | 亚洲综合视频在线| 久久久夜色精品亚洲| 亚洲久本草在线中文字幕| 亚洲摸摸操操av| 日产国产高清一区二区三区| 国产91高潮流白浆在线麻豆| 成人国产精品免费网站| 欧美亚洲高清一区二区三区不卡| 欧美xxxxx牲另类人与|