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

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

?? os_cpu_a.s

?? ucos-ii-at90S-icc-avr
?? S
字號:
;*******************************************************************************
;                                   uC/OS-II
;                             The Real-Time Kernel
;
;                         AT90 Specific code
;                               (ICC V6.21)
;
;
; File:			OS_CPU_A.S
; By:			
; Modified by:	
; Port Version:	V1.00
;
;
;*******************************************************************************

;include 

;*******************************************************************************
;                 I/O PORT ADDRESSES
;*******************************************************************************

SREG	=0x3F
SPH	=0x3E
SPL	=0x3D
TCNT0	=0x32

PIND    = 0x10
PORTD   = 0x12

;*******************************************************************************
;                MACROS
;*******************************************************************************

				; Push registers
.macro PUSHRS
                ST      -Y,R0	
                ST      -Y,R1
                ST      -Y,R2
                ST      -Y,R3
                ST      -Y,R4
                ST      -Y,R5
                ST      -Y,R6
                ST      -Y,R7
                ST      -Y,R8
                ST      -Y,R9
                ST      -Y,R10
                ST      -Y,R11
                ST      -Y,R12
                ST      -Y,R13
                ST      -Y,R14
                ST      -Y,R15
                ST      -Y,R16
                ST      -Y,R17
                ST      -Y,R18
                ST      -Y,R19
                ST      -Y,R20
                ST      -Y,R21
                ST      -Y,R22
                ST      -Y,R23
                ST      -Y,R24
                ST      -Y,R25
                ST      -Y,R26
                ST      -Y,R27
                ST      -Y,R30
                ST      -Y,R31
.endmacro

				; Pop registers
.macro POPRS
                LD      R31,Y+
                LD      R30,Y+
                LD      R27,Y+
                LD      R26,Y+
                LD      R25,Y+
                LD      R24,Y+
                LD      R23,Y+
                LD      R22,Y+
                LD      R21,Y+
                LD      R20,Y+
                LD      R19,Y+
                LD      R18,Y+
                LD      R17,Y+
                LD      R16,Y+
                LD      R15,Y+
                LD      R14,Y+
                LD      R13,Y+
                LD      R12,Y+
                LD      R11,Y+
                LD      R10,Y+
                LD      R9,Y+
                LD      R8,Y+
                LD      R7,Y+
                LD      R6,Y+
                LD      R5,Y+
                LD      R4,Y+
                LD      R3,Y+
                LD      R2,Y+
                LD      R1,Y+
                LD      R0,Y+
.endmacro

				; Push stack pointer
.macro PUSHSP
                IN      R16,SPH
                ST      -Y,R16
                IN      R16,SPL
                ST      -Y,R16
.endmacro

				; Pop stack pointer
.macro POPSP
                LD      R16,Y+
                OUT     SPL,R16
                LD      R16,Y+
                OUT     SPH,R16
.endmacro

				;Push SREG
.macro PUSHSREG
                IN      R16,SREG
                ST      -Y,R16
.endmacro

				; Pop SREG
.macro POPSREG
                LD      R16,Y+
                OUT     SREG,R16
.endmacro

.area    text(rel)


;*******************************************************************************
;               START HIGHEST PRIORITY TASK READY-TO-RUN
;
; Description : This function is called by OSStart() to start the highest
; priority task that was created by your application before calling OSStart().
;
; Note(s):
;	1) The (data)stack frame is assumed to look as follows:
;
;		OSTCBHighRdy->OSTCBStkPtr --> LSB of (return) stack pointer (Low memory)
;										MSB of (return) stack pointer
;										Flags to load in status register
;										R31
;										R30
;										R7
;										.
;										.
;										.
;										R0  (High memory)
;
;		where the stack pointer points to the task start address.
;
;
;	2) OSStartHighRdy() MUST:
;		a) RCALL OSTaskSwHook() then,
;		b) Set OSRunning to TRUE,
;		c) Switch to the highest priority task.
;*******************************************************************************

