Hi,
got it. Actually part of the .interrupts section is also stack pointer and reset vector handler. So - you need to left this 8 bytes on beginning of Flash. For me is working this setup:
Linker script:
MEMORY
{
/* Flash */
m_start (RX) : ORIGIN = 0x00000000, LENGTH = 0x00000008
m_interrupts (RX) : ORIGIN = 0x00000800, LENGTH = 0x00000400
m_flash_config (RX) : ORIGIN = 0x00000400, LENGTH = 0x00000010
m_text (RX) : ORIGIN = 0x00001410, LENGTH = 0x0007EBF0
/* SRAM_L */
m_data (RW) : ORIGIN = 0x1FFF8000, LENGTH = 0x00008000
/* SRAM_U */
m_data_2 (RW) : ORIGIN = 0x20000000, LENGTH = 0x00007000
}
/* Define output sections */
SECTIONS
{
.startup :
{
. = ALIGN(4);
KEEP(*(.start_up)) /* Startup code */
} > m_start
Startup code (Startup_S32K148.S):
syntax unified
.arch armv7-m
.section .start_up, "a"
.align 2
.long __StackTop /* Top of Stack */
.long Reset_Handler /* Reset Handler */
.section .isr_vector, "a"
.align 2
.globl __isr_vector
__isr_vector:
.long __StackTop /* Top of Stack */
.long Reset_Handler /* Reset Handler */
.long NMI_Handler /* NMI Handler*/
.long HardFault_Handler /* Hard Fault Handler*/
.long MemManage_Handler /* MPU Fault Handler*/
.long BusFault_Handler /* Bus Fault Handler*/
.long UsageFault_Handler /* Usage Fault Handler*/
.long 0 /* Reserved*/
.long 0 /* Reserved*/
.long 0 /* Reserved*/
.long 0 /* Reserved*/
.long SVC_Handler /* SVCall Handler*/
.long DebugMon_Handler /* Debug Monitor Handler*/
.long 0 /* Reserved*/
.long PendSV_Handler /* PendSV Handler*/
.long SysTick_Handler /* SysTick Handler*/
/* External Interrupts*/
.long DMA0_IRQHandler /* DMA channel 0 transfer complete*/
.long DMA1_IRQHandler /* DMA channel 1 transfer complete*/
.long DMA2_IRQHandler /* DMA channel 2 transfer complete*/
.
.
.
Hope it helps.
Jiri