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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? os_cpu_c.c

?? PIC18F452下的uCOS2移植成功代碼+MPLAB IDE V8.0的項目文件。結構非常精簡
?? C
?? 第 1 頁 / 共 3 頁
字號:
*                                           -   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,   AARGB3
    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   AARGB3, 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,   AARGB3
    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)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人8x视频一区二区| 亚洲少妇屁股交4| 麻豆久久久久久| 久久午夜国产精品| 成人综合婷婷国产精品久久免费| 亚洲国产高清在线观看视频| 一本一道久久a久久精品| 亚洲成人自拍网| 日韩免费视频一区| 成年人国产精品| 亚洲国产成人高清精品| 欧美成人在线直播| www.99精品| 天天av天天翘天天综合网色鬼国产| 日韩欧美视频一区| 99在线视频精品| 日韩精品一二三| 欧美国产一区在线| 欧美日本一道本| 高清免费成人av| 亚洲3atv精品一区二区三区| 亚洲精品一区二区三区在线观看 | 成人手机在线视频| 一区二区成人在线观看| 欧美不卡一区二区三区| www.成人网.com| 久久99久久精品欧美| 亚洲欧美日韩在线| 久久综合久久99| 欧美日韩精品欧美日韩精品一综合| 加勒比av一区二区| 亚洲黄色片在线观看| 久久中文娱乐网| 欧美日韩黄色一区二区| 成人综合在线视频| 日韩激情在线观看| 亚洲欧美日韩小说| 久久精品一区二区三区av| 欧美精品自拍偷拍| 91蜜桃免费观看视频| 国产原创一区二区三区| 视频一区在线播放| 亚洲免费观看高清在线观看| 久久久久久久一区| 日韩午夜三级在线| 在线免费观看视频一区| 成人小视频免费观看| 精品一区二区三区久久| 亚洲.国产.中文慕字在线| 亚洲欧洲成人自拍| 国产女主播一区| 精品三级在线观看| 91精品国产综合久久福利软件| 91丨九色丨国产丨porny| 国产成人一级电影| 国产在线不卡一区| 捆绑紧缚一区二区三区视频| 亚洲成人你懂的| 亚洲最大的成人av| 亚洲精品视频在线观看网站| 国产精品传媒视频| 中文字幕不卡三区| 中文字幕高清一区| 国产天堂亚洲国产碰碰| 精品国产精品网麻豆系列| 欧美一卡2卡3卡4卡| 在线不卡免费欧美| 欧美剧情电影在线观看完整版免费励志电影| 成人自拍视频在线| 成人av电影在线观看| 成人a区在线观看| 成人久久18免费网站麻豆 | 国产精品免费观看视频| 久久久激情视频| 国产日韩一级二级三级| 久久久亚洲午夜电影| 国产日本欧洲亚洲| 国产欧美日韩在线看| 欧美国产精品专区| 亚洲欧美综合另类在线卡通| 亚洲视频一区在线| 一区二区免费看| 日韩国产欧美在线播放| 蜜桃av一区二区| 国产永久精品大片wwwapp| 国产精品一区二区黑丝| 成人激情av网| 色美美综合视频| 欧美欧美午夜aⅴ在线观看| 欧美伦理影视网| 精品国产乱码久久久久久久久| 26uuuu精品一区二区| 欧美高清在线精品一区| 曰韩精品一区二区| 日韩精品91亚洲二区在线观看| 青青草国产精品亚洲专区无| 国产九九视频一区二区三区| 成人av影视在线观看| 欧美四级电影在线观看| 欧美一区二区三区在| 国产午夜亚洲精品羞羞网站| 国产精品电影一区二区| 午夜伦理一区二区| 国产在线精品免费| 91麻豆精东视频| 欧美一区二区久久| 日本一区二区三区免费乱视频| 亚洲少妇中出一区| 秋霞午夜av一区二区三区| 丰满亚洲少妇av| 欧美久久久一区| 久久久久久久久久美女| 亚洲制服丝袜在线| 国产毛片精品视频| 欧美性xxxxxxxx| 2024国产精品视频| 亚洲一区二区三区中文字幕| 韩国精品久久久| 欧美三区在线视频| 国产调教视频一区| 天天色综合天天| 97精品国产97久久久久久久久久久久| 欧美日韩午夜在线视频| 中文av字幕一区| 久久 天天综合| 欧美色图第一页| 国产精品久久久久国产精品日日| 日本欧美一区二区三区乱码| 成人av手机在线观看| 日韩久久精品一区| 亚洲与欧洲av电影| jlzzjlzz亚洲日本少妇| 精品久久久久一区| 五月天丁香久久| 91蜜桃婷婷狠狠久久综合9色| 久久亚洲影视婷婷| 日韩avvvv在线播放| 欧美中文字幕一区| 1024成人网色www| 国产成人免费网站| 久久品道一品道久久精品| 日韩精品久久理论片| 欧美中文字幕亚洲一区二区va在线 | 亚洲欧洲精品一区二区三区不卡| 国产一区二区三区在线观看免费视频 | 亚洲精品免费视频| 成人听书哪个软件好| 久久久久99精品一区| 麻豆成人免费电影| 日韩欧美一级二级| 日韩不卡一二三区| 欧美疯狂做受xxxx富婆| 亚洲国产综合人成综合网站| 色综合久久中文字幕| 亚洲素人一区二区| 97aⅴ精品视频一二三区| 国产拍欧美日韩视频二区| 国产真实乱子伦精品视频| 91精品国产高清一区二区三区蜜臀| 一区二区三区影院| 色噜噜久久综合| 亚洲一区二区在线视频| 在线影院国内精品| 亚洲一二三区视频在线观看| 色综合久久久久综合体桃花网| 亚洲男人的天堂在线aⅴ视频| 97久久精品人人爽人人爽蜜臀| 中文字幕一区二区三区精华液| 成人黄页毛片网站| 综合电影一区二区三区 | 免费人成黄页网站在线一区二区| 欧美日韩免费电影| 日韩电影一区二区三区四区| 欧美另类z0zxhd电影| 免费成人在线影院| 久久久99久久| 99re亚洲国产精品| 亚洲一区二区三区在线看| 欧美久久免费观看| 精久久久久久久久久久| 精品日韩在线观看| 国产成人精品一区二| 最新成人av在线| 欧美精品在线观看一区二区| 裸体一区二区三区| 日本一区二区三级电影在线观看| 99精品国产视频| 午夜精品福利一区二区三区av| 日韩一级高清毛片| 国产不卡视频在线观看| 亚洲欧美怡红院| 欧美日韩精品一区二区| 韩国女主播成人在线| 亚洲日本在线视频观看| 欧美丰满美乳xxx高潮www| 国产一区视频网站| 一区二区三区日韩| 欧美成人精品3d动漫h| 91香蕉视频污| 极品少妇xxxx精品少妇偷拍|