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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? os_cpu_a.s

?? ARM7 based on STR71x, UCOS migration
?? S
字號:
;********************************************************************************************************
;						uC/OS-II
;					The Real-Time Kernel
;
;				(c) Copyright 1992-2004, STMicroelectronics
;					    All Rights Reserved
;
;					uC/OS Generic Port for STR710
;						C Compiler
;
; File : OS_CPU_A.S
; By   : Yujun Huang
;********************************************************************************************************

	IMPORT  OSRunning		; External references
	IMPORT  OSPrioCur
	IMPORT  OSPrioHighRdy
	IMPORT  OSTCBCur
	IMPORT  OSTCBHighRdy
	IMPORT  OSIntNesting
	IMPORT  OSIntExit
	IMPORT  OSTaskSwHook

	EXPORT  OS_CPU_ICR_Save		; Functions declared in this file
	EXPORT  OS_CPU_ICR_Restore
	EXPORT  OSStartHighRdy
	EXPORT  OSCtxSw
	EXPORT  OSIntCtxSw

	PRESERVE8
	AREA OS_CPU, CODE, READONLY

EIC_ICR		EQU	0xFFFFF800

;NO_INT		EQU	0xC0	; Mask used to disable interrupts (Both FIR and IRQ)
MODE_SYS	EQU	0x1F	; available on ARM Arch 4 and later
MODE_FIQ	EQU	0x11
MODE_IRQ	EQU	0x12

CLOSE_INT	EQU	0x03	; Mask used to disable interrupts using STR7 register
I_Bit		EQU	0x80	; when I bit is set, IRQ is disabled
F_Bit		EQU	0x40	; when F bit is set, FIQ is disabled

;*********************************************************************************************************
;				CRITICAL SECTION METHOD 3 FUNCTIONS
;
; Description: Disable/Enable interrupts by preserving the state of interrupts.  Generally speaking you
;              would store the state of the interrupt disable flag in the local variable 'cpu_sr' and then
;              disable interrupts.  'cpu_sr' is allocated in all of uC/OS-II's functions that need to 
;              disable interrupts.  You would restore the interrupt disable state by copying back 'cpu_sr'
;              into the CPU's status register.
;
; Prototypes :     OS_CPU_SR  OS_CPU_SR_Save(void);
;                  void       OS_CPU_SR_Restore(OS_CPU_SR cpu_sr);
;
;
; Note(s)    : 1) These functions are used in general like this:
;
;                 void Task (void *pdata)
;                 {
;                 #if OS_CRITICAL_METHOD == 3          // Allocate storage for CPU status register
;                     OS_CPU_SR  cpu_sr;
;                 #endif
;
;                          :
;                          :
;                     OS_ENTER_CRITICAL();             // cpu_sr = OS_CPU_SaveSR();
;                          :
;                          :
;                     OS_EXIT_CRITICAL();              // OS_CPU_RestoreSR(cpu_sr);
;                          :
;                          :
;                 }
;
;              2) OS_CPU_SaveSR() is implemented as recommended by Atmel's application note:
;
;                    "Disabling Interrupts at Processor Level"
;*********************************************************************************************************
OS_CPU_ICR_Save
	LDR	R1,=EIC_ICR		; Get the address of Interrupt Control Register
	LDR	R0,[R1]			; Resd the register to R0
	ORR	r2,r0,#CLOSE_INT	; Disable the interrupt
	STR	r2,[R1]			; store the data to register
	LDR	r2,[R1]			; Confirm that Register contains the proper interrupt disable flags
	AND	r2,r2,#CLOSE_INT
	CMP	r2,#CLOSE_INT
	BNE	OS_CPU_ICR_Save		; Not properly disabled (try again)
	MOV	pc,lr

OS_CPU_ICR_Restore
        LDR	R1,=EIC_ICR
	STR	R0,[R1]			; store the data to register
	MOV	pc,lr

;*********************************************************************************************************
;                                          START MULTITASKING
;                                       void OSStartHighRdy(void)
;
; Note(s) : 1) OSStartHighRdy() MUST:
;              a) Call OSTaskSwHook() then,
;              b) Set OSRunning to TRUE,
;              c) Switch to the highest priority task.
;*********************************************************************************************************
	EXPORT 	OSCtxSw
	IMPORT	OSPrioCur
	IMPORT	OSPrioHighRdy
	IMPORT	OSTCBCur
	IMPORT	OSTaskSwHook
	IMPORT	OSTCBHighRdy

