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

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

?? os_cpu_a.s

?? avr ucos 代碼 測試環境:source insight WINAVR 4個進程
?? S
字號:
;********************************************************************************************************
;                                               uC/OS-II
;                                         The Real-Time Kernel
;
;                                          ATmega128 Specific code for V2.8x
;                                           (AVR-GCC 4.1.1)
;
;
; File         : OS_CPU_A.ASM
; By           : Xiawei   <xiawei0311@gmail.com>
; AVR-GCC  version : 4.1.1 , WinAVR 20070122
; Date       : September 9th,2007
;
;********************************************************************************************************
#include <avr/io.h>
#define OS_CPU_A
#include "../Config/OS_CFG.h"
#include "OS_CPU.h"

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




;********************************************************************************************************
;                                          PUBLIC DECLARATIONS
;********************************************************************************************************

                .global OSStartHighRdy
                .global OSCtxSw
                .global OSIntCtxSw
                .global TIMER0_COMP_vect
                .global OSTickISR
                .global OSTickISR2
                .global OS_CPU_SR_Save
                .global OS_CPU_SR_Restore

;********************************************************************************************************
;                                         EXTERNAL DECLARATIONS
;********************************************************************************************************

                .extern OSIntExit
                .extern OSIntNesting
                .extern OSPrioCur
                .extern OSPrioHighRdy
                .extern OSRunning
                .extern OSTaskSwHook
                .extern OSTCBCur
                .extern OSTCBHighRdy
                .extern OSTimeTick

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

; Push all registers and the status register	
.macro	PUSHRS
		push	r0
		push	r1
		push	r2
		push	r3
		push	r4
		push	r5
		push	r6
		push	r7
		push	r8
		push	r9
		push	r10
		push	r11
		push	r12
		push	r13
		push	r14
		push	r15
		push	r16
		push	r17
		push	r18
		push	r19
		push	r20
		push	r21
		push	r22
		push	r23
		push	r24
		push	r25
		push	r26
		push	r27
		push	r28
		push	r29
		push	r30
		push	r31
		in		r16,_SFR_IO_ADDR(SREG)
		push	r16

.endm

; Pop all registers and the status registers
.macro	POPRS

		pop		r16
		out		_SFR_IO_ADDR(SREG),r16
		pop		r31
		pop		r30
		pop		r29
		pop		r28
		pop		r27
		pop		r26
		pop		r25
		pop		r24
		pop		r23
		pop		r22
		pop		r21
		pop		r20
		pop		r19
		pop		r18
		pop		r17
		pop		r16
		pop		r15
		pop		r14
		pop		r13
		pop		r12
		pop		r11
		pop		r10
		pop		r9
		pop		r8
		pop		r7
		pop		r6
		pop		r5
		pop		r4
		pop		r3
		pop		r2
		pop		r1
		pop		r0

.endm

			.text
			.section	.text
			

;********************************************************************************************************
;                               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)
;                                                SPH 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) Call OSTaskSwHook() then,
;                      b) Set OSRunning to TRUE,
;                      c) Switch to the highest priority task.
;********************************************************************************************************

OSStartHighRdy:
   #if OS_CPU_HOOKS_EN > 0
                CALL   OSTaskSwHook                ; Invoke user defined context switch hook
   #endif 
                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 stack L pointer
                OUT     _SFR_IO_ADDR(SPL),R28
                LD      R29,Z+                      ;
                OUT     _SFR_IO_ADDR(SPH),R29

                POPRS                               ; Pop all registers and status register
                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)
;                                                SPH of (return) stack pointer
;                                                Flags to load in status register
;                                                R31
;                                                R30
;                                                R7
;                                                .
;                                                .
;                                                .
;                                                R0                                      (High memory)
;********************************************************************************************************

OSCtxSw:
                PUSHRS                              ; Save current tasks context

                LDS     R30,OSTCBCur                ; Z = OSTCBCur->OSTCBStkPtr
                LDS     R31,OSTCBCur+1              ;

                IN      r28,_SFR_IO_ADDR(SPL)
                ST      Z+,R28                      ; Save Y (R29:R28) pointer
                IN      r29,_SFR_IO_ADDR(SPH)
                ST      Z+,R29                      ;
#if OS_CPU_HOOKS_EN > 0
                CALL   OSTaskSwHook                ; Call user defined task switch hook
#endif
                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
                OUT     _SFR_IO_ADDR(SPL),R28
                LD      R29,Z+                      ;
                OUT     _SFR_IO_ADDR(SPH),R29

                POPRS                               ; Restore all registers and the status register
                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()
;			 							possible SREG save	
;                                         +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 --> Flags to load in status register         (Low memory)
;                                                R31
;                                                R30
;                                                R7
;                                                .
;                                                .
;                                                .
;                                                R0                                      (High memory)
;*********************************************************************************************************

