RX63Nマイコン sprintf関数の振る舞いがおかしい

皆様こんにちは。

sprintf関数の振る舞いで、プログラムを動作しているとバグ?が発生し

質問させて頂きました。現在の環境は以下の通りとなります。

開発環境:HEW4

コンパイラ:RXファミリ用C/C++コンパイラ

使用している言語:C/C++

使用しているマイコン:AP-RX63N-0A

 

用途としましては、char型配列に(1024byte)に半角文字列(数値もありますので書式付フォーマット使用)を挿入して

データを送信する仕様であります。

動作していくとある回数(不定)でchar型配列に["ABC:%4d volt"]のように配列が入り、数値が入らず書式付フォーマットの%dが

そのまま配列に入るようになりました。マイコンをリセットしないとバグは解決しませんでした。

バッファは十分余裕があり、オーバーランはしていないようです。

原因が分からなかったため、質問させて頂きました。

以上宜しくお願い致します。

Parents
  • わわいです
    まず疑われるのは、割り込み関数などでそのsprintf関数を実行していないか、あるいは、他の標準関数を割り込みで使用していないか調べてみることでしょう。
    sprintf関数などの大規模関数ではリエントラントとしては作られていないので、割り込み関数で実行すると不具合を起こすことがあります。
    また、スタックが足りているかも調べてみるのもいいかと思います。

    sprintf関数 などは、使い勝手がいい反面、汎用的に使用できるように、かなりな大規模なコード量となり、メモリ消費量も多くなっています
    できれば、sprintfを使わずに、自分のコードでその文字列を生成するようにした方がいいでしょうね。

    私の持論ですが、こういう標準関数ってのは、あくまでコンパイラが用意してくれるお便利機能であって、そーそーやたらめったら使うもんではない、とおもっています
Reply
  • わわいです
    まず疑われるのは、割り込み関数などでそのsprintf関数を実行していないか、あるいは、他の標準関数を割り込みで使用していないか調べてみることでしょう。
    sprintf関数などの大規模関数ではリエントラントとしては作られていないので、割り込み関数で実行すると不具合を起こすことがあります。
    また、スタックが足りているかも調べてみるのもいいかと思います。

    sprintf関数 などは、使い勝手がいい反面、汎用的に使用できるように、かなりな大規模なコード量となり、メモリ消費量も多くなっています
    できれば、sprintfを使わずに、自分のコードでその文字列を生成するようにした方がいいでしょうね。

    私の持論ですが、こういう標準関数ってのは、あくまでコンパイラが用意してくれるお便利機能であって、そーそーやたらめったら使うもんではない、とおもっています
Children
No Data