OSStartHighRdy
	BL	OSTaskSwHook		; OSTaskSwHook();

	LDR	R4,_OS_Running
	MOV	R5,#1
	STRB	R5,[R4]			; OSRunning --> TRUE

					; Switch to highest priority task
	LDR	R4,_OS_TCBHighRdy	;    Get highest priority task TCB address
	LDR	R4,[R4]			;    get stack pointer
	LDR	SP,[R4]			;    switch to the new stack

	LDMFD	SP!,{R4}		;    pop new task's CPSR
	MSR	CPSR_cxsf,R4
	LDMFD	SP!,{R0-R12,LR,PC}	;    pop new task's R0-R12,LR & PC

;*********************************************************************************************************
;				PERFORM A CONTEXT SWITCH (From task level) - OSCtxSw()
;
; Note(s) : 1) OSCtxSw() is called in SYS mode with BOTH FIQ and IRQ interrupts DISABLED
;
;           2) The pseudo-code for OSCtxSw() is:
;              a) Save the current task's context onto the current task's stack
;              b) OSTCBCur->OSTCBStkPtr = SP;
;              c) OSTaskSwHook();
;              d) OSPrioCur             = OSPrioHighRdy;
;              e) OSTCBCur              = OSTCBHighRdy;
;              f) SP                    = OSTCBHighRdy->OSTCBStkPtr;
;              g) Restore the new task's context from the new task's stack
;              h) Return to new task's code
;
;           3) Upon entry: 
;              OSTCBCur      points to the OS_TCB of the task to suspend
;              OSTCBHighRdy  points to the OS_TCB of the task to resume
;*********************************************************************************************************
OSCtxSw
					; Save current task's context
	STMFD	SP!,{LR}		;    push PC (lr should be pushed in place of PC)
	STMFD	SP!,{R0-R12,LR}		;    push LR & register file
	MRS	R4,CPSR
	STMFD	SP!,{R4}		;    push current CPSR

	LDR	R4,_OS_TCBCur		; OSTCBCur->OSTCBStkPtr = SP;
	LDR	R5,[R4]
	STR	SP,[R5]

	BL	OSTaskSwHook		; OSTaskSwHook();

	LDR	R4,_OS_PrioCur
	LDR	R5,_OS_PrioHighRdy
	LDRB	R6,[R5]
	STRB	R6,[R4]			; OSPrioCur <-- OSPrioHighRdy
	
	LDR	R4,_OS_TCBCur
	LDR	R6,_OS_TCBHighRdy
	LDR	R6,[R6]
	STR	R6,[R4]			; OSTCBCur <-- OSTCBHighRdy;

	LDR	SP,[R6]			; SP = OSTCBHighRdy->OSTCBStkPtr;

					; Restore new task's context
	LDMFD	SP!,{R4}		;    pop new task's CPSR
	MSR	CPSR_cxsf,r4
	LDMFD	SP!,{R0-R12,LR,PC}	;    pop new task's R0-R12,LR & PC

;*********************************************************************************************************
;			PERFORM A CONTEXT SWITCH (From interrupt level) - OSIntCtxSw()
;
; Note(s) : 1) OSIntCtxSw() is called in SYS mode with BOTH FIQ and IRQ interrupts DISABLED
;
;           2) The pseudo-code for OSCtxSw() is:
;              a) OSTaskSwHook();
;              b) OSPrioCur             = OSPrioHighRdy;
;              c) OSTCBCur              = OSTCBHighRdy;
;              d) SP                    = OSTCBHighRdy->OSTCBStkPtr;
;              e) Restore the new task's context from the new task's stack
;              f) Return to new task's code
;
;           3) Upon entry: 
;              OSTCBCur      points to the OS_TCB of the task to suspend
;              OSTCBHighRdy  points to the OS_TCB of the task to resume
;*********************************************************************************************************
OSIntCtxSw
	BL	OSTaskSwHook		; OSTaskSwHook();

	LDR	R4,_OS_PrioCur		; OSPrioCur = OSPrioHighRdy
	LDR	R5,_OS_PrioHighRdy
	LDRB	R6,[R5]
	STRB	R6,[R4]

	LDR	R4,_OS_TCBCur		; OSTCBCur  = OSTCBHighRdy;
	LDR	R6,_OS_TCBHighRdy
	LDR	R6,[R6]
	STR	R6,[R4]

	LDR	SP,[R6]			; SP = OSTCBHighRdy->OSTCBStkPtr;

					; Restore new task's context
	LDMFD	SP!,{R4}		;    pop new task's CPSR
	MSR	CPSR_cxsf,r4
	LDMFD	SP!,{R0-R12,LR,PC}	;    pop new task's R0-R12,LR & PC

