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

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

?? os_cpu_a.asm

?? ucosII操作系統移植源代碼(包括詳細的移植步驟和心得)。
?? ASM
字號:
;/*
;*********************************************************************************************************
;*                                               uC/OS-II
;*                                               實時內核
;*
;*                                               版權所有
;*
;* 文件名 : OS_CPU_A.ASM
;* 作者   : Jean J. Labrosse
;* 改編   : 陳是知 北京中軟 2005。1。27
;*********************************************************************************************************
;*/

;偽指令詳細用法請查A51.PDF文件
;程序結構詳見《uC/OS-II》193-198頁

;不用此語句?。?! $CASE    ;標號和變量名區分大小寫

$NOMOD51
EA	BIT	0A8H.7
SP	DATA	081H
B	DATA	0F0H
ACC	DATA	0E0H
DPH	DATA	083H
DPL	DATA	082H
PSW	DATA	0D0H
TR0	BIT	088H.4
TH0	DATA	08CH
TL0	DATA	08AH
P4      DATA    0D8H

        NAME OS_CPU_A    ;模塊名
        
;定義重定位段
?PR?OSStartHighRdy?OS_CPU_A    SEGMENT CODE
?PR?OSCtxSw?OS_CPU_A           SEGMENT CODE
?PR?OSIntCtxSw?OS_CPU_A        SEGMENT CODE
?PR?OSTickISR?OS_CPU_A         SEGMENT CODE

?PR?_?serial?OS_CPU_A          SEGMENT CODE
        
;聲明引用全局變量和外部子程序
        EXTRN DATA  (?C_XBP)     ;仿真堆棧指針用于重入局部變量保存

        EXTRN IDATA (OSTCBCur)
        EXTRN IDATA (OSTCBHighRdy)
        EXTRN IDATA (OSRunning)
        EXTRN IDATA (OSPrioCur)
        EXTRN IDATA (OSPrioHighRdy)
    
        EXTRN CODE  (_?OSTaskSwHook)
        EXTRN CODE  (_?serial)
        EXTRN CODE  (_?OSIntEnter)
        EXTRN CODE  (_?OSIntExit)
        EXTRN CODE  (_?OSTimeTick)        
            
;對外聲明4個不可重入函數
        PUBLIC OSStartHighRdy
        PUBLIC OSCtxSw
        PUBLIC OSIntCtxSw
        PUBLIC OSTickISR
        
        ;PUBLIC SerialISR        
    
;分配堆??臻g。只關心大小,堆棧起點由keil決定,通過標號可以獲得keil分配的SP起點。
?STACK SEGMENT IDATA
        RSEG ?STACK
OSStack:
        DS 40H
OSStkStart IDATA OSStack-1

;定義壓棧出棧宏
PUSHALL    MACRO
        PUSH PSW
        PUSH ACC
        PUSH B
        PUSH DPL
        PUSH DPH
        MOV  A,R0   ;R0-R7入棧
        PUSH ACC
        MOV  A,R1
        PUSH ACC
        MOV  A,R2
        PUSH ACC
        MOV  A,R3
        PUSH ACC
        MOV  A,R4
        PUSH ACC
        MOV  A,R5
        PUSH ACC
        MOV  A,R6
        PUSH ACC
        MOV  A,R7
        PUSH ACC
        ;PUSH SP    ;不必保存SP,任務切換時由相應程序調整
        ENDM
    
POPALL    MACRO
        ;POP  ACC   ;不必保存SP,任務切換時由相應程序調整
        POP  ACC    ;R0-R7出棧
        MOV  R7,A
        POP  ACC
        MOV  R6,A
        POP  ACC
        MOV  R5,A
        POP  ACC
        MOV  R4,A
        POP  ACC
        MOV  R3,A
        POP  ACC
        MOV  R2,A
        POP  ACC
        MOV  R1,A
        POP  ACC
        MOV  R0,A
        POP  DPH
        POP  DPL
        POP  B
        POP  ACC
        POP  PSW
        ENDM
    
;子程序
;-------------------------------------------------------------------------
        RSEG ?PR?OSStartHighRdy?OS_CPU_A
OSStartHighRdy:
        USING 0    ;上電后51自動關中斷,此處不必用CLR EA指令,因為到此處還未開中斷,本程序退出后,開中斷。
        LCALL _?OSTaskSwHook
        
        ;OSRunning=TRUE
        MOV  R0,#LOW (OSRunning)
        MOV  @R0,#01

