rt-thread-official/bsp/efm32/start_gcc.S

84 lines
2.4 KiB
ArmAsm
Raw Normal View History

/*
* Copyright (c) 2006-2022, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
2013-01-08 22:40:58 +08:00
* Date Author Notes
* 2010-12-21 onelife Initial creation for EFM32
* 2011-07-06 onelife Modify to make use the start code in libraries
* 2012-05-15 onelife Modified to compatible with CMSIS v3
*/
2013-01-08 22:40:58 +08:00
/***************************************************************************//**
* @addtogroup cortex-m3
* @{
*******************************************************************************/
.syntax unified
.cpu cortex-m3
.fpu softvfp
.thumb
/* start address for the initialization values of the .data section.
defined in linker script */
.word __etext
/* start address for the .data section. defined in linker script */
.word __data_start__
/* end address for the .data section. defined in linker script */
.word __data_end__
/* start address for the .bss section. defined in linker script */
.word __bss_start__
/* end address for the .bss section. defined in linker script */
.word __bss_end__
/***************************************************************************//**
* @brief This is the code that gets called when the processor first
* starts execution following a reset event. Only the absolutely
* necessary set is performed, after which the application
* supplied main() routine is called.
* @param None
* @retval None
*******************************************************************************/
.thumb
.thumb_func
.section .cs3.init,"ax", %progbits
.globl _start
.type _start, %function
_start:
/* Copy the data segment initializers from flash to SRAM */
movs r1, #0
b LoopCopyDataInit
CopyDataInit:
ldr r3, =__etext
ldr r3, [r3, r1]
str r3, [r0, r1]
adds r1, r1, #4
LoopCopyDataInit:
ldr r0, =__data_start__
ldr r3, =__data_end__
adds r2, r0, r1
cmp r2, r3
bcc CopyDataInit
ldr r2, =__bss_start__
b LoopFillZerobss
/* Zero fill the bss segment. */
FillZerobss:
movs r3, #0
str r3, [r2], #4
LoopFillZerobss:
ldr r3, = __bss_end__
cmp r2, r3
bcc FillZerobss
/* Call the application's entry point.*/
bl main
bx lr
.size _start, .-_start
/***************************************************************************//**
* @}
*******************************************************************************/