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
  • なぜ、タイトルに「引数」があるのでしょうか?本文から「引数」が導かれる流れが解りません。

    マニュアル等の再確認をせずに記憶だけによる書き込みです。
    SHのsprintf等はヒープを使っているようです。また、SHではワークスペース作成時にスタックとヒープのサイズをアプリケーション作成者が設定してその中で処理が済まされるようにしなければなりません。
    少し前にRL78のスタックが話題になった際にスタックとヒープの取り方を少し調べてみたのですが解らず放置してます。
    私はsprintfなどを作成したことが無いのですが、引数の個数が可変の場合はヒープを使うご利益があるのではと予想してます。
  • kijoさま
    ご回答ありがとうございます。
    SHは過去に使用したことがあるので、ヒープの設定も行っていた記憶があります。
    今回は固定長(20文字程度:このあたりの情報がなくて申し訳ありませんでした)ですので特にスタック/ヒープの意識はありませんでした。
Reply
  • kijoさま
    ご回答ありがとうございます。
    SHは過去に使用したことがあるので、ヒープの設定も行っていた記憶があります。
    今回は固定長(20文字程度:このあたりの情報がなくて申し訳ありませんでした)ですので特にスタック/ヒープの意識はありませんでした。
Children
No Data