Reset interrupt vector SYSRSTIV is set to 001Eh (peripheral/configuration area fetch – PERF) even before entering main. Why is this happening?
Device: MSP430F5418 (RAM: 16 K) Compiler: IAR MSP430 Data Models tried: Both Medium and Large Using FreeRTOS Version 7 Memory Statistics 48 444 bytes of CODE memory (+ 342 absolute ) 14 678 bytes of DATA memory (+ 102 absolute ) 14 150 bytes of CONST memory
cstartup.s43 file used
#define DISABLE_WATCHDOG
#include "macros.m43"
#include "cfi.m43"
#ifdef DISABLE_WATCHDOG
#include "msp430.h"
#endif
#define XRSEGCSTART RSEG CSTART:CODE:NOROOT(1)
XCFI_NAMES libNames
XCFI_COMMON libCommon, libNames
// ---------------------------------------------------------
// The cstartup code -- call __low_level_init, perform initialization,
// call constructors and call main. If main returns the exit system
// is started.
//
MODULE ?cstart
//
// Ensure that this is build with the same "positions independent
// code" settings as the compiler uses.
//
XPICRTMODEL
//
// Forward declarations of segments.
//
RSEG HEAP:DATA:NOROOT(1)
RSEG CSTACK:DATA:NOROOT
RSEG DATA16_Z:DATA:NOROOT
RSEG DATA16_I:DATA:NOROOT
RSEG DATA16_ID:CONST:NOROOT
RSEG CODE_I:DATA:NOROOT
RSEG CODE_ID:CONST:NOROOT
#if __CORE__==__430X_CORE__
RSEG DATA20_Z:DATA:NOROOT
RSEG DATA20_I:DATA:NOROOT
RSEG DATA20_ID:CONST:NOROOT
#endif
// ---------------------------------------------------------
// System initialization.
//
XRSEGCSTART
PUBLIC __program_start_x
EXTERN ?reset_vector
REQUIRE ?reset_vector
__program_start_x:
PUBLIC ?cstart_begin
?cstart_begin:
// --------------------
// Turn off the watchdog.
//
// Note: This is excluded by default. Please define
// DISABLE_WATCHDOG to include it.
//
#ifdef DISABLE_WATCHDOG
MOV #WDTPW + WDTHOLD, &WDTCTL
#endif
// --------------------
// Initialize SP to point to the top of the stack.
//
MOV #SFE(CSTACK), SP
//
// Ensure that main is called.
//
REQUIRE ?cstart_call_main
// -----------------------------------------------
// Call __low_level_init to perform initialization before initializing
// segments and calling main. If the function returns 0 no segment
// initialization should take place.
//
// Link with your own version of __low_level_init to override the
// default action: to do nothing but return 1.
//
XRSEGCSTART
PUBLIC ?cstart_call_low_level_init
EXTERN __low_level_init
?cstart_call_low_level_init:
XCALL #__low_level_init
CMP #0, W0
JEQ ?cstart_call_main
// -----------------------------------------------
// Segment initialization:
//
// xxx_Z -- uninitialized data that are filled with zeros.
// xxx_I -- initialized data that gets the values from the corresponding
// xxx_ID segment.
//
#ifndef IGNORE_SEG_INIT
// --------------------
// Initialize code for __ramfunc functions.
//
XRSEGCSTART
PUBLIC ?cstart_init_copy_ramfunc
?cstart_init_copy_ramfunc:
#ifndef IGNORE_RAMFUNC_INIT
#ifndef REGISTER_MODEL_REG20
MOV #SFB CODE_I, CW0
MOV #SFB CODE_ID, CW1
MOV #sizeof CODE_I, CW2
XCALL #__data16_memcpy
#else // MSP430X with 20 bit pointers.
EXTERN __data20_memcpy
MOVA #SFB CODE_I, CW0
MOVA #SFB CODE_ID, CW1
MOV.W #LWRD(sizeof CODE_I), L1L
MOV.W #HWRD(sizeof CODE_I), L1H
XCALL #__data20_memcpy
#endif // REGISTER_MODEL_REG20
#endif // IGNORE_RAMFUNC_INIT
// --------------------
// Initialize data16
//
#ifndef IGNORE_DATA16_DATA
//
// Clear DATA16_Z.
//
XRSEGCSTART
PUBLIC ?cstart_init_zero
EXTERN __data16_memzero
?cstart_init_zero:
MOV #SFB DATA16_Z, CW0
MOV #sizeof DATA16_Z, CW1
XCALL #__data16_memzero
//
// Copy DATA16_ID to DATA16_I
//
XRSEGCSTART
PUBLIC ?cstart_init_copy
EXTERN __data16_memcpy
?cstart_init_copy:
MOV #SFB DATA16_I, CW0
MOV #SFB DATA16_ID, CW1
MOV #sizeof DATA16_I, CW2
XCALL #__data16_memcpy
#endif // IGNORE_DATA16_DATA
// --------------------
// Data20
//
#if __CORE__==__430X_CORE__
#ifndef IGNORE_DATA20_DATA
//
// Clear DATA20_Z.
//
XRSEGCSTART
PUBLIC ?cstart_init_zero20
EXTERN __data20_memzero
?cstart_init_zero20:
MOVA #SFB DATA20_Z,W0
MOV.W #LWRD(sizeof DATA20_Z), L1L
MOV.W #HWRD(sizeof DATA20_Z), L1H
XCALL #__data20_memzero
//
// Copy DATA20_ID to DATA20_I
//
XRSEGCSTART
PUBLIC ?cstart_init_copy20
EXTERN __data20_memcpy
?cstart_init_copy20:
MOVA #SFB DATA20_I, CW0
MOVA #SFB DATA20_ID, CW1
MOV.W #LWRD(sizeof DATA20_I), L1L
MOV.W #HWRD(sizeof DATA20_I), L1H
XCALL #__data20_memcpy
#endif // IGNORE_DATA16_DATA
#endif // MSP430X
#endif // IGNORE_SEG_INIT
// -----------------------------------------------
// Call constructors of static objects.
//
RSEG DIFUNCT:CONST:NOROOT(1)
XRSEGCSTART
PUBLIC ?cstart_call_ctors
EXTERN __call_ctors
?cstart_call_ctors:
#ifdef REGISTER_MODEL_REG20
MOVA #SFB DIFUNCT, CW0
MOVA #SFE DIFUNCT, CW1
#else /* REGISTER_MODEL_REG20 */
MOV.W #SFB DIFUNCT, CW0
MOV.W #SFE DIFUNCT, CW1
#endif /* REGISTER_MODEL_REG20 */
XCALL #__call_ctors
// -----------------------------------------------
// Call main() with no arguments and then exit using the return value
// of main as the parameter.
//
XRSEGCSTART
PUBLIC ?cstart_call_main
EXTERN main
EXTERN exit
?cstart_call_main:
XCALL #main
XCALL #exit
PUBLIC ?cstart_end
?cstart_end:
// Note: "ENDMOD label" means code that this module is the
// start of the application.
ENDMOD __program_start_x
// ---------------------------------------------------------
// __low_level_init
//
// The only action of this default version of __low_level_init is to
// return 1. By doing so it signals that normal initialization of data
// segments should be done.
//
// A customized version of __low_level_init may be created in order to
// perform initialization before initializing segments and calling main
// and/or to skip initialization of data segments under certain
// circumstances.
//
// For further details see sample file lowinit.c
//
MODULE lowinit
PUBLIC __low_level_init
RSEG CODE:CODE:NOROOT(1)
__low_level_init:
MOV #1, W0 // By returning 1 this function
XRET // indicates that the normal
// initialization should take place
ENDMOD
// ---------------------------------------------------------
// Define reset vector.
//
MODULE ?reset_vector
RSEG RESET:CONST:NOROOT(1)
PUBLIC ?reset_vector
EXTERN __program_start_x
?reset_vector:
DC16 __program_start_x
ENDMOD
END
The issue has been resolved. We just deleted the project debug files of IAR compiler and rebuilt the project. SYSRSTIV is set to zero now and our application is running fine.