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

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

?? os_cpu_a.asm

?? 帶時鐘功能溫度和濕度測量的儀器
?? ASM
?? 第 1 頁 / 共 2 頁
字號:
;*********************************************************************************************************
;**                                            Small RTOS 51 
;**                                   The Real-Time Kernel For Keil c51
;**
;**                                  (c) Copyright 2002-2003, chenmingji
;**                                           All Rights Reserved
;**
;**                                                  V1.12.1
;**
;**
;**--------------------文件信息---------------------------------------------------------------------------
;**文   件   名: OS_CPU_A.ASM
;**創   建   人: 陳明計
;**版        本: V1.12.1
;**最后修改日期:  2002年2月5日
;**描       述:  Small RTOS 51 與CPU(8051系列)相關的匯編程序
;**---------------------歷史版本信息----------------------------------------------------------------------
;** 創建人: 陳明計
;** 版  本:V0.50
;** 日 期: 2002年2月22日
;** 描 述: 原始版本
;**
;**------------------------------------------------------------------------------------------------------
;** 修改人: 陳明計
;** 版  本: V1.00
;** 日 期: 2002年6月10日
;** 描 述: 支持軟的非屏蔽中斷
;**
;**------------------------------------------------------------------------------------------------------
;** 修改人: 陳明計
;** 版  本: V1.10.3
;** 日 期: 2002年9月16日
;** 描 述: 修改了LoadCtx代碼使之執行更快,代碼更小
;**         
;**------------------------------------------------------------------------------------------------------
;** 修改人: 陳明計
;** 版  本: V1.10.4
;** 日 期: 2002年10月5日
;** 描 述: 將OS_CPU_A.ASM和OS_CPU_A_task16.ASM合并
;**
;**------------------------------------------------------------------------------------------------------
;** 修改人: 陳明計
;** 版  本: V1.11.0
;** 日 期: 2002年12月2日
;** 描 述: 根據新版本要求使任務堆棧包含Os_Enter_Sum,使優先級最低
;**         的任務只保存少量寄存器;增加注釋
;**------------------------------------------------------------------------------------------------------
;** 修改人: 陳明計
;** 版  本: V1.12.0
;** 日 期: 2002年12月30日
;** 描 述: 根據新版本要求更改少量代碼
;**------------------------------------------------------------------------------------------------------
;** 修改人: 陳明計
;** 版  本: V1.12.1
;** 日 期: 2002年2月5日
;** 描 述: 更正LoadCtx中OS_MAX_TASKS為8或16的bug
;**---------------------當前版本修訂-----------------------------------------------------------------------
;** 修改人:
;** 日 期:
;** 描 述:
;**
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
#include "OS_CPU.H"
#include "OS_CFG.H"

#if EN_REENTRANT > 0
#define SP_ADD_BYTE  5
#else
#define SP_ADD_BYTE  3
#endif


    NAME    OS_CPU_A_ASM

?PR?OSCtxSw?OS_CPU_A                     SEGMENT CODE
?PR?OSIntCtxSw?OS_CPU_A                  SEGMENT CODE
?PR?LoadCtx?OS_CPU_A                     SEGMENT CODE
?PR?C_OSCtxSw?OS_CPU_A                   SEGMENT CODE 
?PR?_OSTaskStkInit?OS_CPU_A              SEGMENT CODE 


    EXTRN   CODE (OSMapTbl)
    EXTRN   DATA (OSFastSwap)
    EXTRN   DATA (OSTaskID)
    EXTRN   DATA (OSNextTaskID)
    EXTRN   DATA (OSTsakStackBotton)
    EXTRN   DATA (Os_Enter_Sum)
IF EN_SP2  <> 0
    EXTRN   IDATA (Sp2)
ENDIF
IF EN_REENTRANT > 0
    EXTRN   DATA (?C_XBP)
ENDIF

    PUBLIC  _OSTaskStkInit
    PUBLIC  LoadCtx
    PUBLIC  OSIntCtxSw
    PUBLIC  OSCtxSw
    PUBLIC  STACK
    PUBLIC  C_OSCtxSw

;****************************************************************************************
;?STACK SEGMENT IDATA

?STACK      SEGMENT   IDATA

        RSEG    ?STACK
STACK:                                          ;堆棧
        DS  1

; /*********************************************************************************************************
; ** 函數名稱: OSTaskStkInit
; ** 功能描述: 任務堆棧初始化
; ** 輸 入: 無
; ** 輸 出 : 無
; ** 全局變量: OSTaskID,OSTsakStackBotton,SP
; ** 調用模塊: LoadCtx
; ** 
; ** 作 者: 陳明計
; ** 日 期: 2002年2月22日
; **-------------------------------------------------------------------------------------------------------
; ** 修改人:
; ** 日 期:
; **-------------------------------------------------------------------------------------------------------
; ********************************************************************************************************/
 
    RSEG  ?PR?_OSTaskStkInit?OS_CPU_A