_OSStartHighRdy:: 
		LDS     R16,_OSRunning		; Indicate that we are multitasking
		INC     R16					
		STS     _OSRunning,R16		;
		
		LDS     R30,_OSTCBHighRdy	; Let Z point to TCB of highest priority task
		LDS     R31,_OSTCBHighRdy+1	; ready to run
		LD      R28,Z+				; Load Y (R29:R28) pointer
		LD      R29,Z+				;

                POPSP                               ; Restore stack pointer
                POPSREG                             ; Restore status register
                POPRS                               ; Restore all registers
	RET			; start task

;*******************************************************************************
;                 TASK LEVEL CONTEXT SWITCH
;
; Description : This function is called when a task makes a higher priority task
; ready-to-run.
;
; 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:
;
;		SP	+0 --> LSB of task code address
;			+1     MSB of task code address	(High memory)
;
;	3) The saved context of the task to resume looks as follows:
;
;		OSTCBHighRdy->OSTCBStkPtr --> LSB of (return) stack pointer (Low memory)
;                                     MSB of (return) stack pointer
;                                     Flags to load in status register
;                                     R31
;                                     R30
;                                     R7
;                                     .
;                                     .
;                                     .
;                                     R0    (High memory)
;*******************************************************************************

_OSCtxSw::      PUSHRS                              ; Save current task's context
                PUSHSREG
                PUSHSP

		LDS     R30,_OSTCBCur		; Z = OSTCBCur->OSTCBStkPtr
		LDS     R31,_OSTCBCur+1		;
		ST      Z+,R28				; Save Y (R29:R28) pointer
		ST      Z+,R29				;
	
		LDS     R16,_OSPrioHighRdy	; OSPrioCur = OSPrioHighRdy
		STS     _OSPrioCur,R16
	
		LDS     R30,_OSTCBHighRdy ; Let Z point to TCB of highest priority task
		LDS     R31,_OSTCBHighRdy+1	; ready to run
		STS     _OSTCBCur,R30		; OSTCBCur = OSTCBHighRdy
		STS     _OSTCBCur+1,R31 	;

		LD      R28,Z+		; Restore Y pointer
		LD      R29,Z+		;

                POPSP                               ; Restore stack pointer
                POPSREG                             ; Restore status register
                POPRS                               ; Restore all registers 
                RET

_OSTickISR::    
                PUSHRS                              ; Save interrupted task's context

                IN      R16,SREG
                SBR     R16,0x80                    ; Set interrupt bit in status reg and save
                ST      -Y,R16
;                PUSHSP

;avr-gcc ->11059200
                LDI     R16,256-(8000000/50/1024)   ; Reload timer to overflow at a rate of 50Hz
                OUT     TCNT0,R16                   ; at a prescaler of 1024 and 7.3728 MHz AVR clock

                LDS     R16,_OSIntNesting            ; Notify uC/OS-II of ISR
                INC     R16                         ;
                STS     _OSIntNesting,R16            ;
	
;why?
;                SEI                                 ; Enable interrupts
                RCALL   _OSTimeTick                  ; RCALL uC/OS-II's tick updating function
                RCALL   _OSIntExit                   ; Notify uC/OS-II about end of ISR

;                POPSP
                POPSREG                             ; Restore status register
                POPRS                               ; Restore all registers
;		SEI
		RET			; Note: RET instead of RETI

;*******************************************************************************
;               INTERRUPT LEVEL CONTEXT SWITCH
;
; Description : This function is called by OSIntExit() to perform a context
; switch to a task that has been made ready-to-run by an ISR.
;
; 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:
;
;		SP	+0 --> LSB of return address of OSIntCtxSw()   (Low memory)
;			+1     MSB of return address of OSIntCtxSw()
;			+2     LSB of return address of OSIntExit()
;			+3     MSB of return address of OSIntExit()
;			+4     LSB of task code address
;			+5     MSB of task code address		(High memory)
;
;	3) The saved context of the task to resume looks as follows:
;
;		OSTCBHighRdy->OSTCBStkPtr --> 	LSB of (return) stack pointer (Low mem)
;										MSB of (return) stack pointer
;										Flags to load in status register
;										R31
;										R30
;										R7
;										.
;										.
;										.
;										R0		(High memory)
;*******************************************************************************

