rename to cdc_msc_freertos
This commit is contained in:
		| @@ -0,0 +1,6 @@ | ||||
| <!DOCTYPE Board_Memory_Definition_File> | ||||
| <root name="ATSAMD51J19A"> | ||||
|   <MemorySegment name="FLASH" start="0x00004000" size="0x0007C000" access="ReadOnly" /> | ||||
|   <MemorySegment name="RAM" start="0x20000000" size="0x00030000" access="Read/Write" /> | ||||
|   <MemorySegment name="RAM2" start="0x47000000" size="0x00002000" access="Read/Write" /> | ||||
| </root> | ||||
							
								
								
									
										23643
									
								
								examples/device/cdc_msc_freertos/ses/samd51/ATSAMD51J19A_Registers.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23643
									
								
								examples/device/cdc_msc_freertos/ses/samd51/ATSAMD51J19A_Registers.xml
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1227
									
								
								examples/device/cdc_msc_freertos/ses/samd51/ATSAMD51J19A_Vectors.s
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1227
									
								
								examples/device/cdc_msc_freertos/ses/samd51/ATSAMD51J19A_Vectors.s
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										128
									
								
								examples/device/cdc_msc_freertos/ses/samd51/SAMD51_Startup.s
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										128
									
								
								examples/device/cdc_msc_freertos/ses/samd51/SAMD51_Startup.s
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,128 @@ | ||||
| /***************************************************************************** | ||||
|  *                   SEGGER Microcontroller GmbH & Co. KG                    * | ||||
|  *            Solutions for real time microcontroller applications           * | ||||
|  ***************************************************************************** | ||||
|  *                                                                           * | ||||
|  *               (c) 2017 SEGGER Microcontroller GmbH & Co. KG               * | ||||
|  *                                                                           * | ||||
|  *           Internet: www.segger.com   Support: support@segger.com          * | ||||
|  *                                                                           * | ||||
|  *****************************************************************************/ | ||||
|  | ||||
| /***************************************************************************** | ||||
|  *                         Preprocessor Definitions                          * | ||||
|  *                         ------------------------                          * | ||||
|  * NO_FPU_ENABLE                                                             * | ||||
|  *                                                                           * | ||||
|  *   If defined, FPU will not be enabled.                                    * | ||||
|  *                                                                           * | ||||
|  * NO_STACK_INIT                                                             * | ||||
|  *                                                                           * | ||||
|  *   If defined, the stack pointer will not be initialised.                  * | ||||
|  *                                                                           * | ||||
|  * NO_SYSTEM_INIT                                                            * | ||||
|  *                                                                           * | ||||
|  *   If defined, the SystemInit() function will not be called. By default    * | ||||
|  *   SystemInit() is called after reset to enable the clocks and memories to * | ||||
|  *   be initialised prior to any C startup initialisation.                   * | ||||
|  *                                                                           * | ||||
|  * NO_VTOR_CONFIG                                                            * | ||||
|  *                                                                           * | ||||
|  *   If defined, the vector table offset register will not be configured.    * | ||||
|  *                                                                           * | ||||
|  * MEMORY_INIT                                                               * | ||||
|  *                                                                           * | ||||
|  *   If defined, the MemoryInit() function will be called. By default        * | ||||
|  *   MemoryInit() is called after SystemInit() to enable an external memory  * | ||||
|  *   controller.                                                             * | ||||
|  *                                                                           * | ||||
|  * STACK_INIT_VAL                                                            * | ||||
|  *                                                                           * | ||||
|  *   If defined, specifies the initial stack pointer value. If undefined,    * | ||||
|  *   the stack pointer will be initialised to point to the end of the        * | ||||
|  *   RAM segment.                                                            * | ||||
|  *                                                                           * | ||||
|  * VECTORS_IN_RAM                                                            * | ||||
|  *                                                                           * | ||||
|  *   If defined, the exception vectors will be copied from Flash to RAM.     * | ||||
|  *                                                                           * | ||||
|  *****************************************************************************/ | ||||
|  | ||||
|   .syntax unified | ||||
|  | ||||
|   .global Reset_Handler | ||||
|   .extern _vectors | ||||
|  | ||||
|   .section .init, "ax" | ||||
|   .thumb_func | ||||
|  | ||||
|   .equ VTOR_REG, 0xE000ED08 | ||||
|   .equ FPU_CPACR_REG, 0xE000ED88 | ||||
|  | ||||
| #ifndef STACK_INIT_VAL | ||||
| #define STACK_INIT_VAL __RAM_segment_end__ | ||||
| #endif | ||||
|  | ||||
| Reset_Handler: | ||||
| #ifndef NO_STACK_INIT | ||||
|   /* Initialise main stack */ | ||||
|   ldr r0, =STACK_INIT_VAL | ||||
|   bic r0, #0x7 | ||||
|   mov sp, r0 | ||||
| #endif | ||||
|  | ||||
| #ifndef NO_SYSTEM_INIT | ||||
|   /* Initialise system */ | ||||
|   ldr r0, =SystemInit | ||||
|   blx r0 | ||||
|   .pushsection .init_array, "aw", %init_array | ||||
|   .word SystemCoreClockUpdate | ||||
|   .popsection | ||||
| #endif | ||||
|  | ||||
| #ifdef MEMORY_INIT | ||||
|   ldr r0, =MemoryInit | ||||
|   blx r0 | ||||
| #endif | ||||
|  | ||||
| #ifdef VECTORS_IN_RAM | ||||
|   /* Copy exception vectors into RAM */ | ||||
|   ldr r0, =__vectors_start__ | ||||
|   ldr r1, =__vectors_end__ | ||||
|   ldr r2, =__vectors_ram_start__ | ||||
| 1: | ||||
|   cmp r0, r1 | ||||
|   beq 2f | ||||
|   ldr r3, [r0] | ||||
|   str r3, [r2] | ||||
|   adds r0, r0, #4 | ||||
|   adds r2, r2, #4 | ||||
|   b 1b | ||||
| 2: | ||||
| #endif | ||||
|  | ||||
| #ifndef NO_VTOR_CONFIG | ||||
|   /* Configure vector table offset register */ | ||||
|   ldr r0, =VTOR_REG | ||||
| #ifdef VECTORS_IN_RAM | ||||
|   ldr r1, =_vectors_ram | ||||
| #else | ||||
|   ldr r1, =_vectors | ||||
| #endif | ||||
|   str r1, [r0] | ||||
| #endif | ||||
|  | ||||
| #if (defined(__ARM_ARCH_FPV4_SP_D16__) || defined(__ARM_ARCH_FPV5_D16__)) && !defined(NO_FPU_ENABLE) | ||||
|   /* Enable FPU */ | ||||
|   ldr r0, =FPU_CPACR_REG | ||||
|   ldr r1, [r0] | ||||
|   orr r1, r1, #(0xF << 20) | ||||
|   str r1, [r0] | ||||
|   dsb | ||||
|   isb | ||||
| #endif | ||||
|  | ||||
|   /* Jump to program start */ | ||||
|   b _start | ||||
|  | ||||
|  | ||||
							
								
								
									
										19
									
								
								examples/device/cdc_msc_freertos/ses/samd51/SAMD51_Target.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								examples/device/cdc_msc_freertos/ses/samd51/SAMD51_Target.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | ||||
