【セルフプログラミング】マイコン暴走?

CubeSuite+を使ってセルフプログラミングの開発をしています。

ライブラリ関数(FlashEnv(1))を実行していると、
逆アセンブルウィンドウでプログラムがストップします。メッセージウィンドウには「不正命令例外により停止しました」
と表示されます。原因が分からないのでアドバイスいただけないでしょうか。

-------------
_SelfLib_FlashEnv_Activate:
b013 sst.b r2\, 0x30[ep]
6119 tst r1\, sp
ff37c765 ld.hu 0x65c6[lp]\, r6
3742 satadd -0x9\, r8
8143 sst.b r8\, 0x1[ep]
fa6f ?
de4f ?
55174431 st.b r2\, 0x3144[r21] <---ここでストップ
45a5 sst.w r20\, 0x88[ep]
fcff ?
-----------

FlashEnv(1)は以下の関数からコールしています。

int erase_mem(UB startBlk\, UB endBlk)
{
__DI(); //マスカブル割込み禁止

FlashEnv(1);

・・・
}
Parents
  • >すと@kon さん
    ご回答ありがとうございます。
    同じコードをmain()の最初の方で呼ぶと正常に動くんですよね。。
    タスクから呼ぶと異常動作になります。


    RAMのセクションをいじっていたら現象が変わりました。

    ↓がmapファイルの抜粋です。

    TEXT_RAM RX 0x03ffd420(開始アドレス) 0x00000734(サイズ)

    セルフライブラリはTEXT_RAMに配置されています。
    0x03ffd420に0x734を足して、セクション範囲は0x3ffdb54
    までかと思うのですが、逆アセンブルウィンドウを見る
    と、添付ファイルのようにセクションの範囲外まで
    アセンブリコードがあります。
    実際、ステップ実行していくと範囲外にアクセスした
    ためか、プログラムカウンタが変なところに飛んでいき
    暴走しました。

    同じコードでも呼ぶ場所によって動作が変わる
    原因がまだ分かっておりません。。
Reply
  • >すと@kon さん
    ご回答ありがとうございます。
    同じコードをmain()の最初の方で呼ぶと正常に動くんですよね。。
    タスクから呼ぶと異常動作になります。


    RAMのセクションをいじっていたら現象が変わりました。

    ↓がmapファイルの抜粋です。

    TEXT_RAM RX 0x03ffd420(開始アドレス) 0x00000734(サイズ)

    セルフライブラリはTEXT_RAMに配置されています。
    0x03ffd420に0x734を足して、セクション範囲は0x3ffdb54
    までかと思うのですが、逆アセンブルウィンドウを見る
    と、添付ファイルのようにセクションの範囲外まで
    アセンブリコードがあります。
    実際、ステップ実行していくと範囲外にアクセスした
    ためか、プログラムカウンタが変なところに飛んでいき
    暴走しました。

    同じコードでも呼ぶ場所によって動作が変わる
    原因がまだ分かっておりません。。
Children
No Data