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

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

?? os_cpu_c.c

?? PIC18F452下的uCOS2移植成功代碼+MPLAB IDE V8.0的項目文件。結構非常精簡
?? C
?? 第 1 頁 / 共 3 頁
字號:
{
_asm 
	BTFSC RCON, 7, 0
	goto CPUhighInterruptHook
	goto CPUlowInterrupt
_endasm
}

#pragma code lowVector=0x018
void CPUlowVector(void)
{
    _asm goto CPUlowInterrupt _endasm
}
#pragma code

void CPUlowInterrupt(void)
{
    // 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

    // Notify kernel about interrupt by incrementing OSIntNesting or by calling OSIntEnter()
    OSIntNesting++;
    //OSIntEnter();

    // Call the user defined interrupt hook.
    CPUlowInterruptHook();

    // Call OSIntExit() to determine what task to switch to.
    OSIntExit();
_asm
    MOVF    POSTDEC1,   1,  0       // decrement stack pointer one to set it on the first item
_endasm

    // 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
}

/*
*********************************************************************************************************
*                               PERFORM A CONTEXT SWITCH (From an ISR)
*
* Description : This function is called when an ISR 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 suspend looks as follows.
*
*                                                                                          LOW MEMORY
*                                           -   19      pdata (lower 8 bits)
*                                           -   18      pdata (upper 8 bits)
*                                           -   17      XX (pointed to by FSR1, frame pointer)
*                                           -   16      STATUS  register
*                                           -   15      BSR     register
*                                           -   14      W       register
*                                           -   13      FSR0L   register
*                                           -   12      FSR0H   register
*                                           -   11      FSR2L   register (frame pointer, low)
*                                           -   10      FSR2H   register (frame pointer, high)
*                                           -   9       TBLPTRL register
*                                           -   8       TBLPTRH register
*                                           -   7       TBLPTRU register
*                                           -   6       PRODL   register
*                                           -   5       PRODH   register
*                                           -   4       AARGB3  memory location
*                                           -   3       AARGB2  memory location
*                                           -   2       AARGB1  memory location
*                                           -   1       AARGB0  memory location
*
*				OSTCBCur->OSTCBStkPtr		-   0 ----> (free item
*
*				3) The following itms need to be placed on to the stack.
*				   The function return stack holds two extra items that need
*				   to be removed before saving, OSIntExit() and OSIntCtxSw().
*
*                                       (end repeating, based on number of items)
*                                           +   0       TOSL    (top of return stack, low)
*                                           +   1       TOSH    (top of return stack, high)
*                                           +   2       TOSU    (top of return stack, upper)
*                                       (start repeating, based on number of items)
*
*                                           +   3       (number of return stack items)
*
*               OSTCBCur->OSTCBStkPtr		+   4 ----> (free item)
*                                                                                          HIGH MEMORY
*
*               3) 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
*********************************************************************************************************
*/