_OSIntCtxSw::
		IN      R30,SPL				; Z = SP
		IN      R31,SPH
	;	ADIW    R30,4	; (Uncomment if OS_CRITICAL_METHOD is 1, see OS_CPU.H)
		ADIW    R30,5				; Adjust Z to point to task return address
		ST      -Y,R31				; Save SP
		ST      -Y,R30				;

		LDS     R30,_OSTCBCur                ; Z = OSTCBCur->OSTCBStkPtr
        LDS     R31,_OSTCBCur+1              ;
        ST      Z+,R28                      ; Save Y pointer
        ST      Z+,R29                      ;

        LDS     R16,_OSPrioHighRdy           ; OSPrioCur = OSPrioHighRdy
        STS     _OSPrioCur,R16               ;

        LDS     R30,_OSTCBHighRdy            ; Z = OSTCBHighRdy->OSTCBStkPtr
        LDS     R31,_OSTCBHighRdy+1          ;
        STS     _OSTCBCur,R30                ; OSTCBCur = OSTCBHighRdy
        STS     _OSTCBCur+1,R31              ;

        LD      R28,Z+                      ; Restore Y pointer
        LD      R29,Z+                      ;

                POPSP                               ; Restore stack pointer
                POPSREG                             ; Restore status register
                POPRS                               ; Restore saved registers
