sprintfの引数に関して

RL78G14でプログラムを作成中、マイコンが動作異常(リセットがかかったようなな感じ?)になるときがあり調査したところ、以下のコードが原因であることがわかりました。

#include "stdio.h"

char title[] = "xxxxxx";     // 何らかの文字列指定

char debug_send[128];

main(){

   sprintf(debug_send,"%s",title);     // このコードが原因でたまにマイコン動作が異常になる

    ....

}

もともとがtitleからdebug_sendへ文字列に変換し格納することが目的だったため、strcpyと入れ替えたところ現象は発生しなくなりました。

E2 Liteでデバッグしているのですが、デバッグ中は発生せず、ROMに書き込んだ後たまに発生することから内部でどのようなことになっているかはっきりしていません。

 

同じような現象、および、明確にこのコードが悪いという情報はありますでしょうか?

ビルドバージョン 1.06.00/1.08.00

最適化レベルはデバッグ優先

Parents
  • 菅原です。

    printf系の関数はスタックを多く使います。
    sprintfコールした時に設定したスタックのエリアをオーバーしてしまっているかもしれません。


    CS+であれば スタック見積もりツール (Call Walker) を使ってどのくらいスタックを消費しているか確認します。スタックの設定より大きければ、 スタックの設定を大きくします。十分なスタックを確保できるほど メモリがなければsprintfの利用をやめる ということになります。
Reply
  • 菅原です。

    printf系の関数はスタックを多く使います。
    sprintfコールした時に設定したスタックのエリアをオーバーしてしまっているかもしれません。


    CS+であれば スタック見積もりツール (Call Walker) を使ってどのくらいスタックを消費しているか確認します。スタックの設定より大きければ、 スタックの設定を大きくします。十分なスタックを確保できるほど メモリがなければsprintfの利用をやめる ということになります。
Children