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.