_OSTaskStkInit:
    USING   0
;---- Variable 'cp?147' assigned to Register 'R0' ----
;---- Variable 'cp?146' assigned to Register 'R1' ----
;---- Variable 'i?145' assigned to Register 'R2' ----
;---- Variable 'TaskID?144' assigned to Register 'R3' ----
;---- Variable 'ptos?143' assigned to Register 'R4/R5' ----
    
    PUSH    AR6
    PUSH    AR7
; {
#if OS_MAX_TASKS < 9
;         OSFastSwap[0] &= ~OSMapTbl[TaskID];
    MOV     A,R3
    MOV     DPTR,#OSMapTbl
    MOVC    A,@A+DPTR
    ORL     OSFastSwap,A
#else
;         if (TaskID < 8)
    MOV     A,R3
    CLR     C
    SUBB    A,#08H
    MOV     A,R3
    JNC     StkInit07
;         {
;             OSFastSwap[1] &= ~OSMapTbl[TaskID];
    MOV     DPTR,#OSMapTbl
    MOVC    A,@A+DPTR
    ORL     OSFastSwap+1,A
;         }
    SJMP    StkInit08
StkInit07:
;         else
;         {
;             OSFastSwap[0] &= ~OSMapTbl[TaskID & 0x07];
    ANL     A,#07H
    MOV     DPTR,#OSMapTbl
    MOVC    A,@A+DPTR
    ORL     OSFastSwap,A
;         }
StkInit08:
#endif

;     if (TaskID < OSRunningTaskID())
    MOV     A,R3
    CLR     C
    SUBB    A,OSTaskID
    JNC     StkInit5
;     {
;         i =  OSRunningTaskID() - TaskID;
    CLR     C
    MOV     A,OSTaskID
    SUBB    A,R3
    MOV     R2,A
;         cp = (uint8 idata *)(&(OSTsakStackBotton[TaskID + 1]));
    MOV     A,#LOW (OSTsakStackBotton+01H)
    ADD     A,R3
    MOV     R1,A
StkInit8:
;         do
;         {
;             *cp += SP_ADD_BYTE;
    MOV     A,#SP_ADD_BYTE
    ADD     A,@R1
    MOV     @R1,A
;             cp++;
    INC     R1
;         } while (--i != 0);
    DJNZ    R2,StkInit8

;         cp1 = (uint8 idata *)SP;
    MOV     R0,SP
;         SP = SP + SP_ADD_BYTE;
            ; SOURCE LINE # 172
    MOV     A,#SP_ADD_BYTE
    ADD     A,SP
    MOV     SP,A
;         i = SP - (uint8)(OSTsakStackBotton[TaskID + 1]) + 1;
    MOV     A,#LOW (OSTsakStackBotton+01H)
    ADD     A,R3
    MOV     R1,A
    MOV     AR7,@R1
    CLR     C
    MOV     A,SP
    SUBB    A,R7
    MOV     R2,A
    INC     R2
;         cp = (uint8 idata *)SP;
    MOV     R1,SP
StkInit11:
;         do
;         {
;             *cp-- = *cp1--;
    MOV     A,@R0
    MOV     @R1,A
    DEC     R0
    DEC     R1
;         } while (--i != 0);
    DJNZ    R2,StkInit11
;     }
    SJMP    StkInit12
StkInit5:
;     else
;     {
;         cp1 = (uint8 idata *)(&(OSTsakStackBotton[OSRunningTaskID() + 1]));
    MOV     A,#LOW (OSTsakStackBotton+01H)
    ADD     A,OSTaskID
    MOV     R0,A
;         i = TaskID - OSRunningTaskID();
    CLR     C
    MOV     A,R3
    SUBB    A,OSTaskID
    MOV     R2,A
StkInit15:
;         do
;         {
;             *cp1 -= SP_ADD_BYTE;
    MOV     A,#(-SP_ADD_BYTE)
    ADD     A,@R0
    MOV     @R0,A
;             cp1++;
    INC     R0
;         } while (--i != 0);
    DJNZ    R2,StkInit15
;         
;         cp = OSTsakStackBotton[OSRunningTaskID() + 1];
    MOV     A,#LOW (OSTsakStackBotton+01H)
    ADD     A,OSTaskID
    MOV     R0,A
    MOV     A,@R0
    MOV     R1,A
;         i = OSTsakStackBotton[TaskID] - cp - SP_ADD_BYTE;
    MOV     A,R1
    ADD     A,#(-SP_ADD_BYTE)
    MOV     R7,A

    MOV     A,#LOW (OSTsakStackBotton)
    ADD     A,R3
    MOV     R0,A
    MOV     A,@R0
    CLR     C
    SUBB    A,R7
    MOV     R2,A
;         cp1 = cp - SP_ADD_BYTE;
    MOV     R0,AR7
StkInit18:
;         do
;         {
;             *cp1++ = *cp++;
    MOV     A,@R1
    MOV     @R0,A
    INC     R0
    INC     R1
;         } while (--i != 0);
    DJNZ    R2,StkInit18
;     }
StkInit12:
;     cp = OSTsakStackBotton[TaskID];
    MOV     A,#LOW (OSTsakStackBotton)
    ADD     A,R3
    MOV     R0,A
    MOV     A,@R0
    MOV     R1,A
;     *cp++ = (uint16)task % 256;
    pop     ACC
    MOV     @R1,A
    INC     R1
;     *cp++ = (uint16)task / 256;
    pop     ACC
    MOV     @R1,A
    INC     R1
#if EN_REENTRANT > 0
;     *cp++ = (uint16)ptos / 256;
    MOV     @R1,AR4
    INC     R1
;     *cp++ = (uint16)ptos % 256;
    MOV     @R1,AR5
    INC     R1
#endif
;     *cp = 0;
    CLR     A
    MOV     @R1,A
; }
    RET     