OSCtxSw_in:
    
        ;OSTCBHighRdy ===> DPTR  獲得當前TCB指針,詳見C51.PDF第178頁
        MOV  R0,#LOW (OSTCBHighRdy) ;獲得OSTCBHighRdy指針低地址,指針占3字節。+0類型+1高8位數據+2低8位數據
        INC  R0
        MOV  DPH,@R0    ;全局變量OSTCBCur在IDATA中
        INC  R0
        MOV  DPL,@R0
    
        ;OSTCBHighRdy->OSTCBStkPtr ===> DPTR  獲得用戶堆棧指針
        INC  DPTR        ;指針占3字節。+0類型+1高8位數據+2低8位數據
        MOVX A,@DPTR     ;.OSTCBStkPtr是void指針
        MOV  R0,A
        INC  DPTR
        MOVX A,@DPTR
        MOV  R1,A
        MOV  DPH,R0
        MOV  DPL,R1
    
        ;*UserStkPtr ===> R5  用戶堆棧起始地址內容(即用戶堆棧長度放在此處)  詳見文檔說明  指針用法詳見C51.PDF第178頁    
        MOVX A,@DPTR     ;用戶堆棧中是unsigned char類型數據
        MOV  R5,A        ;R5=用戶堆棧長度z
    
        ;恢復現場堆棧內容
        MOV  R0,#OSStkStart
        
restore_stack:
    
        INC  DPTR
        INC  R0
        MOVX A,@DPTR
        MOV  @R0,A
        DJNZ R5,restore_stack
    
        ;恢復堆棧指針SP
        MOV  SP,R0
    
        ;恢復仿真堆棧指針?C_XBP        
        INC  DPTR
        MOVX A,@DPTR
        MOV  ?C_XBP,A    ;?C_XBP 仿真堆棧指針高8位
        INC  DPTR
        MOVX A,@DPTR
        MOV  ?C_XBP+1,A  ;?C_XBP 仿真堆棧指針低8位
    

    
        POPALL
        SETB EA    ;開中斷
        RETI
;-------------------------------------------------------------------------
        RSEG ?PR?OSCtxSw?OS_CPU_A
OSCtxSw:  
        USING 0  
        PUSHALL

        ;獲得堆棧長度和起址
        MOV  A,SP
        CLR  C
        SUBB A,#OSStkStart
        MOV  R5,A     ;獲得堆棧長度        
    
        ;OSTCBCur ===> DPTR  獲得當前TCB指針,詳見C51.PDF第178頁
        MOV  R0,#LOW (OSTCBCur) ;獲得OSTCBCur指針低地址,指針占3字節。+0類型+1高8位數據+2低8位數據
        INC  R0
        MOV  DPH,@R0    ;全局變量OSTCBCur在IDATA中
        INC  R0
        MOV  DPL,@R0
    
        ;OSTCBCur->OSTCBStkPtr ===> DPTR  獲得用戶堆棧指針
        INC  DPTR        ;指針占3字節。+0類型+1高8位數據+2低8位數據
        MOVX A,@DPTR     ;.OSTCBStkPtr是void指針
        MOV  R0,A
        INC  DPTR
        MOVX A,@DPTR
        MOV  R1,A
        MOV  DPH,R0
        MOV  DPL,R1
        
        ;保存堆棧長度
        MOV  A,R5
        MOVX @DPTR,A
    
        MOV  R0,#OSStkStart  ;獲得堆棧起址
save_stack:
    
        INC  DPTR
        INC  R0
        MOV  A,@R0
        MOVX @DPTR,A
        DJNZ R5,save_stack
        
        ;保存仿真堆棧指針?C_XBP
        INC  DPTR
        MOV  A,?C_XBP    ;?C_XBP 仿真堆棧指針高8位
        MOVX @DPTR,A
        INC  DPTR
        MOV  A,?C_XBP+1  ;?C_XBP 仿真堆棧指針低8位
        MOVX @DPTR,A        
    
        ;調用用戶程序
        LCALL _?OSTaskSwHook
        
