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

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

?? os_cpu_a.s

?? 一個boot采集的測試程序!僅供ARM學習者參考。
?? S
字號:
;arm ml674000
;arm init.s
;data 21/07/05


SwiV		EQU	0x08
IrqV		EQU	0x18
FiqV		EQU	0x1C
NoInt		EQU	0x80

SVC32Mode	EQU	0x13
IRQ32Mode	EQU	0x12
FIQ32Mode	EQU	0x11

OSEnterSWI	EQU	0x00


BIT_TIMER0	EQU		(0x1<<13)
I_ISPC		EQU		0x1e00024
INTMSK		EQU		0x1e0000c



	AREA	|subr|, CODE, READONLY

ENTRY
	
	; External symbols we need the addresses of
			
  ;IMPORT	need_to_swap_context
	;IMPORT	IrqStart
	 IMPORT	OSTimeTick
	;IMPORT	IrqFinish

	;IMPORT	OutDebug
	;IMPORT	BreakPoint
	
	EXPORT IRQContextSwap
	
	
	
;;;;;;void OSCtxSW(void)
;;;;;;note 3
 
  IMPORT   OSTCBCur
  IMPORT   OSTaskSwHook
  IMPORT   OSTCBHighRdy
  IMPORT   OSPrioCur
  IMPORT   OSPrioHighRdy
  EXPORT   OSCtxSw
addr_OSTCBCur		DCD	OSTCBCur
addr_OSTCBHighRdy	DCD	OSTCBHighRdy
addr_OSPrioCur		DCD	OSPrioCur
addr_OSPrioHighRdy	DCD	OSPrioHighRdy
OSCtxSw
       stmfd  sp!,{lr}
       stmfd  sp!,{r0-r12,lr}
       mrs    r4,spsr
       stmfd  sp!,{r4}
      ; OSPrioCur = OSPrioHighRdy
        ldr r4,=OSPrioCur
        ldr r5,=OSPrioHighRdy
        ldrb r6,[r5]
        strb r6,[r4]
        
        ; Get current task TCB address
        ldr r4,=OSTCBCur
        ldr r5,[r4]
        str sp,[r5]                 ; store sp in preempted tasks's TCB

        bl OSTaskSwHook             ; call Task Switch Hook

        ; Get highest priority task TCB address
        ldr r6,=OSTCBHighRdy
        ldr r6,[r6]
        ldr sp,[r6]                 ; get new task's stack pointer

        ; OSTCBCur = OSTCBHighRdy
        str r6,[r4]                 ; set new current task TCB address
        ldmfd sp!,{r4}              ; pop new task's spsr
        msr SPSR_cxsf,r4
        ldmfd sp!,{r4}              ; pop new task's psr
        msr CPSR_cxsf,r4
        ldmfd sp!,{r0-r12,lr,pc}    ; pop new task's r0-r12,lr & pc
        
;;;;void OSIntCtxSw(void)
    IMPORT OSIntCtxSwFlag
    EXPORT OSIntCtxSw
OSIntCtxSw

        ;OSIntCtxSwFlag = True
        ldr r0,=OSIntCtxSwFlag
        mov r1,#1
        str r1,[r0]
        mov pc,lr
   
IRQContextSwap
        LDMIA    sp!,{a1-v1, lr}
        SUBS	pc, lr, #4


        SUB             lr, lr, #4
        MOV             r12, lr

        MRS             lr, SPSR
		AND				lr, lr, #0xFFFFFFE0
		ORR				lr, lr, #0xD3
        MSR             CPSR_cxsf, lr



	EXPORT	__Tick