;*********************************************************************************************************
;				FIQ Interrupt Service Routine
;*********************************************************************************************************
OS_CPU_FIQ_ISR


;*********************************************************************************************************
;				POINTERS TO VARIABLES
;*********************************************************************************************************
_OS_IntNesting	DCD	OSIntNesting

_OS_PrioCur	DCD	OSPrioCur

_OS_PrioHighRdy	DCD	OSPrioHighRdy

_OS_Running	DCD	OSRunning

_OS_TCBCur	DCD	OSTCBCur

_OS_TCBHighRdy	DCD	OSTCBHighRdy

	END

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品五月天| 中文字幕免费不卡| 丁香六月久久综合狠狠色| 亚洲一卡二卡三卡四卡五卡| 欧美一区二区三区四区视频| 99精品久久只有精品| 美女www一区二区| 亚洲精品福利视频网站| 久久蜜桃香蕉精品一区二区三区| 在线精品视频一区二区| 国内精品在线播放| 日韩高清欧美激情| 一区二区三区蜜桃| 中文子幕无线码一区tr| 日韩精品一区二区三区中文精品 | 精品在线亚洲视频| 亚洲一二三区在线观看| 国产精品久久久久久久久免费相片| 7777精品伊人久久久大香线蕉超级流畅 | 91精品国模一区二区三区| 99久久精品情趣| 国产成人在线电影| 国产一区二三区| 蜜桃在线一区二区三区| 亚洲国产美女搞黄色| 亚洲男同性恋视频| 一色桃子久久精品亚洲| 日本一区二区三区视频视频| 精品久久五月天| 日韩欧美国产一二三区| 91麻豆精品国产无毒不卡在线观看| 色女孩综合影院| 一本色道久久综合狠狠躁的推荐 | 日韩免费一区二区| 欧美福利电影网| 欧美欧美欧美欧美| 5566中文字幕一区二区电影| 色狠狠av一区二区三区| 91视频精品在这里| 一本在线高清不卡dvd| 99天天综合性| 一本久久a久久免费精品不卡| www.欧美日韩国产在线| 99久久精品免费| 99久久99精品久久久久久 | 欧美日韩另类国产亚洲欧美一级| 在线看不卡av| 91精品欧美久久久久久动漫| 欧美成人欧美edvon| 久久久久久久综合色一本| 久久久国产综合精品女国产盗摄| 久久久久99精品一区| 中文字幕巨乱亚洲| 亚洲视频在线一区二区| 亚洲尤物视频在线| 午夜久久久久久久久| 日本aⅴ亚洲精品中文乱码| 久久99精品国产麻豆婷婷洗澡| 久久99这里只有精品| 国产成人综合亚洲网站| 99精品视频在线观看| 欧洲一区在线观看| 日韩欧美中文字幕制服| 久久精品综合网| 亚洲欧美一区二区三区久本道91 | 国产精品传媒入口麻豆| 一区二区三区在线视频观看58| 香港成人在线视频| 激情偷乱视频一区二区三区| 成人的网站免费观看| 欧美亚洲免费在线一区| 日韩一卡二卡三卡四卡| 亚洲国产成人午夜在线一区| 一个色在线综合| 美女爽到高潮91| hitomi一区二区三区精品| 在线观看国产精品网站| 日韩免费高清电影| 日韩欧美中文字幕制服| 夜夜嗨av一区二区三区网页| 亚洲影院免费观看| 日本不卡视频在线观看| 卡一卡二国产精品 | 亚洲成人午夜影院| 一区二区在线观看免费| 亚洲一卡二卡三卡四卡五卡| 精品在线播放午夜| 天天综合日日夜夜精品| 视频一区在线视频| 色综合久久综合网| 一区在线中文字幕| 日韩精品免费视频人成| 国产高清久久久| 欧美日韩精品欧美日韩精品一综合| 欧美zozozo| 一区二区三区精品视频在线| 国产一区二区三区久久久| 欧美性生活一区| 国产亚洲精品bt天堂精选| 天堂一区二区在线免费观看| 成人永久免费视频| 日韩欧美在线影院| 一区二区高清视频在线观看| 久久综合色之久久综合| 亚洲女厕所小便bbb| 国产麻豆91精品| 51午夜精品国产| 亚洲欧美日韩国产成人精品影院 | 91视频你懂的| 久久久av毛片精品| 免费欧美日韩国产三级电影| 97久久超碰精品国产| 国产亚洲一区二区三区在线观看| 日韩精品一级中文字幕精品视频免费观看 | 91精品久久久久久蜜臀| 亚洲男人的天堂在线aⅴ视频| 国产一本一道久久香蕉| 91.com视频| 手机精品视频在线观看| 日本二三区不卡| 国产精品国产精品国产专区不蜜| 国产精品一区一区| 久久天堂av综合合色蜜桃网| 久热成人在线视频| 日韩亚洲欧美成人一区| 视频一区国产视频| 欧美精品乱码久久久久久按摩| 一区二区三区不卡视频在线观看 | 一区二区日韩电影| jlzzjlzz亚洲日本少妇| 国产精品另类一区| 成人一区二区在线观看| 中文字幕乱码久久午夜不卡| 国产高清不卡二三区| 久久久久久影视| 国产一区二区三区久久久| 国产亚洲综合在线| 国产精品系列在线观看| 中文字幕av一区二区三区| 成人午夜伦理影院| 国产精品久久久久久久久动漫| 成人免费看片app下载| 中文字幕一区二区三区四区不卡| 成人av第一页| 亚洲欧美一区二区三区极速播放| 色播五月激情综合网| 亚洲国产欧美另类丝袜| 91精品国产欧美一区二区成人| 蜜臀va亚洲va欧美va天堂| 欧美精品一区二区蜜臀亚洲| 国产乱码精品1区2区3区| 国产日韩精品一区| 99re免费视频精品全部| 伊人色综合久久天天人手人婷| 欧美性猛交一区二区三区精品| 婷婷六月综合网| 精品国产电影一区二区| 高清视频一区二区| 亚洲免费在线看| 8x8x8国产精品| 国产成人免费视频网站高清观看视频 | 欧美精品xxxxbbbb| 蜜臀av性久久久久蜜臀aⅴ流畅| 狠狠色狠狠色合久久伊人| 欧美激情一区二区三区| 97久久超碰国产精品电影| 亚洲福利一二三区| 亚洲精品一线二线三线| www.亚洲色图.com| 丝袜美腿亚洲一区二区图片| 久久久久久免费| 在线欧美日韩国产| 九九九久久久精品| 自拍av一区二区三区| 91精品国产综合久久久久久| 国产成人亚洲综合色影视| 一区二区三区免费看视频| 欧美大片在线观看一区二区| 白白色亚洲国产精品| 石原莉奈在线亚洲二区| 欧美国产视频在线| 欧美精品v国产精品v日韩精品| 国产激情一区二区三区桃花岛亚洲| 亚洲精品你懂的| 久久久综合九色合综国产精品| 在线免费观看一区| 丁香啪啪综合成人亚洲小说 | 精彩视频一区二区三区| 亚洲精品伦理在线| 久久久久国色av免费看影院| 欧美羞羞免费网站| 成人午夜短视频| 欧美a级一区二区| 亚洲乱码日产精品bd| 久久综合五月天婷婷伊人| 欧美男生操女生| 色悠悠亚洲一区二区| 国产成人精品免费在线| 日韩精品三区四区| 亚洲一区二区四区蜜桃|