⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ggt_cpu_a.s

📁 ARM下的多任务操作系统源码:GogotoOS
💻 S
字号:
/****************************************************************************************************
**                                        Gogoto OS
**                           (c) Copyright 2007-2008, luyigui(卢益贵)
**                                     All Rights Reserved
**                                         V1.00.0
**
**	                           狗狗兔嵌入式多任务系统(基于消息机制)    
**    					 绿城代码、GGT-OS、Gogoto OS、狗狗兔嵌入式、狗狗兔系统
**						    		 	QQ:48092788
**
**------------------文件信息------------------------------------------------------------------------
**  文件名: GGT_CPU_a.s
**  创建人: 卢益贵
**  日 期: 2007年12月8日
**  版  本: V1.00.0
**  描  述: Gogoto OS 与CPU相关的汇编核心代码部分,将所有移植可能与CPU和编译器相关的部分放置与此,
			方便移植。
**

**------------------修改记录------------------------------------------------------------------------
**  修改人:	卢益贵
**  版  本:
**  日 期: 2008年1月10日
**  描 述:
**

****************************************************************************************************/

/****************************************************************************************************
**  函数名: SWI_Handler?A
**  描  述: arm代码的软件中断服务程序,参数为:
**  输 入: 0:任务切换,1:关IRQ中断,达到独占CPU目的,2:开IRQ中断
**  输 出: 无
**  创建人: 卢益贵
**  日 期: 2007年12月8日

**------------------修改记录------------------------------------------------------------------------
**  修改人: 卢益贵
**  日 期: 2008年1月10日
**  说  明:	增加TaskLoad功能
**  原代码:
**--------------------------------------------------------------------------------------------------
****************************************************************************************************/


AREA ?C?SWI, CODE, READONLY, ALIGN=2

NOINT       EQU		0x80 

USR32MODE   EQU 	0x10 
SVC32MODE   EQU 	0x13
SYS32MODE   EQU 	0x1F  
IRQ32MODE   EQU 	0x12 
FIQ32MODE   EQU 	0x11

EXTERN DATA (pOSTskNow)
EXTERN DATA (pOSTskReady)

PUBLIC SWI_Handler?A

SWI_Handler?A    PROC CODE32
		CMP		R0, #4
        LDRLO   PC,[PC, R0, LSL #2]  ;if R0 < 6,PC = PC + R0*4,else next		
        MOVS	PC,LR

SWI_Function
        DD     TaskSW
		DD     TaskLoad
        DD     IRQLock
        DD     IRQUnlock
																	  
TaskSW
TaskSave
		STMDB	SP!,{R0-R1}
		STMDB	SP,{SP}^ 
		LDMDB	SP,{R0}
		STMDB	R0!,{LR}
		STMDB	R0!,{R2-R12,LR}^
		MRS		R1,SPSR
		LDMIA	SP!,{R2-R3}
		STMDB	R0!,{R1-R3}
		
		LDR     R1,=pOSTskNow
		LDR     R1,[R1]
		STR     R0,[R1,#4]

TaskLoad
		LDR		R4,=pOSTskNow		;当前任务变量地址
		LDR		R3,=pOSTskReady		;就绪任务变量地址
		MOV		R5, R3				;保存就绪任务变量地址
		LDR		R3,[R3]				;R3=就绪任务数据区地址
		STR		R3,[R4]				;pOSTskNow = pOSTskReady
		LDR		R3,[R3]				;R3=pOSTskReady-pNext
		STR		R3,[R5]				;pOSTskReady = pOSTskReady-pNext

		LDR     R4,[R4]
		LDR     LR,[R4,#4]
		LDMIA	LR!,{R2}
		MSR		SPSR_cxsf,R2
		ADD		R0,LR,#60
		STMDB	SP,{R0}
		LDMDB	SP,{SP}^
		LDMIA	LR!,{R0-R12,LR}^
		LDMIA	LR!,{LR}
		MOVS	PC, LR
		
IRQLock
       	MRS		R0, SPSR
        ORR		R0, R0, #NOINT
        MSR		SPSR_c, R0
        MOVS 	PC, LR 

IRQUnlock
        MRS		R0, SPSR
        BIC		R0, R0, #NOINT
        MSR 	SPSR_c, R0
        MOVS 	PC, LR 
        ENDP

END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -