Hi,
I need help rewriting the startup file in KEIL to the GCC compiler (MPLAB) startup file. Either it will be helpful to get valuable resources or guides by which I can conversion.
The following is my startup code that I need to convert
IMPORT __main IMPORT SystemInit IMPORT main ; <h> Stack Configuration ; <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> ; </h> Stack_Size EQU 0x00001000 AREA STACK, NOINIT, READWRITE, ALIGN=3 EXPORT __stack_bottom __stack_bottom Stack_Mem SPACE Stack_Size __initial_sp ; <h> Heap Configuration ; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> ; </h> Heap_Size EQU 0x00000400 AREA HEAP, NOINIT, READWRITE, ALIGN=3 __heap_base Heap_Mem SPACE Heap_Size __heap_limit PRESERVE8 THUMB ; Vector Table Mapped to Address 0 at Reset AREA RESET, DATA, READONLY, ALIGN=7 EXPORT __Vectors EXPORT __Vectors_End EXPORT __Vectors_Size __Vectors DCD __initial_sp ; Top of Stack DCD Reset_Handler ; Reset Handler DCD NMI_Handler ; NMI Handler DCD HardFault_Handler ; Hard Fault Handler DCD MemManage_Handler ; MPU Fault Handler DCD BusFault_Handler ; Bus Fault Handler DCD UsageFault_Handler ; Usage Fault Handler DCD 0 ; Reserved DCD 0 ; Reserved DCD 0 ; Reserved DCD 0 ; Reserved DCD SVC_Handler ; SVCall Handler DCD DebugMon_Handler ; Debug Monitor Handler DCD 0 ; Reserved DCD PendSV_Handler ; PendSV Handler DCD SysTick_Handler ; SysTick Handler ; MEC2016 External Interrupts ; Table offset: NVIC Num DCD NVIC_IRQ00_Handler ; 40h: 0, GIRQ08 ; EVERGLADES; NVIC_Handler_GIRQ08 DCD NVIC_IRQ01_Handler ; 44h: 1, GIRQ09 ; EVERGLADES; NVIC_Handler_GIRQ09 DCD NVIC_IRQ02_Handler ; 48h: 2, GIRQ10 ; EVERGLADES; NVIC_Handler_GIRQ10 DCD NVIC_IRQ03_Handler ; 4Ch: 3, GIRQ11 ; EVERGLADES; NVIC_Handler_GIRQ11 DCD NVIC_IRQ04_Handler ; 50h: 4, GIRQ12 ; EVERGLADES; NVIC_Handler_GIRQ12 DCD NVIC_IRQ05_Handler ; 54h: 5, GIRQ13 ; EVERGLADES; NVIC_Handler_GIRQ13 DCD NVIC_IRQ06_Handler ; 58h: 6, GIRQ14 ; EVERGLADES; NVIC_Handler_GIRQ14 DCD NVIC_IRQ07_Handler ; 5Ch: 7, GIRQ15 ; EVERGLADES; NVIC_Handler_GIRQ15 DCD NVIC_IRQ08_Handler ; 60h: 8, GIRQ16 ; EVERGLADES; NVIC_Handler_GIRQ16 DCD NVIC_IRQ09_Handler ; 64h: 9, GIRQ17 ; EVERGLADES; NVIC_Handler_GIRQ17 DCD NVIC_IRQ10_Handler ; 68h: 10, GIRQ18 ; EVERGLADES; NVIC_Handler_GIRQ18 DCD NVIC_IRQ11_Handler ; 6Ch: 11, GIRQ19 ; EVERGLADES; NVIC_Handler_GIRQ19 DCD NVIC_IRQ12_Handler ; 70h: 12, GIRQ20 ; EVERGLADES; NVIC_Handler_GIRQ20 DCD NVIC_IRQ13_Handler ; 74h: 13, GIRQ21 ; EVERGLADES; NVIC_Handler_GIRQ21 DCD NVIC_IRQ14_Handler ; 78h: 14, GIRQ23 ; EVERGLADES; NVIC_Handler_GIRQ23 DCD NVIC_IRQ15_Handler ; 7Ch: 15, GIRQ24 ; EVERGLADES; NVIC_Handler_GIRQ24 DCD NVIC_IRQ16_Handler ; 80h: 16, GIRQ25 ; EVERGLADES; NVIC_Handler_GIRQ25 __Vectors_End __Vectors_Size EQU __Vectors_End - __Vectors ; ; Reset Handler ; ;; AREA |.text|, CODE, READONLY ;; Name code section containing reset handler in such a way ;; the linker will place it first AREA |!!!!AENTRY|, CODE, READONLY THUMB Reset_Handler PROC EXPORT Reset_Handler [WEAK] CPSID i ; Remap vector table LDR R0, =__Vectors LDR R1, =0xE000ED08 STR R0, [R1] NOP ;; Application code must enable FPU. IF {CPU} = "Cortex-M4.fp" LDR R0, =0xE000ED88 ; Enable CP10,CP11 LDR R1,[R0] ORR R1,R1,#(0xF << 20) STR R1,[R0] ENDIF ;; Load stack pointer LDR SP, =__initial_sp ;this does nothing meaningful ;this causes issues on mixed mode execution where some code resides in SRAM and some in flash ;issue is trying to execute code at SRAM before the scatter loading is completed ;LDR R0, =SystemInit ;BLX R0 ;LDR SP, =__initial_sp ; Enter Keil startup code which calls our main LDR R0, =__main BX R0 ENDP AREA |.text|, CODE, READONLY ; ; Dummy Exception Handlers (infinite loops which can be modified) ; NMI_Handler PROC EXPORT NMI_Handler [WEAK] MOV R7,#1 B . ENDP HardFault_Handler\ PROC EXPORT HardFault_Handler [WEAK] MOV R7,#2 B . ENDP MemManage_Handler\ PROC EXPORT MemManage_Handler [WEAK] MOV R7,#3 B . ENDP BusFault_Handler\ PROC EXPORT BusFault_Handler [WEAK] MOV R7,#4 B . ENDP UsageFault_Handler\ PROC EXPORT UsageFault_Handler [WEAK] MOV R7,#5 B . ENDP SVC_Handler PROC EXPORT SVC_Handler [WEAK] MOV R7,#6 B . ENDP DebugMon_Handler\ PROC EXPORT DebugMon_Handler [WEAK] MOV R7,#7 B . ENDP PendSV_Handler PROC EXPORT PendSV_Handler [WEAK] MOV R7,#8 B . ENDP SysTick_Handler PROC EXPORT SysTick_Handler [WEAK] MOV R7,#9 B . ENDP Default_Handler PROC ; External MEC2016 NVIC Interrupt Inputs EXPORT NVIC_IRQ00_Handler [WEAK] EXPORT NVIC_IRQ01_Handler [WEAK] EXPORT NVIC_IRQ02_Handler [WEAK] EXPORT NVIC_IRQ03_Handler [WEAK] EXPORT NVIC_IRQ04_Handler [WEAK] EXPORT NVIC_IRQ05_Handler [WEAK] EXPORT NVIC_IRQ06_Handler [WEAK] EXPORT NVIC_IRQ07_Handler [WEAK] EXPORT NVIC_IRQ08_Handler [WEAK] EXPORT NVIC_IRQ09_Handler [WEAK] EXPORT NVIC_IRQ10_Handler [WEAK] EXPORT NVIC_IRQ11_Handler [WEAK] EXPORT NVIC_IRQ12_Handler [WEAK] EXPORT NVIC_IRQ13_Handler [WEAK] EXPORT NVIC_IRQ14_Handler [WEAK] EXPORT NVIC_IRQ15_Handler [WEAK] EXPORT NVIC_IRQ16_Handler [WEAK] NVIC_IRQ00_Handler NVIC_IRQ01_Handler NVIC_IRQ02_Handler NVIC_IRQ03_Handler NVIC_IRQ04_Handler NVIC_IRQ05_Handler NVIC_IRQ06_Handler NVIC_IRQ07_Handler NVIC_IRQ08_Handler NVIC_IRQ09_Handler NVIC_IRQ10_Handler NVIC_IRQ11_Handler NVIC_IRQ12_Handler NVIC_IRQ13_Handler NVIC_IRQ14_Handler NVIC_IRQ15_Handler NVIC_IRQ16_Handler B . ENDP ALIGN ; User Initial Stack & Heap IF :DEF:__MICROLIB EXPORT __initial_sp EXPORT __heap_base EXPORT __heap_limit EXPORT __stack_bottom ELSE IMPORT __use_two_region_memory EXPORT __user_initial_stackheap __user_initial_stackheap PROC LDR R0, = Heap_Mem LDR R1, =(Stack_Mem + Stack_Size) LDR R2, = (Heap_Mem + Heap_Size) LDR R3, = Stack_Mem BX LR ENDP ALIGN ENDIF
maybe you can take a look at STM32U5xx_DFP pack (https://www.keil.com/pack/Keil.STM32U5xx_DFP.2.1.0.pack) which contains, Arm assembly startup, GCC assembly startup and C Startup.When you install the pack, look into the folder: MDK\Device\Source\ there you have C Startups, and in subfolders \arm and \gcc you have respective other startups so you can compare Arm and GCC one and see what you need to do in your case.You might think about C Startup also, as this then works with both tools.The GCC assembly file would also actually work with Arm Compiler 6 since it supports that syntax also.