OSIntCtxSw:
#if OS_CPU_HOOKS_EN > 0
                CALL   OSTaskSwHook                ; Call user defined task switch hook
#endif
                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
                OUT     _SFR_IO_ADDR(SPL),R28
                LD      R29,Z+                      ;
                OUT     _SFR_IO_ADDR(SPH),R29

                POPRS                               ; Restore all registers and status register
                RET

;********************************************************************************************************
;                                           SYSTEM TICK ISR
;
; Description : This function is the ISR used to notify uC/OS-II that a system tick has occurred.
;
;
;********************************************************************************************************
TIMER0_COMP_vect:
OSTickISR:
                PUSHRS                              ; Save all registers and status register

                LDS     R16,OSIntNesting            ; Notify uC/OS-II of ISR
                INC     R16                         ;
                STS     OSIntNesting,R16            ;
                
                CLZ                                 ;清零Z標志位,為下面的比較做好準備
                CPI     R16,1                       ;比較OSIntNesting是否為1
                BREQ    OSTickISR2                  ;如果是1,則跳轉至OSTickISR2
                
                SEI                                 ; Enable interrupts
                
                CALL   OSTimeTick                   ; Call uC/OS-IIs tick updating function

                CALL   OSIntExit                   ; Notify uC/OS-II about end of ISR

                POPRS                               ; Restore all registers and status register
                RET                                 ; Note: RET instead of RETI

OSTickISR2:
                LDS     R30,OSTCBCur                ; Z = OSTCBCur->OSTCBStkPtr
                LDS     R31,OSTCBCur+1              ;

                IN      r28,_SFR_IO_ADDR(SPL)
                ST      Z+,R28                      ; Save Y (R29:R28) pointer
                IN      r29,_SFR_IO_ADDR(SPH)
                ST      Z+,R29                      ;OSTCBCur->OSTCBStkPtr=SP

                SEI                                 ; 使能中斷,繼續執行OSTickISR中被打斷的指令(可選用)
                CALL   OSTimeTick                  ; Call uC/OS-IIs tick updating function

                CALL   OSIntExit                   ; Notify uC/OS-II about end of ISR

                POPRS                               ; Restore all registers and status register
                RET                                 ;

;********************************************************************************************************
;                            DISABLE/ENABLE INTERRUPTS USING OS_CRITICAL_METHOD #3
;
; Description : These functions are used to disable and enable interrupts using OS_CRITICAL_METHOD #3.
;
;               OS_CPU_SR  OSCPUSaveSR (void)
;                     Get current value of SREG
;                     Disable interrupts
;                     Return original value of SREG
;
;               void  OSCPURestoreSR (OS_CPU_SR cpu_sr)
;                     Set SREG to cpu_sr
;                     Return
;********************************************************************************************************

OS_CPU_SR_Save:
                IN      R16,_SFR_IO_ADDR(SREG)      ; Get current state of interrupts disable flag
                CLI                                 ; Disable interrupts
                RET                                 ; Return original SREG value in R16


