0

メインに入る前でも、リセット割り込みベクタ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

        終わり
4

1 に答える 1

0

この問題は解決されました。IARコンパイラのプロジェクトデバッグファイルを削除し、プロジェクトを再構築しました。SYSRSTIVは現在ゼロに設定されており、アプリケーションは正常に実行されています。

于 2011-06-24T10:03:45.067 に答える