void OSIntCtxSw (void)
{
	// Remove the two extra return items, OSIntExit() and OSIntCtxSw().
_asm
    POP
    POP
_endasm

#if OS_CRITICAL_METHOD == 3                      /* De-Allocate storage for CPU status register        */
_asm
	MOVF POSTDEC1, 1, 0
	MOVF POSTDEC1, 1, 0
	MOVF POSTDEC1, 1, 0
_endasm
#endif

	// 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

    // 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 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
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国内精品不卡在线| 亚洲电影中文字幕在线观看| 欧美日韩一区小说| 在线观看不卡一区| 欧美视频在线一区| 在线观看网站黄不卡| 在线观看网站黄不卡| 欧美日韩一区高清| 日韩区在线观看| 久久久影视传媒| 在线亚洲一区二区| 欧美吞精做爰啪啪高潮| 欧美日韩一级二级| 国产精品久久久久久久久免费樱桃 | 欧洲av一区二区嗯嗯嗯啊| 91久久精品一区二区三区| 色天使色偷偷av一区二区| 欧美亚洲禁片免费| 欧美一二区视频| 国产日韩欧美一区二区三区综合| 国产免费观看久久| 亚洲狠狠丁香婷婷综合久久久| 亚洲一级二级三级在线免费观看| 日日夜夜精品视频天天综合网| 美女视频网站黄色亚洲| 成人开心网精品视频| 国产色一区二区| 国产在线视视频有精品| 日本成人在线不卡视频| 韩国成人精品a∨在线观看| av在线播放一区二区三区| 欧美色视频在线观看| 国产亚洲一区二区三区| 亚洲猫色日本管| 激情五月播播久久久精品| 99re成人在线| 日韩欧美视频在线| 亚洲欧美日韩人成在线播放| 日本美女一区二区三区| 色呦呦一区二区三区| 精品久久免费看| 一区二区三区小说| 国产一区二区三区四| 欧美色大人视频| 国产精品欧美一区喷水| 美女一区二区视频| 欧美中文字幕一区二区三区亚洲| 日韩免费电影网站| 五月综合激情网| 99精品久久久久久| 2021久久国产精品不只是精品| 一区2区3区在线看| voyeur盗摄精品| 亚洲精品一线二线三线无人区| 亚洲成人精品一区二区| 成人av综合一区| 精品久久久久久最新网址| 一区二区三区在线免费播放 | 国产日韩精品一区| 久久9热精品视频| 欧美日韩一卡二卡三卡| 一区二区三区四区精品在线视频| 国产不卡免费视频| www国产精品av| 美女性感视频久久| 69av一区二区三区| 亚洲高清不卡在线| 欧美午夜精品免费| 洋洋成人永久网站入口| 91黄色免费网站| 亚洲欧洲日产国产综合网| 粉嫩在线一区二区三区视频| 久久综合色综合88| 国产精品99久久久久久久vr| 精品电影一区二区三区| 精品一区二区三区香蕉蜜桃| 日韩三级视频在线观看| 精品亚洲成av人在线观看| 欧美成人国产一区二区| 久久国产三级精品| 91久久久免费一区二区| 不卡的电影网站| 久久免费精品国产久精品久久久久| 毛片av一区二区三区| 日韩欧美国产高清| 久久99久久久欧美国产| 国产色婷婷亚洲99精品小说| 成人高清视频在线| 亚洲色图色小说| 欧美午夜寂寞影院| 免费在线看一区| xfplay精品久久| 成人网在线免费视频| 一区二区三区四区av| 制服丝袜成人动漫| 国产真实乱偷精品视频免| 国产精品国产精品国产专区不蜜 | 亚洲精品免费播放| 欧美私模裸体表演在线观看| 日本人妖一区二区| 国产人成亚洲第一网站在线播放| 丁香婷婷综合激情五月色| 成人免费一区二区三区在线观看| 欧美系列一区二区| 麻豆精品国产91久久久久久| 一区二区三区日本| 成人美女视频在线看| 91美女蜜桃在线| 国产精品国产精品国产专区不片| 麻豆精品一区二区三区| 在线电影院国产精品| 日本欧美肥老太交大片| 91精品国产乱| 国产精品自拍三区| 一区二区三区**美女毛片| 久久人人爽爽爽人久久久| 国产欧美一区二区精品忘忧草| 久久久欧美精品sm网站| 91九色最新地址| 国产精品正在播放| 天使萌一区二区三区免费观看| 国产精品一区二区三区四区| 精品国产制服丝袜高跟| 午夜私人影院久久久久| 久久精品网站免费观看| 欧美浪妇xxxx高跟鞋交| 成人黄色免费短视频| 麻豆精品新av中文字幕| 亚洲一区二区三区免费视频| 中文字幕欧美三区| 欧美一级二级三级蜜桃| 日本高清不卡在线观看| av男人天堂一区| 国产69精品一区二区亚洲孕妇| 视频在线观看一区| 亚洲综合小说图片| 1024国产精品| 国产三级三级三级精品8ⅰ区| 91精选在线观看| 欧美在线播放高清精品| 色综合一区二区三区| 国产精品1024久久| 国内不卡的二区三区中文字幕| 五月婷婷另类国产| 亚洲大片免费看| 一区二区三区在线免费观看| 亚洲欧洲综合另类| 亚洲欧洲www| 日韩一区欧美一区| 成人欧美一区二区三区小说| 欧美韩国一区二区| 国产精品国产三级国产普通话99 | 日韩一区和二区| 日韩你懂的在线播放| 8x8x8国产精品| 欧美精品久久久久久久多人混战| 欧美亚洲综合在线| 欧美日韩在线综合| 在线不卡免费欧美| 欧美丰满少妇xxxxx高潮对白| 欧美日韩亚洲高清一区二区| 欧日韩精品视频| 欧美日韩国产bt| 日韩一区二区精品葵司在线| 日韩一二三区不卡| 欧美va亚洲va在线观看蝴蝶网| 日韩欧美综合一区| 国产亚洲1区2区3区| 中文字幕不卡的av| 亚洲男女一区二区三区| 亚洲午夜在线视频| 美女一区二区久久| 国产东北露脸精品视频| av中文字幕在线不卡| 欧美日韩色一区| 日韩免费高清电影| 国产精品女人毛片| ●精品国产综合乱码久久久久| 亚洲成在人线在线播放| 九色porny丨国产精品| 成人小视频免费在线观看| 色欧美片视频在线观看| 在线播放中文一区| 欧美激情一区二区三区蜜桃视频| 亚洲男人天堂一区| 蜜桃av一区二区三区电影| 福利一区福利二区| 欧美日韩视频在线第一区| 亚洲精品在线免费观看视频| 亚洲天堂中文字幕| 免费高清不卡av| 91美女片黄在线| 欧美电视剧在线观看完整版| 亚洲人成伊人成综合网小说| 日日摸夜夜添夜夜添亚洲女人| 粉嫩在线一区二区三区视频| 欧美撒尿777hd撒尿| 久久久久高清精品| 亚洲成人免费在线| 成人精品一区二区三区中文字幕|