;               SEI
                RET

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久综合色播五月| 亚洲日本在线看| 国产精品精品国产色婷婷| 亚洲制服丝袜av| 国产露脸91国语对白| 欧美视频你懂的| 中文字幕精品综合| 久久成人麻豆午夜电影| 欧美午夜在线观看| 日韩伦理电影网| 国产99久久久国产精品| 精品久久久久99| 午夜久久久影院| 91极品视觉盛宴| 中文字幕一区日韩精品欧美| 久久99蜜桃精品| 6080yy午夜一二三区久久| 一区二区三区中文字幕| www..com久久爱| 国产日产欧产精品推荐色| 久久99久久99精品免视看婷婷 | 国产欧美一区在线| 六月婷婷色综合| 在线成人av网站| 日韩中文字幕不卡| 欧美日韩精品福利| 亚洲成人先锋电影| 欧美日韩国产精品成人| 亚洲国产另类av| 欧美精品自拍偷拍动漫精品| 图片区小说区国产精品视频| 欧美日韩www| 日日骚欧美日韩| 91麻豆精品91久久久久同性| 日韩中文字幕区一区有砖一区| 欧美乱妇15p| 日本大胆欧美人术艺术动态 | 91视视频在线观看入口直接观看www| 日本一二三不卡| 91亚洲永久精品| 亚洲伊人色欲综合网| 欧美日韩国产一二三| 日本伊人午夜精品| 久久久久久久av麻豆果冻| 国产精品123| 亚洲免费资源在线播放| 欧美性视频一区二区三区| 亚洲v日本v欧美v久久精品| 欧美日韩国产免费一区二区| 奇米色777欧美一区二区| 久久婷婷国产综合国色天香| 99麻豆久久久国产精品免费 | 国产精品久久毛片| 色综合天天在线| 亚洲h在线观看| 精品国产乱码久久久久久夜甘婷婷 | 99久久精品费精品国产一区二区| 中文字幕在线播放不卡一区| 91国产免费观看| 精品在线一区二区三区| 国产精品色在线| 精品污污网站免费看| 国产一区欧美一区| 天堂在线亚洲视频| 国产精品123| 一区二区三区精品| 日韩一级成人av| 成人激情av网| 日韩精品欧美精品| 国产精品入口麻豆九色| 在线观看日韩精品| 国产资源精品在线观看| 亚洲免费在线观看| 日韩欧美资源站| av电影天堂一区二区在线观看| 日韩精品国产欧美| 国产精品视频一二三区| 3atv一区二区三区| 成人ar影院免费观看视频| 天天色综合成人网| 国产精品青草综合久久久久99| 欧美日韩精品欧美日韩精品一 | 亚洲欧美精品午睡沙发| 51精品秘密在线观看| 不卡视频在线观看| 麻豆久久久久久| 一区二区免费看| 国产精品午夜在线| 精品入口麻豆88视频| 欧美艳星brazzers| av影院午夜一区| 国产成人av一区二区| 日本网站在线观看一区二区三区 | 一本一道久久a久久精品综合蜜臀| 蜜桃视频在线观看一区| 亚洲自拍偷拍九九九| 中文字幕一区在线观看| 国产日韩亚洲欧美综合| 日韩免费看的电影| 3d成人h动漫网站入口| 欧美日韩在线播放| 色国产综合视频| 色综合天天综合在线视频| 国产成人精品免费一区二区| 国产揄拍国内精品对白| 美国十次综合导航| 免费成人深夜小野草| 青青草97国产精品免费观看无弹窗版 | 亚洲r级在线视频| 一区二区三区日韩精品| 蜜臀国产一区二区三区在线播放| 91成人网在线| 白白色亚洲国产精品| 粉嫩一区二区三区性色av| 国产乱人伦偷精品视频免下载 | 国产河南妇女毛片精品久久久| 日本伊人色综合网| 日本成人在线不卡视频| 奇米影视一区二区三区| 六月丁香婷婷色狠狠久久| 青草国产精品久久久久久| 蜜桃91丨九色丨蝌蚪91桃色| 奇米一区二区三区| 国产在线一区观看| 国产99一区视频免费| 97超碰欧美中文字幕| 在线观看亚洲一区| 69堂国产成人免费视频| 精品久久久久久亚洲综合网| 久久久五月婷婷| |精品福利一区二区三区| 一区二区三区四区av| 丝袜a∨在线一区二区三区不卡| 美女网站色91| 麻豆视频观看网址久久| 夜夜爽夜夜爽精品视频| 亚洲成a人片在线观看中文| 亚洲成人你懂的| 久久精品噜噜噜成人88aⅴ| 国内久久婷婷综合| 91在线看国产| 欧美日韩电影一区| 久久先锋影音av鲁色资源网| 国产精品久久久久久妇女6080| 亚洲精品乱码久久久久久日本蜜臀| 亚洲一区二区精品久久av| 久久精品国产一区二区三区免费看| 国产精品一线二线三线精华| 色综合久久中文字幕综合网| 4438x成人网最大色成网站| 国产视频一区二区在线观看| 亚洲欧美精品午睡沙发| 另类小说欧美激情| av网站一区二区三区| 欧美夫妻性生活| 国产精品色在线| 日韩国产一二三区| www.爱久久.com| 亚洲一区二区视频| 日韩精品一卡二卡三卡四卡无卡| 国产在线视频精品一区| 色香蕉久久蜜桃| 久久综合色天天久久综合图片| 亚洲免费三区一区二区| 精品一区二区免费在线观看| 色综合久久综合网97色综合| 精品粉嫩超白一线天av| 亚洲综合久久久久| 国产91精品露脸国语对白| 欧美日韩高清一区| 综合婷婷亚洲小说| 久久精品国产77777蜜臀| 色网综合在线观看| 国产欧美视频一区二区三区| 日本欧洲一区二区| 欧洲亚洲国产日韩| 国产精品视频一二三区| 国产综合久久久久影院| 制服丝袜中文字幕一区| 亚洲综合视频网| 色综合久久中文综合久久牛| 国产精品美女视频| 国产精品亚洲专一区二区三区| 91精品久久久久久蜜臀| 亚洲午夜精品久久久久久久久| 成人动漫一区二区在线| 久久精品视频免费| 国产一区二区成人久久免费影院 | 国产婷婷色一区二区三区四区 | 日韩欧美自拍偷拍| 亚洲成人精品一区二区| 在线一区二区视频| 一区二区三区视频在线看| 97久久久精品综合88久久| 日本一区二区不卡视频| 成人av免费在线观看| 日本一二三不卡| 91污片在线观看| 亚洲另类中文字| 欧美在线观看视频一区二区三区|