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
  • マイコンは異なりますが、リンクオプションのROMからRAMにマップするセクションの設定が抜けていた際に、sprintfを使用すると異常動作してしまう事がありました。
    標準ライブラリもほぼ使っておらず、自作プログラムの部分でも初期化済み変数をを使っていなかったので、当時は原因がなかなか分かりませんでした。
    明確な情報では無く申し訳ありませんが参考になれば幸いです。
Reply
  • マイコンは異なりますが、リンクオプションのROMからRAMにマップするセクションの設定が抜けていた際に、sprintfを使用すると異常動作してしまう事がありました。
    標準ライブラリもほぼ使っておらず、自作プログラムの部分でも初期化済み変数をを使っていなかったので、当時は原因がなかなか分かりませんでした。
    明確な情報では無く申し訳ありませんが参考になれば幸いです。
Children
  • HiRosanさま
    いえいえ。非常に参考になりました!ご自身の経験からのお話、ありがとうございます。

    わたしの周りでも標準ライブラリを使用している例が少なく情報がなくこのような質問をさせていただきました。このようなボヤっとした内容にご回答いただき感謝いたします。