CCS V6.0.1 GCC 4.8.4 Windows 7 64 bit MSP432 Launchpad resetISR() gets triggered as soon as zero filling .bss code executes first line of code and never makes it to Main(); Seems like either WDT timeout or Invalid Stack situation. Any help would be greatly appreciated.
-----------------------------------------------------------------------------------------------
MEMORY { MAIN_FLASH (RX) : ORIGIN = 0x00000000, LENGTH = 0x00040000 INFO_FLASH (RX) : ORIGIN = 0x00200000, LENGTH = 0x00004000 SRAM_CODE (RWX): ORIGIN = 0x01000000, LENGTH = 0x00010000 SRAM_DATA (RW) : ORIGIN = 0x20000000, LENGTH = 0x00010000 } REGION_ALIAS("REGION_TEXT", MAIN_FLASH); REGION_ALIAS("REGION_BSS", SRAM_DATA); REGION_ALIAS("REGION_DATA", SRAM_DATA); REGION_ALIAS("REGION_STACK", SRAM_DATA); REGION_ALIAS("REGION_HEAP", SRAM_DATA); REGION_ALIAS("REGION_ARM_EXIDX", MAIN_FLASH); REGION_ALIAS("REGION_ARM_EXTAB", MAIN_FLASH); SECTIONS { PROVIDE (_intvecs_base_address = 0x0); .intvecs (_intvecs_base_address) : AT (_intvecs_base_address) { KEEP (*(.intvecs)) } > REGION_TEXT PROVIDE (_vtable_base_address = 0x0); .vtable (_vtable_base_address) : AT (_vtable_base_address) { KEEP (*(.vtable)) } > REGION_DATA .text : { CREATE_OBJECT_SYMBOLS KEEP (*(.text)) *(.text.*) . = ALIGN(0x4); KEEP (*(.ctors)) . = ALIGN(0x4); KEEP (*(.dtors)) . = ALIGN(0x4); __init_array_start = .; KEEP (*(.init_array*)) __init_array_end = .; *(.init) *(.fini*) } > REGION_TEXT .rodata : { *(.rodata) *(.rodata.*) } > REGION_TEXT .ARM.exidx : { __exidx_start = .; *(.ARM.exidx* .gnu.linkonce.armexidx.*) __exidx_end = .; } > REGION_ARM_EXIDX .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } > REGION_ARM_EXTAB /* __etext = .; */ __data_load__ = .; .data : { __data_load__ = LOADADDR (.data); __data_start__ = .; KEEP (*(.data)) KEEP (*(.data*)) . = ALIGN (4); __data_end__ = .; } > REGION_DATA AT> REGION_TEXT .bss : { __bss_start__ = .; *(.shbss) KEEP (*(.bss)) *(.bss.*) *(COMMON) . = ALIGN (4); __bss_end__ = .; } > REGION_BSS .heap : { __heap_start__ = .; end = __heap_start__; _end = end; __end = end; KEEP (*(.heap)) __heap_end__ = .; __HeapLimit = __heap_end__; } > REGION_HEAP .stack : ALIGN(0x8) { _stack = .; __stack = .; KEEP(*(.stack)) } > REGION_STACK }
-----------------------------------------------------------------------------------------------
void (* const interruptVectors[])(void) __attribute__ ((section (".intvecs"))) = { (void (*)(void))((uint32_t)0x20004000), /* The initial stack pointer */ resetISR, /* The reset handler */ nmiISR, /* The NMI handler */ faultISR, /* The hard fault handler */ defaultISR, /* The MPU fault handler */ defaultISR, /* The bus fault handler */ defaultISR, /* The usage fault handler */ 0, /* Reserved */ 0, /* Reserved */ 0, /* Reserved */ 0, /* Reserved */ defaultISR, /* SVCall handler */ defaultISR, /* Debug monitor handler */ 0, /* Reserved */ defaultISR, /* The PendSV handler */ defaultISR, /* The SysTick handler */ defaultISR, /* PSS ISR */ defaultISR, /* CS ISR */ defaultISR, /* PCM ISR */ defaultISR, /* WDT ISR */ defaultISR, /* FPU ISR */ defaultISR, /* FLCTL ISR */ defaultISR, /* COMP0 ISR */ defaultISR, /* COMP1 ISR */ defaultISR, /* TA0_0 ISR */ defaultISR, /* TA0_N ISR */ TimerA1_0IsrHandler, /* TA1_0 ISR */ defaultISR, /* TA1_N ISR */ defaultISR, /* TA2_0 ISR */
-----------------------------------------------------------------------------------------------
void resetISR(void)
{ /* Copy the data segment initializers from flash to SRAM. */ unsigned long *pui32Src, *pui32Dest; pui32Src = &__data_load__; for(pui32Dest = &__data_start__; pui32Dest < &__data_end__; ) { *pui32Dest++ = *pui32Src++; } /* Zero fill the bss segment. */ __asm(" ldr r0, =__bss_start__\n" <---------- restISR() triggers when executing here " ldr r1, =__bss_end__\n" " mov r2, #0\n" " .thumb_func\n" "zero_loop:\n" " cmp r0, r1\n" " it lt\n" " strlt r2, [r0], #4\n" " blt zero_loop"); /* Call the application's entry point. */ main(); }