| /***************************************************************************** | ||||
|  *                   SEGGER Microcontroller GmbH & Co. KG                    * | ||||
|  *            Solutions for real time microcontroller applications           * | ||||
|  ***************************************************************************** | ||||
|  *                                                                           * | ||||
|  *               (c) 2017 SEGGER Microcontroller GmbH & Co. KG               * | ||||
|  *                                                                           * | ||||
|  *           Internet: www.segger.com   Support: support@segger.com          * | ||||
|  *                                                                           * | ||||
|  *****************************************************************************/ | ||||
|  | ||||
| function Reset() { | ||||
|   TargetInterface.resetAndStop(); | ||||
| } | ||||
|  | ||||
| function EnableTrace(traceInterfaceType) { | ||||
|   // TODO: Enable trace | ||||
| } | ||||
|  | ||||
| @@ -0,0 +1,37 @@ | ||||
| <!DOCTYPE Linker_Placement_File> | ||||
| <Root name="Flash Section Placement"> | ||||
|   <MemorySegment name="$(FLASH_NAME:FLASH)"> | ||||
|     <ProgramSection alignment="0x100" load="Yes" name=".vectors" start="$(FLASH_START:)" /> | ||||
|     <ProgramSection alignment="4" load="Yes" name=".init" /> | ||||
|     <ProgramSection alignment="4" load="Yes" name=".init_rodata" /> | ||||
|     <ProgramSection alignment="4" load="Yes" name=".text" /> | ||||
|     <ProgramSection alignment="4" load="Yes" name=".dtors" /> | ||||
|     <ProgramSection alignment="4" load="Yes" name=".ctors" /> | ||||
|     <ProgramSection alignment="4" load="Yes" name=".rodata" /> | ||||
|     <ProgramSection alignment="4" load="Yes" name=".ARM.exidx" address_symbol="__exidx_start" end_symbol="__exidx_end" /> | ||||
|     <ProgramSection alignment="4" load="Yes" runin=".fast_run" name=".fast" /> | ||||
|     <ProgramSection alignment="4" load="Yes" runin=".data_run" name=".data" /> | ||||
|     <ProgramSection alignment="4" load="Yes" runin=".tdata_run" name=".tdata" /> | ||||
|   </MemorySegment> | ||||
|   <MemorySegment name="$(RAM_NAME:RAM);SRAM"> | ||||
|     <ProgramSection alignment="0x100" load="No" name=".vectors_ram" start="$(RAM_START:$(SRAM_START:))" /> | ||||
|     <ProgramSection alignment="4" load="No" name=".fast_run" /> | ||||
|     <ProgramSection alignment="4" load="No" name=".data_run" /> | ||||
|     <ProgramSection alignment="4" load="No" name=".bss" /> | ||||
|     <ProgramSection alignment="4" load="No" name=".tbss" /> | ||||
|     <ProgramSection alignment="4" load="No" name=".tdata_run" /> | ||||
|     <ProgramSection alignment="4" load="No" name=".non_init" /> | ||||
|     <ProgramSection alignment="4" size="__HEAPSIZE__" load="No" name=".heap" /> | ||||
|     <ProgramSection alignment="8" size="__STACKSIZE__" load="No" place_from_segment_end="Yes" name=".stack" /> | ||||
|     <ProgramSection alignment="8" size="__STACKSIZE_PROCESS__" load="No" name=".stack_process" /> | ||||
|   </MemorySegment> | ||||
|   <MemorySegment name="$(FLASH2_NAME:FLASH2)"> | ||||
|     <ProgramSection alignment="4" load="Yes" name=".text2" /> | ||||
|     <ProgramSection alignment="4" load="Yes" name=".rodata2" /> | ||||
|     <ProgramSection alignment="4" load="Yes" runin=".data2_run" name=".data2" /> | ||||
|   </MemorySegment> | ||||
|   <MemorySegment name="$(RAM2_NAME:RAM2)"> | ||||
|     <ProgramSection alignment="4" load="No" name=".data2_run" /> | ||||
|     <ProgramSection alignment="4" load="No" name=".bss2" /> | ||||
|   </MemorySegment> | ||||
| </Root> | ||||
							
								
								
									
										146
									
								
								examples/device/cdc_msc_freertos/ses/samd51/samd51.emProject
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										146
									
								
								examples/device/cdc_msc_freertos/ses/samd51/samd51.emProject
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,146 @@ | ||||
| <!DOCTYPE CrossStudio_Project_File> | ||||
| <solution Name="samd51" target="8" version="2"> | ||||
|   <project Name="samd51"> | ||||
|     <configuration | ||||
|       Name="Common" | ||||
|       Placement="Flash" | ||||
|       Target="nRF52840_xxAA" | ||||
|       arm_architecture="v7EM" | ||||
|       arm_core_type="Cortex-M4" | ||||
|       arm_endian="Little" | ||||
|       arm_fp_abi="Hard" | ||||
|       arm_fpu_type="FPv4-SP-D16" | ||||
|       arm_interwork="No" | ||||
|       arm_linker_heap_size="1024" | ||||
|       arm_linker_process_stack_size="0" | ||||
|       arm_linker_stack_size="1024" | ||||
|       arm_simulator_memory_simulation_parameter="RX 00000000,00080000,FFFFFFFF;RWX 20000000,00030000,CDCDCDCD" | ||||
|       arm_target_debug_interface_type="ADIv5" | ||||
|       arm_target_device_name="ATSAMD51J19" | ||||
|       arm_target_interface_type="SWD" | ||||
|       build_treat_warnings_as_errors="Yes" | ||||
|       c_preprocessor_definitions="__SAMD51_FAMILY;__SAMD51J19A__;ARM_MATH_CM4;FLASH_PLACEMENT=1;USE_SIMPLE_ASSERT;BOARD_METRO_M4_EXPRESS;CFG_TUSB_MCU=OPT_MCU_SAMD51" | ||||
|       c_user_include_directories="./;../../src;$(rootDir)/hw;$(rootDir)/src;$(asf4Dir);$(asf4Dir)/CMSIS/Include;$(asf4Dir)/include;$(asf4Dir)/config;$(asf4Dir)/hri;$(asf4Dir)/hal/include;$(asf4Dir)/hal/utils/include;$(asf4Dir)/hpl/port;$(asf4Dir)/hpl/gclk;$(freertosDir)/Source/include;$(freertosDir)/Source/portable/GCC/ARM_CM4F" | ||||
|       debug_register_definition_file="ATSAMD51J19A_Registers.xml" | ||||
|       debug_target_connection="J-Link" | ||||
|       gcc_entry_point="Reset_Handler" | ||||
|       link_use_linker_script_file="No" | ||||
|       linker_memory_map_file="ATSAMD51J19A_MemoryMap.xml" | ||||
|       linker_section_placement_file="flash_placement.xml" | ||||
|       linker_section_placements_segments="FLASH RX 0x00000000 0x00080000;RAM RWX 0x20000000 0x00030000" | ||||
|       macros="DeviceFamily=SAMD51;Target=ATSAMD51J19A;Placement=Flash;rootDir=../../../../..;asf4Dir=../../../../../hw/mcu/microchip/samd/asf4/samd51;freertosDir=../../../../../lib/FreeRTOS" | ||||
|       project_directory="" | ||||
|       project_type="Executable" | ||||
|       target_reset_script="Reset();" | ||||
|       target_script_file="$(ProjectDir)/SAMD51_Target.js" | ||||
|       target_trace_initialize_script="EnableTrace("$(TraceInterfaceType)")" /> | ||||
|     <folder | ||||
|       Name="tinyusb" | ||||
|       exclude="" | ||||
|       filter="*.c;*.h" | ||||
|       path="../../../../../src" | ||||
|       recurse="Yes" /> | ||||
|     <folder Name="hw"> | ||||
|       <folder Name="bsp"> | ||||
|         <file file_name="../../../../../hw/bsp/board.h" /> | ||||
|         <folder Name="metro_m4_express"> | ||||
|           <file file_name="../../../../../hw/bsp/metro_m4_express/board_metro_m4_express.c" /> | ||||
|         </folder> | ||||
|       </folder> | ||||
|       <folder Name="mcu"> | ||||
|         <folder Name="microchip"> | ||||
|           <folder Name="samd"> | ||||
|             <folder Name="asf4"> | ||||
|               <folder Name="samd51"> | ||||
|                 <folder Name="gcc"> | ||||
|                   <file file_name="../../../../../hw/mcu/microchip/samd/asf4/samd51/gcc/system_samd51.c" /> | ||||
|                 </folder> | ||||
|                 <folder Name="hpl"> | ||||
|                   <folder Name="core"> | ||||
|                     <file file_name="../../../../../hw/mcu/microchip/samd/asf4/samd51/hpl/core/hpl_init.c" /> | ||||
|                   </folder> | ||||
|                   <folder Name="osc32kctrl"> | ||||
|                     <file file_name="../../../../../hw/mcu/microchip/samd/asf4/samd51/hpl/osc32kctrl/hpl_osc32kctrl.c" /> | ||||
|                   </folder> | ||||
|                   <folder Name="oscctrl"> | ||||
|                     <file file_name="../../../../../hw/mcu/microchip/samd/asf4/samd51/hpl/oscctrl/hpl_oscctrl.c" /> | ||||
|                   </folder> | ||||
|                   <folder Name="mclk"> | ||||
|                     <file file_name="../../../../../hw/mcu/microchip/samd/asf4/samd51/hpl/mclk/hpl_mclk.c" /> | ||||
|                   </folder> | ||||
|                   <folder Name="gclk"> | ||||
|                     <file file_name="../../../../../hw/mcu/microchip/samd/asf4/samd51/hpl/gclk/hpl_gclk.c" /> | ||||
|                   </folder> | ||||
|                 </folder> | ||||
|               </folder> | ||||
|             </folder> | ||||
|           </folder> | ||||
|         </folder> | ||||
|       </folder> | ||||
|     </folder> | ||||
|     <configuration Name="Debug" build_treat_warnings_as_errors="Yes" /> | ||||
|     <folder | ||||
|       Name="src" | ||||
|       exclude="" | ||||
|       filter="*.c;*.h" | ||||
|       path="../../src" | ||||
|       recurse="Yes" /> | ||||
|     <folder Name="System Files"> | ||||
|       <file file_name="ATSAMD51J19A_MemoryMap.xml" /> | ||||
|       <file file_name="ATSAMD51J19A_Registers.xml" /> | ||||
|       <file file_name="ATSAMD51J19A_Vectors.s" /> | ||||
|       <file file_name="flash_placement.xml" /> | ||||
|       <file file_name="SAMD51_Startup.s" /> | ||||
|       <file file_name="SAMD51_Target.js" /> | ||||
|       <file file_name="thumb_crt0.s" /> | ||||
|     </folder> | ||||
|     <folder | ||||
|       Name="segger_rtt" | ||||
|       exclude="" | ||||
|       filter="*.c;*.h" | ||||
|       path="../../../../../lib/segger_rtt" | ||||
|       recurse="No" /> | ||||
|     <folder Name="lib"> | ||||
|       <folder Name="FreeRTOS"> | ||||
|         <folder Name="Source"> | ||||
|           <folder Name="include"> | ||||
|             <file file_name="../../../../../lib/FreeRTOS/Source/include/croutine.h" /> | ||||
|             <file file_name="../../../../../lib/FreeRTOS/Source/include/deprecated_definitions.h" /> | ||||
|             <file file_name="../../../../../lib/FreeRTOS/Source/include/event_groups.h" /> | ||||
|             <file file_name="../../../../../lib/FreeRTOS/Source/include/FreeRTOS.h" /> | ||||
|             <file file_name="../../../../../lib/FreeRTOS/Source/include/list.h" /> | ||||
|             <file file_name="../../../../../lib/FreeRTOS/Source/include/message_buffer.h" /> | ||||
|             <file file_name="../../../../../lib/FreeRTOS/Source/include/mpu_prototypes.h" /> | ||||
|             <file file_name="../../../../../lib/FreeRTOS/Source/include/mpu_wrappers.h" /> | ||||
|             <file file_name="../../../../../lib/FreeRTOS/Source/include/portable.h" /> | ||||
|             <file file_name="../../../../../lib/FreeRTOS/Source/include/projdefs.h" /> | ||||
|             <file file_name="../../../../../lib/FreeRTOS/Source/include/queue.h" /> | ||||
|             <file file_name="../../../../../lib/FreeRTOS/Source/include/semphr.h" /> | ||||
|             <file file_name="../../../../../lib/FreeRTOS/Source/include/stack_macros.h" /> | ||||
|             <file file_name="../../../../../lib/FreeRTOS/Source/include/StackMacros.h" /> | ||||
|             <file file_name="../../../../../lib/FreeRTOS/Source/include/stream_buffer.h" /> | ||||
|             <file file_name="../../../../../lib/FreeRTOS/Source/include/task.h" /> | ||||
|             <file file_name="../../../../../lib/FreeRTOS/Source/include/timers.h" /> | ||||
|           </folder> | ||||
|           <folder Name="portable"> | ||||
|             <folder Name="GCC"> | ||||
|               <folder Name="ARM_CM4F"> | ||||
|                 <file file_name="../../../../../lib/FreeRTOS/Source/portable/GCC/ARM_CM4F/port.c" /> | ||||
|                 <file file_name="../../../../../lib/FreeRTOS/Source/portable/GCC/ARM_CM4F/portmacro.h" /> | ||||
|               </folder> | ||||
|             </folder> | ||||
|             <folder Name="MemMang"> | ||||
|               <file file_name="../../../../../lib/FreeRTOS/Source/portable/MemMang/heap_4.c" /> | ||||
|             </folder> | ||||
|           </folder> | ||||
|           <file file_name="../../../../../lib/FreeRTOS/Source/list.c" /> | ||||
|           <file file_name="../../../../../lib/FreeRTOS/Source/queue.c" /> | ||||
|           <file file_name="../../../../../lib/FreeRTOS/Source/tasks.c" /> | ||||
|           <file file_name="../../../../../lib/FreeRTOS/Source/timers.c" /> | ||||
|         </folder> | ||||
|         <file file_name="../../../../../lib/FreeRTOS/freertos_hook.c" /> | ||||
|       </folder> | ||||
|     </folder> | ||||
|   </project> | ||||
|   <configuration Name="Metro M4 Express" /> | ||||
| </solution> | ||||
							
								
								
									
										415
									
								
								examples/device/cdc_msc_freertos/ses/samd51/thumb_crt0.s
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										415
									
								
								examples/device/cdc_msc_freertos/ses/samd51/thumb_crt0.s
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,415 @@ | ||||
| // ********************************************************************** | ||||
| // *                    SEGGER Microcontroller GmbH                     * | ||||
| // *                        The Embedded Experts                        * | ||||
| // ********************************************************************** | ||||
| // *                                                                    * | ||||
| // *            (c) 2014 - 2018 SEGGER Microcontroller GmbH             * | ||||
| // *            (c) 2001 - 2018 Rowley Associates Limited               * | ||||
| // *                                                                    * | ||||
| // *           www.segger.com     Support: support@segger.com           * | ||||
| // *                                                                    * | ||||
| // ********************************************************************** | ||||
| // *                                                                    * | ||||
| // * All rights reserved.                                               * | ||||
| // *                                                                    * | ||||
| // * Redistribution and use in source and binary forms, with or         * | ||||
| // * without modification, are permitted provided that the following    * | ||||
| // * conditions are met:                                                * | ||||
| // *                                                                    * | ||||
| // * - Redistributions of source code must retain the above copyright   * | ||||
| // *   notice, this list of conditions and the following disclaimer.    * | ||||
| // *                                                                    * | ||||
| // * - Neither the name of SEGGER Microcontroller GmbH                  * | ||||
| // *   nor the names of its contributors may be used to endorse or      * | ||||
| // *   promote products derived from this software without specific     * | ||||
| // *   prior written permission.                                        * | ||||
| // *                                                                    * | ||||
| // * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND             * | ||||
| // * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,        * | ||||
| // * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF           * | ||||
| // * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE           * | ||||
| // * DISCLAIMED.                                                        * | ||||
| // * IN NO EVENT SHALL SEGGER Microcontroller GmbH BE LIABLE FOR        * | ||||
| // * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR           * | ||||
| // * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  * | ||||
| // * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;    * | ||||
| // * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF      * | ||||
| // * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT          * | ||||
| // * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE  * | ||||
| // * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH   * | ||||
| // * DAMAGE.                                                            * | ||||
| // *                                                                    * | ||||
| // ********************************************************************** | ||||
| // | ||||
| // | ||||
| //                           Preprocessor Definitions | ||||
| //                           ------------------------ | ||||
| // APP_ENTRY_POINT | ||||
| // | ||||
| //   Defines the application entry point function, if undefined this setting | ||||
| //   defaults to "main". | ||||
| // | ||||
| // INITIALIZE_STACK | ||||
| // | ||||
| //   If defined, the contents of the stack will be initialized to a the | ||||
| //   value 0xCC. | ||||
| // | ||||
| // INITIALIZE_SECONDARY_SECTIONS | ||||
| // | ||||
| //   If defined, the .data2, .text2, .rodata2 and .bss2 sections will be initialized. | ||||
| // | ||||
| // INITIALIZE_TCM_SECTIONS | ||||
| // | ||||
| //   If defined, the .data_tcm, .text_tcm, .rodata_tcm and .bss_tcm sections  | ||||
| //   will be initialized. | ||||
| // | ||||
| // INITIALIZE_USER_SECTIONS | ||||
| // | ||||
| //   If defined, the function InitializeUserMemorySections will be called prior | ||||
| //   to entering main in order to allow the user to initialize any user defined | ||||
| //   memory sections. | ||||
| // | ||||
| // FULL_LIBRARY | ||||
| // | ||||
| //  If defined then  | ||||
| //    - argc, argv are setup by the debug_getargs. | ||||
| //    - the exit symbol is defined and executes on return from main. | ||||
| //    - the exit symbol calls destructors, atexit functions and then debug_exit. | ||||
| //   | ||||
| //  If not defined then | ||||
| //    - argc and argv are zero. | ||||
| //    - the exit symbol is defined, executes on return from main and loops | ||||
| // | ||||
|  | ||||
| #ifndef APP_ENTRY_POINT | ||||
| #define APP_ENTRY_POINT main | ||||
| #endif | ||||
|  | ||||
| #ifndef ARGSSPACE | ||||
| #define ARGSSPACE 128 | ||||
| #endif | ||||
|   .syntax unified | ||||
|  | ||||
|   .global _start | ||||
|   .extern APP_ENTRY_POINT | ||||
|   .global exit | ||||
|   .weak exit | ||||
|  | ||||
| #ifdef INITIALIZE_USER_SECTIONS | ||||
|   .extern InitializeUserMemorySections | ||||
| #endif | ||||
|  | ||||
|   .section .init, "ax" | ||||
|   .code 16 | ||||
|   .balign 2 | ||||
|   .thumb_func | ||||
|  | ||||
| _start: | ||||
|   /* Set up main stack if size > 0 */ | ||||
|   ldr r1, =__stack_end__ | ||||
|   ldr r0, =__stack_start__ | ||||
|   subs r2, r1, r0 | ||||
|   beq 1f | ||||
| #ifdef __ARM_EABI__ | ||||
|   movs r2, #0x7 | ||||
|   bics r1, r2 | ||||
| #endif | ||||
|   mov sp, r1 | ||||
| #ifdef INITIALIZE_STACK | ||||
|   movs r2, #0xCC | ||||
|   ldr r0, =__stack_start__ | ||||
|   bl memory_set | ||||
| #endif | ||||
| 1: | ||||
|  | ||||
|   /* Set up process stack if size > 0 */ | ||||
|   ldr r1, =__stack_process_end__ | ||||
|   ldr r0, =__stack_process_start__ | ||||
|   subs r2, r1, r0 | ||||
|   beq 1f | ||||
| #ifdef __ARM_EABI__ | ||||
|   movs r2, #0x7 | ||||
|   bics r1, r2 | ||||
| #endif | ||||
|   msr psp, r1 | ||||
|   movs r2, #2 | ||||
|   msr control, r2 | ||||
| #ifdef INITIALIZE_STACK | ||||
|   movs r2, #0xCC | ||||
|   bl memory_set | ||||
| #endif | ||||
| 1: | ||||
|  | ||||
|   /* Copy initialized memory sections into RAM (if necessary). */ | ||||
|   ldr r0, =__data_load_start__ | ||||
|   ldr r1, =__data_start__ | ||||
|   ldr r2, =__data_end__ | ||||
|   bl memory_copy | ||||
|   ldr r0, =__text_load_start__ | ||||
|   ldr r1, =__text_start__ | ||||
|   ldr r2, =__text_end__ | ||||
|   bl memory_copy | ||||
|   ldr r0, =__fast_load_start__ | ||||
|   ldr r1, =__fast_start__ | ||||
|   ldr r2, =__fast_end__ | ||||
|   bl memory_copy | ||||
|   ldr r0, =__ctors_load_start__ | ||||
|   ldr r1, =__ctors_start__ | ||||
|   ldr r2, =__ctors_end__ | ||||
|   bl memory_copy | ||||
|   ldr r0, =__dtors_load_start__ | ||||
|   ldr r1, =__dtors_start__ | ||||
|   ldr r2, =__dtors_end__ | ||||
|   bl memory_copy | ||||
|   ldr r0, =__rodata_load_start__ | ||||
|   ldr r1, =__rodata_start__ | ||||
|   ldr r2, =__rodata_end__ | ||||
|   bl memory_copy | ||||
|   ldr r0, =__tdata_load_start__ | ||||
|   ldr r1, =__tdata_start__ | ||||
|   ldr r2, =__tdata_end__ | ||||
|   bl memory_copy | ||||
| #ifdef INITIALIZE_SECONDARY_SECTIONS | ||||
|   ldr r0, =__data2_load_start__ | ||||
|   ldr r1, =__data2_start__ | ||||
|   ldr r2, =__data2_end__ | ||||
|   bl memory_copy | ||||
|   ldr r0, =__text2_load_start__ | ||||
|   ldr r1, =__text2_start__ | ||||
|   ldr r2, =__text2_end__ | ||||
|   bl memory_copy | ||||
|   ldr r0, =__rodata2_load_start__ | ||||
|   ldr r1, =__rodata2_start__ | ||||
|   ldr r2, =__rodata2_end__ | ||||
|   bl memory_copy | ||||
| #endif /* #ifdef INITIALIZE_SECONDARY_SECTIONS */ | ||||
| #ifdef INITIALIZE_TCM_SECTIONS | ||||
|   ldr r0, =__data_tcm_load_start__ | ||||
|   ldr r1, =__data_tcm_start__ | ||||
|   ldr r2, =__data_tcm_end__ | ||||
|   bl memory_copy | ||||
|   ldr r0, =__text_tcm_load_start__ | ||||
|   ldr r1, =__text_tcm_start__ | ||||
|   ldr r2, =__text_tcm_end__ | ||||
|   bl memory_copy | ||||
|   ldr r0, =__rodata_tcm_load_start__ | ||||
|   ldr r1, =__rodata_tcm_start__ | ||||
|   ldr r2, =__rodata_tcm_end__ | ||||
|   bl memory_copy | ||||
| #endif /* #ifdef INITIALIZE_TCM_SECTIONS */ | ||||
|  | ||||
|   /* Zero the bss. */ | ||||
|   ldr r0, =__bss_start__ | ||||
|   ldr r1, =__bss_end__ | ||||
|   movs r2, #0 | ||||
|   bl memory_set | ||||
|   ldr r0, =__tbss_start__ | ||||
|   ldr r1, =__tbss_end__ | ||||
|   movs r2, #0 | ||||
|   bl memory_set | ||||
| #ifdef INITIALIZE_SECONDARY_SECTIONS | ||||
|   ldr r0, =__bss2_start__ | ||||
|   ldr r1, =__bss2_end__ | ||||
|   mov r2, #0 | ||||
|   bl memory_set | ||||
| #endif /* #ifdef INITIALIZE_SECONDARY_SECTIONS */ | ||||
| #ifdef INITIALIZE_TCM_SECTIONS | ||||
|   ldr r0, =__bss_tcm_start__ | ||||
|   ldr r1, =__bss_tcm_end__ | ||||
|   mov r2, #0 | ||||
|   bl memory_set | ||||
| #endif /* #ifdef INITIALIZE_TCM_SECTIONS */ | ||||
|  | ||||
|   /* Initialize the heap */ | ||||
|   ldr r0, = __heap_start__ | ||||
|   ldr r1, = __heap_end__ | ||||
|   subs r1, r1, r0 | ||||
|   cmp r1, #8 | ||||
|   blt 1f | ||||
|   movs r2, #0 | ||||
|   str r2, [r0] | ||||
|   adds r0, r0, #4 | ||||
|   str r1, [r0] | ||||
| 1: | ||||
|  | ||||
| #ifdef INITIALIZE_USER_SECTIONS | ||||
|   ldr r2, =InitializeUserMemorySections | ||||
|   blx r2 | ||||
| #endif | ||||
|  | ||||
|   /* Call constructors */ | ||||
|   ldr r0, =__ctors_start__ | ||||
|   ldr r1, =__ctors_end__ | ||||
| ctor_loop: | ||||
|   cmp r0, r1 | ||||
|   beq ctor_end | ||||
|   ldr r2, [r0] | ||||
|   adds r0, #4 | ||||
|   push {r0-r1}   | ||||
|   blx r2 | ||||
|   pop {r0-r1} | ||||
|   b ctor_loop | ||||
| ctor_end: | ||||
|  | ||||
|   /* Setup initial call frame */ | ||||
|   movs r0, #0 | ||||
|   mov lr, r0 | ||||
|   mov r12, sp | ||||
|  | ||||
|   .type start, function | ||||
| start: | ||||
|   /* Jump to application entry point */ | ||||
| #ifdef FULL_LIBRARY | ||||
|   movs r0, #ARGSSPACE | ||||
|   ldr r1, =args | ||||
|   ldr r2, =debug_getargs   | ||||
|   blx r2 | ||||
|   ldr r1, =args | ||||
| #else | ||||
|   movs r0, #0 | ||||
|   movs r1, #0 | ||||
| #endif | ||||
|   ldr r2, =APP_ENTRY_POINT | ||||
|   blx r2 | ||||
|  | ||||
|   .thumb_func | ||||
| exit: | ||||
| #ifdef FULL_LIBRARY   | ||||
|   mov r5, r0 // save the exit parameter/return result | ||||
|  | ||||
|   /* Call destructors */ | ||||
|   ldr r0, =__dtors_start__ | ||||
|   ldr r1, =__dtors_end__ | ||||
| dtor_loop: | ||||
|   cmp r0, r1 | ||||
|   beq dtor_end | ||||
|   ldr r2, [r0] | ||||
|   add r0, #4 | ||||
|   push {r0-r1} | ||||
|   blx r2 | ||||
|   pop {r0-r1} | ||||
|   b dtor_loop | ||||
| dtor_end: | ||||
|  | ||||
|   /* Call atexit functions */ | ||||
|   ldr r2, =_execute_at_exit_fns   | ||||
|   blx r2 | ||||
|  | ||||
|   /* Call debug_exit with return result/exit parameter */ | ||||
|   mov r0, r5 | ||||
|   ldr r2, =debug_exit   | ||||
|   blx r2 | ||||
| #endif | ||||
|  | ||||
|   /* Returned from application entry point, loop forever. */ | ||||
| exit_loop: | ||||
|   b exit_loop | ||||
|  | ||||
|   .thumb_func | ||||
| memory_copy: | ||||
|   cmp r0, r1 | ||||
|   beq 2f | ||||
|   subs r2, r2, r1 | ||||
|   beq 2f | ||||
| 1: | ||||
|   ldrb r3, [r0] | ||||
|   adds r0, r0, #1 | ||||
|   strb r3, [r1] | ||||
|   adds r1, r1, #1 | ||||
|   subs r2, r2, #1 | ||||
|   bne 1b | ||||
| 2: | ||||
|   bx lr | ||||
|  | ||||
|   .thumb_func | ||||
| memory_set: | ||||
|   cmp r0, r1 | ||||
|   beq 1f | ||||
|   strb r2, [r0] | ||||
|   adds r0, r0, #1 | ||||
|   b memory_set | ||||
| 1: | ||||
|   bx lr | ||||
|  | ||||
|   // default C/C++ library helpers | ||||
|  | ||||
| .macro HELPER helper_name | ||||
|   .section .text.\helper_name, "ax", %progbits | ||||
|   .balign 2 | ||||
|   .global \helper_name | ||||
|   .weak \helper_name   | ||||
| \helper_name: | ||||
|   .thumb_func | ||||
| .endm | ||||
|  | ||||
| .macro JUMPTO name | ||||
| #if defined(__thumb__) && !defined(__thumb2__) | ||||
|   mov r12, r0 | ||||
|   ldr r0, =\name | ||||
|   push {r0} | ||||
|   mov r0, r12 | ||||
|   pop {pc} | ||||
| #else | ||||
|   b \name | ||||
| #endif | ||||
| .endm | ||||
|  | ||||
| HELPER __aeabi_read_tp | ||||
|   ldr r0, =__tbss_start__-8 | ||||
|   bx lr | ||||
| HELPER abort | ||||
|   b . | ||||
| HELPER __assert | ||||
|   b . | ||||
| HELPER __aeabi_assert | ||||
|   b . | ||||
| HELPER __sync_synchronize | ||||
|   bx lr | ||||
| HELPER __getchar | ||||
|   JUMPTO debug_getchar | ||||
| HELPER __putchar | ||||
|   JUMPTO debug_putchar | ||||
| HELPER __open | ||||
|   JUMPTO debug_fopen | ||||
| HELPER __close | ||||
|   JUMPTO debug_fclose | ||||
| HELPER __write    | ||||
|   mov r3, r0 | ||||
|   mov r0, r1 | ||||
|   movs r1, #1   | ||||
|   JUMPTO debug_fwrite | ||||
| HELPER __read   | ||||
|   mov r3, r0 | ||||
|   mov r0, r1 | ||||
|   movs r1, #1  | ||||
|   JUMPTO debug_fread | ||||
| HELPER __seek | ||||
|   push {r4, lr} | ||||
|   mov r4, r0 | ||||
|   bl debug_fseek | ||||
|   cmp r0, #0 | ||||
|   bne 1f | ||||
|   mov r0, r4 | ||||
|   bl debug_ftell | ||||
|   pop {r4, pc} | ||||
| 1: | ||||
|   ldr r0, =-1 | ||||
|   pop {r4, pc} | ||||
|   // char __user_locale_name_buffer[]; | ||||
|   .section .bss.__user_locale_name_buffer, "aw", %nobits | ||||
|   .global __user_locale_name_buffer | ||||
|   .weak __user_locale_name_buffer | ||||
|   __user_locale_name_buffer: | ||||
|   .word 0x0 | ||||
|  | ||||
| #ifdef FULL_LIBRARY | ||||
|   .bss | ||||
| args: | ||||
|   .space ARGSSPACE | ||||
| #endif | ||||
|  | ||||
|   /* Setup attibutes of stack and heap sections so they don't take up room in the elf file */ | ||||
|   .section .stack, "wa", %nobits | ||||
|   .section .stack_process, "wa", %nobits | ||||
|   .section .heap, "wa", %nobits | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 hathach
					hathach