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

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

  • 菅原さま
    ご回答ありがとうございます。

    スタックエリアオーバーの可能性のご指摘ありがとうございます。早速アプリを使用し確認してみます。
  • リカルドさま
    スタックポインタのご指摘ありがとうございます。完全に見落としていました…
    tool-support.renesas.com/.../cd_StartUp7.html
    ここにあるスタック領域の初期化部がコメントアウトされていました。
    RAMパリティエラーの可能性を探りつつ、動作確認してみます。
  • HiRosanさま
    いえいえ。非常に参考になりました!ご自身の経験からのお話、ありがとうございます。

    わたしの周りでも標準ライブラリを使用している例が少なく情報がなくこのような質問をさせていただきました。このようなボヤっとした内容にご回答いただき感謝いたします。
  • fujita nozomuさま
    ご指摘ありがとうございます。
    質問やことばの使用、誤記の部分などお見苦しい点があったこと陳謝いたします。
    単純に標準ライブラリのsprintfにおける使用の注意や何か明確に記述が間違えているのでは、と思い上述のような質問内容にしました。
    このような内容であったにもかかわらずご返事いただけたことを感謝したします。

    >絞り込んだ箇所が原因とも限らないと思いますが、どうしてそこが原因とわかりましたか?

    sprintf~のコードを消去、代替した上で異常動作が出ないことを確認しました。
    が、こちらのみなさまのご意見をいただいてこれだけでは解決にはならないことに気づけました。
    リセットがかかっているならその要因を、改めて原因究明していければと思っています。

    ご指摘いただいた文字列に関してですが、内容が社の情報も含まれていたため伏字としてしまいました。
    内容としては半角英数字(小大文字)記号はスペース、アンダーバー、総文字数は20byteとなります。

    > ビルドバージョン → コンパイラパッケージのバージョンの誤記です。