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

📄 crt0_gnu.asm

📁 含t h r e a d x,u c o s 的b s p
💻 ASM
字号:
/*;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; $Workfile:   crt0_gnu.asm  $; $Revision:   1.0  $; $Author:   WellsK  $; $Date:   Jul 01 2003 09:05:34  $; ; Project: GNU C runtime startup code;; Description:;     This code sets up the basic code runtime environment for and;     application example started with the GNU toolset. This code;     clears out the ZI segment, initialize the stacks, and branches;     to the c_entry() function.;; Revision history:; $Log:   //smaicnt2/pvcs/VM/sharpmcu/archives/sharpmcu/software/csps/lh7a404/bsps/sdk7a404/examples/common/crt0_gnu.asm-arc  $; 
;    Rev 1.0   Jul 01 2003 09:05:34   WellsK
; Initial revision.
; ;  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SHARP MICROELECTRONICS OF THE AMERICAS MAKES NO REPRESENTATION; OR WARRANTIES WITH RESPECT TO THE PERFORMANCE OF THIS SOFTWARE,; AND SPECIFICALLY DISCLAIMS ANY RESPONSIBILITY FOR ANY DAMAGES, ; SPECIAL OR CONSEQUENTIAL, CONNECTED WITH THE USE OF THIS SOFTWARE.; ; SHARP MICROELECTRONICS OF THE AMERICAS PROVIDES THIS SOFTWARE SOLELY ; FOR THE PURPOSE OF SOFTWARE DEVELOPMENT INCORPORATING THE USE OF A ; SHARP MICROCONTROLLER OR SYSTEM-ON-CHIP PRODUCT. USE OF THIS SOURCE; FILE IMPLIES ACCEPTANCE OF THESE CONDITIONS.; ; COPYRIGHT (C) 2001 SHARP MICROELECTRONICS OF THE AMERICAS, INC.;     CAMAS, WA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;*/.EQU MODE_USR,     0x010.EQU MODE_FIQ,     0x011.EQU MODE_IRQ,     0x012.EQU MODE_SVC,     0x013.EQU MODE_SVC_NI,  0x0D3.EQU MODE_ABORT,   0x017.EQU MODE_UNDEF,   0x01b.EQU MODE_SYSTEM,  0x01f.EQU MODE_BITS,    0x01f.EQU I_MASK,       0x080.EQU F_MASK,       0x040.EQU IF_MASK,      0x0C0.EQU USR_STK_SIZE, 0x400    /* User mode stack size */.EQU FIQ_STK_SIZE, 0x400    /* FIQ mode stack size */.EQU IRQ_STK_SIZE, 0x800    /* IRQ mode stack size */.EQU ABT_STK_SIZE, 0x400    /* Abort exception stack size */.EQU UND_STK_SIZE, 0x400    /* Undefined exception stack size */.EQU SYS_STK_SIZE, 0x1000   /* System mode stack size */.EQU SVC_STK_SIZE, 0x4000   /* Supervisor mode stack size */    .text    .code 32    .align 0    .extern c_entry         /* Reference to c entry point */    .extern __gnu_bssstart  /* Start of the bss segment */    .extern __gnu_bssend    /* End of the bss segment */    .extern __end           /* End of segments, needed to define stack                               area */    .global __gccmain       /* public method */    .global __start         /* public code entry point */__start:    MOV r1, #IF_MASK        /* No Interrupts */    ORR r2, r1, #MODE_SVC   /* Supervisor mode with no interrupts */    MSR cpsr_cxsf, r2       /* Set ARM core mode to supervisor */    LDR r0, =__gnu_bssstart /* Get start of bss segment */    LDR r1, =__gnu_bssend   /* Get end of bss segment *//* Clear out the xero-init (ZI) data segment */    LDR r2, =0              /* r2 = 0 */zi_clear:    CMP r0, r1              /* Compare current and last clear address */    BGE zi_clear_done       /* Was this the last address? */    STR r2, [r0]            /* Not last address, clear data area */    ADD r0, r0, #4          /* Increment to next word address */    B zi_clear              /* Continue *//* After the ZI segment is cleared, set up the stacks needed for the   examples */zi_clear_done:    LDR r0, =__end          /* Get end of all segments */    MOV r1, #IF_MASK        /* No Interrupts */    /* Enter FIQ mode and setup the FIQ stack pointer */    ORR r2, r1, #MODE_FIQ    MSR cpsr_cxsf, r2    LDR r3, =FIQ_STK_SIZE    ADD r0, r0, r3    MOV r13, r0    /* Enter IRQ mode and setup the IRQ stack pointer */    ORR r2, r1, #MODE_IRQ    MSR cpsr_cxsf, r2    LDR r3, =IRQ_STK_SIZE    ADD r0, r0, r3    MOV r13, r0    /* Enter Abort mode and setup the Abort stack pointer */    ORR r2, r1, #MODE_ABORT    MSR cpsr_cxsf, r2    LDR r3, =ABT_STK_SIZE    ADD r0, r0, r3    MOV r13, r0    /* Enter Undefined mode and setup the Undefined stack pointer */    ORR r2, r1, #MODE_UNDEF    MSR cpsr_cxsf, r2    LDR r3, =UND_STK_SIZE    ADD r0, r0, r3    MOV r13, r0    /* Enter System mode and setup the User/System stack pointer */    ORR r2, r1, #MODE_SYSTEM    MSR cpsr_cxsf, r2    LDR r3, =SYS_STK_SIZE    ADD r0, r0, r3    MOV r13, r0    /* Enter SVC mode and setup the SVC stack pointer.       This is the mode for runtime initialization. */    ORR r2, r1, #MODE_SVC    MSR cpsr_cxsf, r2    LDR r3, =SVC_STK_SIZE    ADD r0, r0, r3    MOV r13, r0c_start:    BL c_entry              /* Jump to the c_entry() */exit:    B exit                  /* On exit, sit and spin *//* The function gccmain() is needed only for GNU toolsets */__gccmain:    MOV pc, lr              /* Just return - gnu specific	*/    .end

⌨️ 快捷键说明

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