OS_CPU_SR_Restore:
                OUT     _SFR_IO_ADDR(SREG),R16      ; Restore SREG
                RET                                 ; Return

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩久久久久久| 老司机免费视频一区二区| 岛国精品一区二区| 久久精品欧美一区二区三区不卡 | 综合亚洲深深色噜噜狠狠网站| 国产老肥熟一区二区三区| 国产女人水真多18毛片18精品视频| 国产一区二三区好的| 欧美韩国日本不卡| 欧洲视频一区二区| 免费精品视频在线| 欧美韩日一区二区三区四区| 91麻豆免费视频| 亚洲电影视频在线| 欧美精品一区二区三区蜜臀| 成人高清免费在线播放| 亚洲国产一区二区三区| 日韩午夜在线播放| www.99精品| 婷婷久久综合九色综合伊人色| 精品国产乱码久久久久久闺蜜| 成人精品gif动图一区| 视频在线观看91| 国产亚洲午夜高清国产拍精品 | 亚洲一区二区欧美日韩| 精品国产亚洲在线| 色综合久久久久| 九一九一国产精品| 日本一区中文字幕| 国产校园另类小说区| 欧美日韩一级片网站| 国产东北露脸精品视频| 午夜欧美2019年伦理| 欧美激情一区二区| 日韩一区二区三区四区 | 亚洲男人的天堂在线aⅴ视频| 777欧美精品| 99re热这里只有精品视频| 石原莉奈在线亚洲三区| 亚洲私人影院在线观看| 久久综合久久综合久久| 欧美性生活大片视频| 国产一区二区毛片| 天天影视网天天综合色在线播放| 国产三级欧美三级日产三级99| 欧美最猛性xxxxx直播| 成人爽a毛片一区二区免费| 日韩一区欧美二区| 亚洲一区二区三区不卡国产欧美| 中文一区在线播放| 欧美不卡一区二区| 91精品国产综合久久久蜜臀图片| 99精品视频在线观看| 国产精品自在欧美一区| 日本午夜精品一区二区三区电影| 亚洲精品免费看| 国产精品久久福利| 久久久精品免费观看| 日韩午夜av一区| 欧美女孩性生活视频| 色天天综合久久久久综合片| 成人午夜激情片| 国产一区 二区 三区一级| 日韩高清不卡在线| 天天射综合影视| 亚洲h精品动漫在线观看| 玉米视频成人免费看| 亚洲精品一卡二卡| 国产精品第五页| 亚洲欧美在线观看| 国产精品国产馆在线真实露脸| 久久久国际精品| 国产性天天综合网| 欧美激情一区二区三区蜜桃视频| 国产午夜精品在线观看| 国产人妖乱国产精品人妖| 国产视频911| 国产精品高清亚洲| 亚洲日本免费电影| 亚洲女与黑人做爰| 一区二区三区四区不卡视频| 亚洲一区精品在线| 五月婷婷综合激情| 青青草91视频| 国产一区视频在线看| 成人深夜福利app| 欧美人成免费网站| 欧美私人免费视频| 欧美一区二区三区人| 日韩精品中文字幕一区二区三区| 26uuu久久综合| 国产日韩精品一区二区浪潮av| 国产三级精品三级在线专区| 综合中文字幕亚洲| 天堂久久久久va久久久久| 日韩在线a电影| 国产酒店精品激情| 97精品久久久午夜一区二区三区| 在线视频观看一区| 精品国产精品网麻豆系列| 日本一区二区免费在线| 国产精品国模大尺度视频| 亚洲成人精品一区| 久久99九九99精品| 99精品桃花视频在线观看| 欧美情侣在线播放| 久久久99免费| 亚洲精品午夜久久久| 日韩精品欧美精品| 国产凹凸在线观看一区二区| 99在线热播精品免费| 91精品国产丝袜白色高跟鞋| 欧美国产一区二区在线观看| 亚洲一区二区三区四区在线免费观看| 日本不卡一二三| 成人高清av在线| 欧美一级国产精品| 亚洲欧美国产77777| 久久成人羞羞网站| 99re这里只有精品首页| 日韩女优毛片在线| 亚洲蜜臀av乱码久久精品蜜桃| 青青草国产成人av片免费| av动漫一区二区| 欧美一级欧美一级在线播放| 亚洲国产精品av| 亚洲成av人片一区二区| 成人夜色视频网站在线观看| 欧美高清激情brazzers| 国产精品天天看| 美女国产一区二区| 91视频在线观看免费| 久久久久免费观看| 午夜电影久久久| 不卡免费追剧大全电视剧网站| 欧美一区二区日韩| 日韩一区在线看| 国产美女视频一区| 5858s免费视频成人| 亚洲欧美一区二区久久| 国产大片一区二区| 日韩欧美成人午夜| 亚洲二区视频在线| 99国产精品久| 国产精品美日韩| 国产美女视频一区| 日韩欧美高清dvd碟片| 午夜精品福利一区二区三区av | 国产色一区二区| 麻豆专区一区二区三区四区五区| 精品美女在线播放| 亚洲成人第一页| 91国偷自产一区二区开放时间| 日本一区二区免费在线| 激情亚洲综合在线| 精品理论电影在线| 麻豆精品视频在线| 欧美一区二区免费观在线| 日韩激情一二三区| 欧美精品一卡二卡| 丝袜亚洲另类丝袜在线| 色婷婷综合久久久久中文一区二区| 日本一区二区电影| 99热这里都是精品| 亚洲少妇最新在线视频| 99久久精品99国产精品| 国产精品电影院| 97久久超碰国产精品电影| 国产精品三级电影| 国产精品一区不卡| 久久久久久久久97黄色工厂| 国产主播一区二区三区| 日韩欧美www| 韩国三级在线一区| 久久久久久亚洲综合| 国产一区二区精品久久99| 精品国产乱码久久久久久夜甘婷婷 | 91福利区一区二区三区| 亚洲黄色录像片| 欧美日韩视频在线一区二区| 午夜精品久久久久久久久久久| 欧美另类z0zxhd电影| 日韩成人一级片| 精品成人免费观看| 豆国产96在线|亚洲| 中文字幕在线一区| 色综合久久九月婷婷色综合| 亚洲18女电影在线观看| 欧美一区二区三区四区在线观看| 久久精品99国产精品| 久久久久综合网| 97久久精品人人做人人爽| 亚洲一区二区三区四区在线免费观看 | 欧美精品日韩一本| 九九视频精品免费| 国产亚洲欧洲一区高清在线观看| 99久久夜色精品国产网站| 亚洲美女屁股眼交3| 欧美一级黄色录像| 成人免费视频播放|