OSIntCtxSw_in:
        ;OSTCBCur = OSTCBHighRdy
        MOV  R0,#OSTCBCur
	MOV  R1,#OSTCBHighRdy
	MOV  A,@R1
        MOV  @R0,A
        INC  R0
	INC  R1
	MOV  A,@R1
        MOV  @R0,A
        INC  R0
	INC  R1
	MOV  A,@R1
        MOV  @R0,A
                
        ;OSPrioCur = OSPrioHighRdy  使用這兩個變量主要目的是為了使指針比較變為字節比較,以便節省時間。
        MOV  R0,#OSPrioCur
	MOV  R1,#OSPrioHighRdy
	MOV  A,@R1
        MOV  @R0,A
        
        LJMP OSCtxSw_in
;-------------------------------------------------------------------------
        RSEG ?PR?OSIntCtxSw?OS_CPU_A
        
OSIntCtxSw:
        USING 0
	LCALL _?OSTaskSwHook
        LJMP OSIntCtxSw_in
;-------------------------------------------------------------------------
        CSEG AT 000BH    ;OSTickISR
        LJMP OSTickISR   ;使用定時器0
        RSEG ?PR?OSTickISR?OS_CPU_A

OSTickISR:        
        
        USING 0
        CLR  EA    ;先關中斷,以防中斷嵌套。
        PUSHALL
        LCALL _?OSIntEnter    ;監視中斷嵌套
              
	CLR  TR0
        MOV  TH0,#70H    ;定義Tick=50次/秒(即0.02秒/次)
        MOV  TL0,#00H    ;OS_CPU_C.C  和  OS_TICKS_PER_SEC
         SETB TR0       
        
        LCALL _?OSTimeTick
        LCALL _?OSIntExit
        POPALL        
        RETI
;-------------------------------------------------------------------------
        CSEG AT 0023H    ;串口中斷
        LJMP SerialISR   ;工作于系統態,無任務切換。
        RSEG ?PR?_?serial?OS_CPU_A
        
SerialISR:
        
        USING 0
        CLR  EA    ;先關中斷,以防中斷嵌套。
        PUSHALL
        LCALL _?OSIntEnter    ;監視中斷嵌套
        
	
        LCALL _?serial        
        LCALL _?OSIntExit
	SETB EA
        POPALL        
        RETI
;-------------------------------------------------------------------------
        END