__Tick
	STMDB    sp!,{r0-r11,lr}

	;interrupt disable(not nessary)
	mrs		r0, CPSR
	orr		r0, r0, #0x80		; and set IRQ disable flag
	msr		CPSR_cxsf, r0
	
	;End of interrupt
	;(Clear pending bit of INTPEND that don't accessed it.)
	;	rI_ISPC= BIT_TIMER0;
	LDR	r0, =I_ISPC
	LDR	r1, =BIT_TIMER0
	STR	r1, [r0]

	;BL	IrqStart
	
	;BL	OSTimeTick

	;BL	IrqFinish

	
	;LDR		r0, =need_to_swap_context
	LDR		r2, [r0]
	CMP		r2, #1
	LDREQ	pc, =_CON_SW


_NOT_CON_SW
	;not context switching
	LDMIA    sp!,{r0-r11, lr}
	SUBS	pc, lr, #4


_CON_SW
	;set need_to_swap_context is '0'
	MOV		r1, #0
	STR		r1, [r0]


	;now context switching
	LDMIA    sp!,{r0-r11,lr}
	SUB		lr, lr, #4

	STR				lr, SAVED_LR

	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	;Change Supervisor mode
	;!!!r12 register don't preserved. (r12 that PC of task)

    MRS             lr, SPSR
	AND				lr, lr, #0xFFFFFFE0
	ORR				lr, lr, #0x13
    MSR             CPSR_cxsf, lr


	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	;Now  Supervisor mode
	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	STR		r12, [sp, #-8]	; saved r12
	LDR		r12, SAVED_LR
	STMFD	sp!, {r12}		; r12 that PC of task
	SUB		sp, sp, #4		; inclease stack point
	LDMIA	sp!, {r12}		; restore r12
	STMFD	sp!, {lr}		; save lr
	STMFD	sp!, {r0-r12}	; save register file and ret address
	MRS		r4, CPSR
	STMFD	sp!, {r4}		; save current PSR
	MRS		r4, SPSR		; YYY+
	STMFD	sp!, {r4}		; YYY+ save SPSR


	; OSPrioCur = OSPrioHighRdy
	LDR	r4, addr_OSPrioCur
	LDR	r5, addr_OSPrioHighRdy
	LDRB	r6, [r5]
	STRB	r6, [r4]
	
	; Get current task TCB address
	LDR	r4, addr_OSTCBCur
	LDR	r5, [r4]
	STR	sp, [r5]		; store sp in preempted tasks's TCB

	; Get highest priority task TCB address
	LDR	r6, addr_OSTCBHighRdy
	LDR	r6, [r6]
	LDR	sp, [r6]		; get new task's stack pointer

	; OSTCBCur = OSTCBHighRdy
	STR	r6, [r4]		; set new current task TCB address

	LDMFD	sp!, {r4}		; YYY+
;	AND		r4, r4, #0xFFFFFF20
;	ORR		r4, r4, #0x13
	MSR	SPSR_cxsf, r4		; YYY+
	LDMFD	sp!, {r4}		; YYY+
;	AND		r4, r4, #0xFFFFFF20
;	ORR		r4, r4, #0x13
	MSR	CPSR_cxsf, r4		; YYY+
	LDMFD	sp!, {r0-r12, lr, pc}	; YYY+


SAVED_LR		DCD		0


;	void DisableInt(void)
;	void EnableInt(void)
;
;	Disable and enable IRQ and FIQ preserving current CPU mode.
;
	EXPORT	ARMDisableInt
ARMDisableInt
	STMDB	sp!, {r0}
	MRS		r0, CPSR
	ORR		r0, r0, #NoInt
	MSR		CPSR_cxsf, r0
	LDMIA	sp!, {r0}
	MOV	pc, lr


	EXPORT	ARMEnableInt
ARMEnableInt
	STMDB	sp!, {r0}
	MRS	r0, CPSR
	BIC	r0, r0, #NoInt
	MSR	CPSR_cxsf, r0
	LDMIA	sp!, {r0}
	MOV	pc, lr



;	void OS_TASK_SW(void)
;	
;	Perform a context switch.
;
;	On entry, OSTCBCur and OSPrioCur hold the current TCB and priority
;	and OSTCBHighRdy and OSPrioHighRdy contain the same for the task
;	to be switched to.
;
;	The following code assumes that the virtual memory is directly
;	mapped into  physical memory. If this is not true, the cache must 
;	be flushed at context switch to avoid address aliasing.
	EXPORT	OS_TASK_SW
OS_TASK_SW
	STMFD	sp!, {lr}		; save pc
	STMFD	sp!, {lr}		; save lr
	STMFD	sp!, {r0-r12}	; save register file and ret address
	MRS	r4, CPSR
	STMFD	sp!, {r4}		; save current PSR
	MRS	r4, SPSR		; YYY+
	STMFD	sp!, {r4}		; YYY+ save SPSR

	; OSPrioCur = OSPrioHighRdy
	LDR	r4, addr_OSPrioCur
	LDR	r5, addr_OSPrioHighRdy
	LDRB	r6, [r5]
	STRB	r6, [r4]
	
	; Get current task TCB address
	LDR	r4, addr_OSTCBCur
	LDR	r5, [r4]
	STR	sp, [r5]		; store sp in preempted tasks's TCB

	; Get highest priority task TCB address
	LDR	r6, addr_OSTCBHighRdy
	LDR	r6, [r6]
	LDR	sp, [r6]		; get new task's stack pointer

	; OSTCBCur = OSTCBHighRdy
	STR	r6, [r4]		; set new current task TCB address

	LDMFD	sp!, {r4}		; YYY+
	MSR	SPSR_cxsf, r4		; YYY+
	LDMFD	sp!, {r4}		; YYY+
	MSR	CPSR_cxsf, r4		; YYY+
	LDMFD	sp!, {r0-r12, lr, pc}	; YYY+



;	void OSStartHighRdy(void)
;	
;	Start the task with the highest priority;
;
	EXPORT	OSStartHighRdy
OSStartHighRdy
	LDR	r4, addr_OSTCBCur	; Get current task TCB address
	LDR	r5, addr_OSTCBHighRdy	; Get highest priority task TCB address

	LDR	r5, [r5]		; get stack pointer
	LDR	sp, [r5]		; switch to the new stack

	STR	r5, [r4]		; set new current task TCB address

	LDMFD	sp!, {r4}		; YYY
	MSR	SPSR_cxsf, r4
	LDMFD	sp!, {r4}		; get new state from top of the stack
	MSR	CPSR_cxsf, r4		; CPSR should be SVC32Mode
	LDMFD	sp!, {r0-r12, lr, pc }	; start the new task
	
	
        EXPORT  OSCPUSaveSR
OSCPUSaveSR

        mrs r0,CPSR
       ;orr r1,r0,#NOINT
        msr CPSR_c,r1
        mov pc,lr


        EXPORT  OSCPURestoreSR
OSCPURestoreSR

        msr CPSR_c,r0
        mov pc,lr


        END


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品亚洲第一| 国产精品一区二区男女羞羞无遮挡| 久久亚洲捆绑美女| 欧美成人a在线| 精品久久99ma| 久久久夜色精品亚洲| 久久久91精品国产一区二区三区| 26uuu久久综合| 国产日产欧美一区| 国产精品欧美久久久久无广告| 国产欧美一区二区精品久导航| 久久综合九色综合97婷婷女人 | 青青草国产成人99久久| 午夜不卡在线视频| 日韩精品三区四区| 国内外成人在线| 成人教育av在线| 色婷婷av一区二区三区软件| 欧美三级中文字幕| 日韩一区二区三区av| 久久久久久久久岛国免费| 国产精品美女久久久久aⅴ| 一区二区高清在线| 日本网站在线观看一区二区三区 | 欧亚一区二区三区| 欧美日韩一区二区三区四区五区 | 欧美一区二区日韩一区二区| xfplay精品久久| 国产精品丝袜黑色高跟| 亚洲一区二区av电影| 国内精品在线播放| 色哟哟精品一区| 欧美成人一级视频| 亚洲美女免费在线| 久草热8精品视频在线观看| 成人av在线观| 日韩一区二区视频在线观看| 国产亚洲精品资源在线26u| 亚洲精品中文在线| 国产精品一二三四区| 欧美亚洲动漫另类| 日本一区二区三区在线观看| 日韩国产欧美视频| 97se亚洲国产综合在线| 久久蜜桃av一区精品变态类天堂 | 欧美精品一区二区不卡| 一区二区三区高清| 国产福利一区二区三区视频| 欧美精品一卡二卡| 亚洲精品国产一区二区精华液| 国精产品一区一区三区mba视频 | 欧美a一区二区| 91麻豆swag| 国产精品乱人伦| 免费成人av在线| 欧美色精品天天在线观看视频| 久久精品人人爽人人爽| 秋霞av亚洲一区二区三| 欧美性大战xxxxx久久久| 国产精品毛片大码女人 | 久久精品人人做人人爽人人| 日韩有码一区二区三区| 欧美在线观看18| 国产精品久久久久久久岛一牛影视 | 在线一区二区三区| 亚洲欧洲成人自拍| 懂色av一区二区三区免费看| 日韩免费高清av| 日韩在线卡一卡二| 91.麻豆视频| 五月激情综合色| 欧美亚洲国产bt| 亚洲国产精品精华液网站| 在线视频国产一区| 亚洲综合一区在线| 日本黄色一区二区| 亚洲精品高清在线| 色婷婷精品久久二区二区蜜臀av | 欧美精品一区二区三区一线天视频| 午夜精彩视频在线观看不卡| 欧美专区亚洲专区| 夜夜揉揉日日人人青青一国产精品 | 色婷婷av一区二区| 亚洲第一久久影院| 日韩欧美国产高清| 国产精品羞羞答答xxdd| 国产农村妇女毛片精品久久麻豆| 国产成人啪免费观看软件| 国产精品情趣视频| 色偷偷成人一区二区三区91| 亚洲妇女屁股眼交7| 欧美精品自拍偷拍| 精品一区二区国语对白| 久久精品夜色噜噜亚洲aⅴ| 国产91高潮流白浆在线麻豆 | 日本欧美一区二区三区乱码 | 国产成人精品午夜视频免费| 国产精品视频免费| 欧美日韩一级片在线观看| 日本欧美加勒比视频| 国产午夜精品理论片a级大结局 | 日av在线不卡| 日本一区二区三区四区 | 精品99一区二区三区| 国产精品一区一区三区| 亚洲欧美日韩系列| 欧美一区二区三区免费视频| 国产一区二区美女| 亚洲精品福利视频网站| 亚洲日本丝袜连裤袜办公室| 在线观看视频一区二区| 久久久久国产一区二区三区四区 | 99re8在线精品视频免费播放| 色爱区综合激月婷婷| 久久精品久久99精品久久| 日本视频免费一区| 午夜精品一区二区三区免费视频 | 亚洲国产精品久久不卡毛片| 亚洲综合av网| 亚洲成av人片在线观看| 午夜私人影院久久久久| 婷婷国产在线综合| 久久超碰97中文字幕| 国产麻豆日韩欧美久久| 国产91精品一区二区| 99久久精品免费看| 91国偷自产一区二区开放时间| 在线视频一区二区免费| 欧美美女一区二区在线观看| 欧美高清www午色夜在线视频| 欧美丰满一区二区免费视频| 欧美一区二区三区免费大片| 日韩三级在线观看| 久久久高清一区二区三区| 国产拍揄自揄精品视频麻豆| √…a在线天堂一区| 午夜精品视频在线观看| 免费高清在线一区| 国产成人啪免费观看软件| 一本色道久久综合精品竹菊| 欧美视频你懂的| 日韩网站在线看片你懂的| 国产女主播一区| 亚洲一二三区不卡| 国产一区二区在线观看视频| 成人午夜激情片| 欧美天天综合网| 精品电影一区二区| 国产精品毛片久久久久久| 亚洲成a人片综合在线| 国产一区免费电影| 欧美天堂亚洲电影院在线播放| wwwwww.欧美系列| 亚洲一区二区精品久久av| 国产精品一区三区| 在线播放视频一区| 亚洲欧洲一区二区三区| 久久精品999| 91免费观看视频在线| 精品免费视频一区二区| 亚洲日穴在线视频| 国产一区二区精品久久91| 在线欧美日韩精品| 国产免费成人在线视频| 日本亚洲视频在线| 色狠狠综合天天综合综合| 欧美成人精品1314www| 亚洲激情在线激情| 成人app在线观看| 26uuu国产日韩综合| 午夜精品爽啪视频| 91网站在线播放| 欧美韩日一区二区三区| 看电影不卡的网站| 在线一区二区三区四区五区| 国产区在线观看成人精品| 五月天视频一区| 色噜噜偷拍精品综合在线| 国产亚洲女人久久久久毛片| 日韩在线卡一卡二| 欧美丝袜自拍制服另类| 亚洲少妇30p| 不卡在线视频中文字幕| 国产日产欧美一区二区三区 | 亚洲午夜电影在线| 成人激情免费网站| 亚洲欧美日韩在线| 成人免费看黄yyy456| 国产女人18毛片水真多成人如厕| 麻豆国产精品777777在线| 在线观看不卡视频| 亚洲精品国产视频| 91色.com| 一区二区三区日韩| 欧亚洲嫩模精品一区三区| 亚洲免费视频成人| 色av综合在线| 亚洲精品免费在线| 色欧美片视频在线观看在线视频| 成人欧美一区二区三区在线播放|