;/*********************************************************************************************************
;** 函數名稱: LoadCtx
;** 功能描述: 任務環境恢復函數
;** 輸 入: OSTaskID,OSFastSwap
;** 輸 出 : 無
;** 全局變量: 無
;** 調用模塊: 無
;** 
;** 作 者: 陳明計
;** 日 期: 2002年2月22日
;**-------------------------------------------------------------------------------------------------------
;** 修 改: 陳明計
;** 日 期: 2002年12月2日
;**-------------------------------------------------------------------------------------------------------
;** 修 改: 陳明計
;** 日 期: 2003年2月5日
;**-------------------------------------------------------------------------------------------------------
;** 修 改:
;** 日 期:
;**-------------------------------------------------------------------------------------------------------
;********************************************************************************************************/

    RSEG  ?PR?LoadCtx?OS_CPU_A
LoadCtx:
    USING   0
   
    POP     Os_Enter_Sum            ;恢復關中斷計數器

#if EN_REENTRANT > 0
    POP     ?C_XBP+1
    POP     ?C_XBP
#endif

                                    ;判斷是否需要恢復所有寄存器
    MOV     A,OSTaskID
    CJNE    A,#OS_MAX_TASKS,LoadCtx_0
    SJMP    LoadCtx_2
LoadCtx_0:

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本一区二区三区国色天香| 精品免费视频.| 成人免费毛片片v| 麻豆精品精品国产自在97香蕉| 日韩成人一区二区| 久久精品国内一区二区三区| 日韩av中文字幕一区二区| 午夜av区久久| 全国精品久久少妇| 经典一区二区三区| 国产老女人精品毛片久久| 国产乱理伦片在线观看夜一区| 久久激五月天综合精品| 国产盗摄精品一区二区三区在线| 国产精品99久久久久久有的能看| 成人免费视频网站在线观看| 99精品国产视频| 在线观看中文字幕不卡| 欧美日韩国产天堂| 精品裸体舞一区二区三区| 久久精品一区二区三区av| 亚洲国产精品国自产拍av| 亚洲天堂成人网| 亚洲不卡一区二区三区| 国模无码大尺度一区二区三区| 成人综合在线网站| 在线观看日韩av先锋影音电影院| 欧美另类高清zo欧美| 久久久久久久久久久黄色| 自拍偷拍亚洲欧美日韩| 麻豆精品在线视频| av午夜一区麻豆| 欧美一区二区三区视频免费| 国产精品天美传媒| 日韩在线卡一卡二| 不卡一区二区中文字幕| 欧美另类z0zxhd电影| 欧美激情一区二区| 日韩成人午夜电影| 91蜜桃免费观看视频| 日韩欧美国产高清| 亚洲国产一区二区三区| 丁香婷婷深情五月亚洲| 欧美日韩大陆一区二区| 国产精品久久久久影院| 另类小说视频一区二区| 日本久久精品电影| 日本一区二区综合亚洲| 欧美aaaaaa午夜精品| 色综合中文字幕国产| 91麻豆精品国产91久久久资源速度| 国产欧美日韩久久| 理论电影国产精品| 欧美视频一区二区| 亚洲精品国产a久久久久久| 国产成人综合亚洲网站| 日韩一级片网站| 日日摸夜夜添夜夜添精品视频| 一本到不卡免费一区二区| 国产婷婷精品av在线| 激情综合色综合久久综合| 欧美日韩国产高清一区二区三区 | 91浏览器在线视频| 久久精品夜色噜噜亚洲a∨| 日本网站在线观看一区二区三区| 99热这里都是精品| 日本一区二区三区在线不卡| 国内精品不卡在线| 26uuu国产一区二区三区| 美女爽到高潮91| 欧美mv和日韩mv的网站| 免费人成网站在线观看欧美高清| 在线成人午夜影院| 天天影视色香欲综合网老头| 欧美三级电影在线看| 亚洲小说欧美激情另类| 精品污污网站免费看| 亚洲一区欧美一区| 欧美日韩小视频| 午夜激情一区二区| 欧美一区在线视频| 免费av成人在线| 精品福利二区三区| 国产成人午夜视频| 亚洲色图丝袜美腿| 色婷婷精品大视频在线蜜桃视频| 亚洲精品写真福利| 欧美区在线观看| 国产一区二区三区最好精华液| 精品国产乱码久久久久久久| 国产成人av一区二区| 国产精品午夜春色av| 色天使久久综合网天天| 亚洲成人午夜电影| 精品国产凹凸成av人导航| 国产精品99久久久久久久女警| 日本一区二区三区视频视频| 91在线播放网址| 日韩高清一区在线| 日本一区二区免费在线观看视频| 成人黄色av电影| 亚洲高清免费视频| 久久综合九色综合欧美就去吻| 国产激情一区二区三区| 尤物在线观看一区| 日韩欧美国产综合| 99国产精品国产精品毛片| 日韩在线播放一区二区| 国产偷国产偷精品高清尤物| 欧美图区在线视频| 国产一区二区三区免费看 | 欧美综合视频在线观看| 日本视频免费一区| 中文字幕色av一区二区三区| 日韩亚洲欧美成人一区| av一区二区三区黑人| 蜜臀av性久久久久蜜臀aⅴ四虎 | 欧美mv和日韩mv的网站| av中文字幕一区| 久久国产成人午夜av影院| 亚洲视频香蕉人妖| 亚洲精品在线三区| 欧美色网一区二区| 成人深夜福利app| 麻豆高清免费国产一区| 一区二区三区国产精华| 久久久久久黄色| 欧美一区二区三区啪啪| 色综合天天狠狠| 国产乱码精品一区二区三区忘忧草| 亚洲自拍偷拍九九九| 亚洲国产精品高清| 精品乱人伦小说| 91精品国产欧美一区二区| 91视频xxxx| 成人网在线播放| 国产在线视视频有精品| 蜜桃在线一区二区三区| 亚洲成人自拍偷拍| 亚洲一区二区三区在线播放| 亚洲视频香蕉人妖| 国产精品卡一卡二卡三| 国产丝袜在线精品| 久久久精品一品道一区| 日韩欧美国产精品| 欧美不卡一区二区三区| 欧美一区二区网站| 欧美一区2区视频在线观看| 欧美日韩大陆在线| 欧美日本一道本在线视频| 欧美亚洲国产一区二区三区| 色欧美日韩亚洲| 日本国产一区二区| 日本高清不卡视频| 欧美一a一片一级一片| 色视频成人在线观看免| 91黄色免费观看| 在线观看亚洲a| 国产精品久久久久影院老司| 国产视频视频一区| 国产欧美日韩在线观看| 中文字幕av资源一区| 日韩美女精品在线| 有码一区二区三区| 日韩不卡一区二区三区| 韩国视频一区二区| 国产成人午夜精品5599| 99re视频精品| 欧美日韩一区不卡| 日韩免费看的电影| 国产日韩一级二级三级| 亚洲日本中文字幕区| 亚洲成av人片在线观看| 奇米影视一区二区三区| 国产综合色在线视频区| 99久久精品免费看| 欧美三级韩国三级日本一级| 日韩精品一区二区三区视频播放 | 亚洲成人你懂的| 久久99精品国产麻豆婷婷| 大美女一区二区三区| 在线视频一区二区三区| 日韩精品最新网址| 国产精品视频第一区| 午夜久久久影院| 国产乱一区二区| 欧美三级在线视频| 久久综合丝袜日本网| 一区二区三区影院| 国产乱人伦偷精品视频不卡| 在线视频中文字幕一区二区| 日韩欧美激情在线| 亚洲精品videosex极品| 久久激情五月婷婷| 欧美中文字幕不卡| 久久精品视频网| 日本伊人色综合网| 91国产视频在线观看| 国产亚洲一二三区| 青青草精品视频|