メインに入る前でも、リセット割り込みベクタSYSRSTIVは001Eh(ペリフェラル/コンフィギュレーションエリアフェッチ-PERF)に設定されています。なぜこうなった?
デバイス:MSP430F5418(RAM:16 K) コンパイラ:IAR MSP430 試したデータモデル:中規模および大規模の両方 FreeRTOSバージョン7の使用 メモリ統計 48 444バイトのCODEメモリ(+ 342絶対) 14 678バイトのDATAメモリ(+ 102絶対) 14150バイトのCONSTメモリ
使用されるcstartup.s43ファイル
#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
// ------------------------------------------------ ---------
// cstartupコード-__low_level_initを呼び出し、初期化を実行し、
//コンストラクターを呼び出し、mainを呼び出します。mainが出口システムを返す場合
//開始されます。
//
モジュール?cstart
//
//これが同じ「位置に依存しない」で構築されていることを確認します
//コンパイラが使用する「コード」設定。
//
XPICRTMODEL
//
//セグメントの前方宣言。
//
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
// ------------------------------------------------ ---------
//システムの初期化。
//
XRSEGCSTART
パブリック__program_start_x
EXTERN?reset_vector
REQUIRE?reset_vector
__program_start_x:
PUBLIC?cstart_begin
?cstart_begin:
// --------------------
//ウォッチドッグをオフにします。
//
//注:これはデフォルトで除外されています。定義してください
//DISABLE_WATCHDOGを含めます。
//
#ifdef DISABLE_WATCHDOG
MOV #WDTPW + WDTHOLD、&WDTCTL
#endif
// --------------------
//スタックの最上位を指すようにSPを初期化します。
//
MOV #SFE(CSTACK)、SP
//
//mainが呼び出されていることを確認します。
//
REQUIRE?cstart_call_main
// -----------------------------------------------
// __low_level_initを呼び出して、初期化する前に初期化を実行します
//セグメントとmainの呼び出し。関数が0を返す場合、セグメントはありません
//初期化を行う必要があります。
//
//独自のバージョンの__low_level_initとリンクして、
//デフォルトのアクション: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
// -----------------------------------------------
//セグメントの初期化:
//
//xxx_Z-ゼロで埋められた初期化されていないデータ。
//xxx_I-対応する値から値を取得する初期化されたデータ
//xxx_IDセグメント。
//
#ifndef IGNORE_SEG_INIT
// --------------------
//__ramfunc関数のコードを初期化します。
//
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//20ビットポインタを備えたMSP430X。
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
// --------------------
//data16を初期化します
//
#ifndef IGNORE_DATA16_DATA
//
//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
//
//DATA16_IDを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
//
//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
//
//DATA20_IDを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
// -----------------------------------------------
//静的オブジェクトのコンストラクターを呼び出します。
//
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
// -----------------------------------------------
//引数なしでmain()を呼び出し、戻り値を使用して終了します
//パラメータとしてmainの。
//
XRSEGCSTART
PUBLIC?cstart_call_main
EXTERNメイン
EXTERN出口
?cstart_call_main:
XCALL #main
XCALL #exit
PUBLIC?cstart_end
?cstart_end:
//注:「ENDMODラベル」は、このモジュールが
//アプリケーションの開始。
ENDMOD __program_start_x
// ------------------------------------------------ ---------
// __low_level_init
//
//このデフォルトバージョンの__low_level_initの唯一のアクションは、
// 1を返します。そうすることで、データの通常の初期化を通知します
//セグメントを実行する必要があります。
//
// __low_level_initのカスタマイズされたバージョンは、
//セグメントを初期化してmainを呼び出す前に初期化を実行します
//および/または特定のデータセグメントの初期化をスキップする
// 状況。
//
//詳細については、サンプルファイルlowinit.cを参照してください
//
モジュールlowinit
PUBLIC __low_level_init
RSEG CODE:CODE:NOROOT(1)
__low_level_init:
MOV#1、W0//1を返すことでこの関数
XRET//通常のことを示します
//初期化を行う必要があります
ENDMOD
// ------------------------------------------------ ---------
//リセットベクトルを定義します。
//
モジュール?reset_vector
RSEG RESET:CONST:NOROOT(1)
PUBLIC?reset_vector
EXTERN __program_start_x
?reset_vector:
DC16 __program_start_x
ENDMOD
終わり