;-------------------------------------------------------------------------

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产成人私人影院tom| 日韩三级高清在线| 国产电影精品久久禁18| 麻豆一区二区三| 美女网站色91| 免费美女久久99| 美腿丝袜亚洲色图| 日韩 欧美一区二区三区| 天天综合网天天综合色| 久久国产精品99久久人人澡| 亚洲国产精品尤物yw在线观看| 亚洲毛片av在线| 午夜不卡在线视频| 久久国产精品免费| 成人综合激情网| 色婷婷激情久久| 欧美日韩一级黄| 日韩精品中午字幕| 中文字幕久久午夜不卡| 亚洲精品美国一| 亚洲成人在线免费| 日本亚洲三级在线| 国产高清在线精品| 色先锋久久av资源部| 欧美肥胖老妇做爰| 久久九九99视频| 亚洲成人午夜电影| 国产一区亚洲一区| 色综合久久88色综合天天| 欧美日韩极品在线观看一区| 精品少妇一区二区| 亚洲色图一区二区三区| 亚洲 欧美综合在线网络| 激情五月婷婷综合网| 成人黄色在线网站| 欧美高清激情brazzers| 国产欧美日韩综合| 亚洲尤物在线视频观看| 国产精品影视在线观看| 欧美综合一区二区三区| 久久精品网站免费观看| 亚洲在线观看免费| 不卡在线观看av| 在线电影国产精品| 中文字幕亚洲欧美在线不卡| 蜜臂av日日欢夜夜爽一区| 99国产精品久久久久久久久久久 | 日韩欧美一区二区久久婷婷| 久久久.com| 日韩精品一卡二卡三卡四卡无卡| 国产成人av电影在线| 91精品国产综合久久久久久漫画 | 色悠久久久久综合欧美99| 日韩欧美123| 亚洲国产aⅴ天堂久久| 成人在线一区二区三区| 精品国产亚洲一区二区三区在线观看| 一区二区三区在线视频免费| 粉嫩aⅴ一区二区三区四区五区| 制服视频三区第一页精品| 亚洲欧美日本韩国| 成人午夜视频网站| 久久久蜜臀国产一区二区| 日韩成人免费电影| 欧美日韩国产123区| 亚洲国产毛片aaaaa无费看 | 一级女性全黄久久生活片免费| 国产美女av一区二区三区| 91麻豆精品国产| 午夜激情综合网| 在线免费亚洲电影| 一区二区三区日韩精品| 色婷婷综合激情| 亚洲乱码国产乱码精品精小说 | 99精品热视频| 亚洲国产精品精华液2区45| 国产精选一区二区三区| 精品国产成人在线影院| 久久av老司机精品网站导航| 精品电影一区二区| 国产一区二区三区在线看麻豆| 久久亚洲综合色一区二区三区 | 国产日韩欧美一区二区三区乱码| 激情久久五月天| 久久久五月婷婷| 国产一区二区久久| 亚洲国产精品高清| 91视频国产观看| 香蕉乱码成人久久天堂爱免费| 欧美亚洲一区二区三区四区| 午夜精品免费在线观看| 91精品国产综合久久久久| 蜜臀av一级做a爰片久久| 久久日韩粉嫩一区二区三区| 韩国av一区二区三区| 中文字幕av一区二区三区| 色哟哟日韩精品| 性欧美疯狂xxxxbbbb| 精品国产乱码久久| av资源站一区| 亚洲成av人**亚洲成av**| 日韩免费看的电影| 国产精品亚洲综合一区在线观看| 国产精品国产自产拍高清av| 在线免费不卡电影| 韩国欧美国产1区| 国产精品国产三级国产普通话99 | 欧美三区免费完整视频在线观看| 日本免费新一区视频| 欧美激情在线一区二区三区| 日本久久一区二区三区| 久久国产夜色精品鲁鲁99| 国产精品理论在线观看| 正在播放一区二区| 国产xxx精品视频大全| 亚洲第一精品在线| 国产日韩精品一区二区三区| 欧美日本在线一区| 成人激情免费网站| 日韩av一区二区三区| 亚洲色图一区二区| 欧美精品一区视频| 欧美日韩中文字幕一区| 成人av在线播放网址| 美国十次综合导航| 亚洲va国产va欧美va观看| 亚洲欧美在线另类| 精品美女在线观看| 欧美疯狂性受xxxxx喷水图片| 粉嫩aⅴ一区二区三区四区| 日本va欧美va精品| 亚洲综合色噜噜狠狠| 国产精品少妇自拍| 久久免费偷拍视频| 欧美va在线播放| 欧美日韩国产一级| 欧美中文字幕亚洲一区二区va在线 | 国产精品一二三区| 免费观看在线色综合| 婷婷开心激情综合| 伊人色综合久久天天人手人婷| 国产精品久久久一区麻豆最新章节| 欧美一级黄色片| 欧美日韩国产电影| 欧美视频三区在线播放| 一本色道久久综合亚洲91| 91丝袜美女网| jlzzjlzz亚洲日本少妇| 成人av第一页| 成人av网址在线| 国产精品99久久久久久久vr | 成人动漫av在线| 国产白丝精品91爽爽久久| 国产激情一区二区三区四区| 久久国产麻豆精品| 激情五月婷婷综合| 国产精品 欧美精品| 国产乱码精品一区二区三区忘忧草 | 91在线国产观看| 99精品在线观看视频| 色婷婷av一区二区三区软件| 在线观看三级视频欧美| 欧美专区日韩专区| 666欧美在线视频| 欧美一级视频精品观看| 精品乱人伦小说| 26uuu亚洲| 国产精品天美传媒| 一区二区高清在线| 蜜桃av一区二区三区电影| 九色综合国产一区二区三区| 国产精品99久久久久| 91麻豆精品在线观看| 欧美色爱综合网| 精品人伦一区二区色婷婷| 国产拍欧美日韩视频二区| 亚洲精品第1页| 日韩国产精品久久| 国产伦精品一区二区三区免费 | 午夜视频一区二区三区| 热久久免费视频| 国产成人免费av在线| 欧美伊人精品成人久久综合97| 欧美一区二区高清| 中文字幕一区二区三区不卡在线| 亚洲精品亚洲人成人网| 免费观看日韩电影| 99久久精品99国产精品 | 精品系列免费在线观看| 成人免费看视频| 制服.丝袜.亚洲.另类.中文| 国产精品美女一区二区三区| 亚洲综合免费观看高清完整版| 久草这里只有精品视频| 91免费视频网址| 久久综合九色综合欧美98| 亚洲综合另类小说| 国产成人av一区二区三区在线| 欧美日韩国产精品成人| 中文字幕制服丝袜成人av |