R8Cマイコンでprintfを使いたい

このQ&Aのポイント
  • R8C/Tinyシリーズのマイコン(R5F21324)の評価ボードを動かしています。そこでレジスタの値(HEX)を10進(DEC)でコンソールに出力させたいと思っていますがうまくいきません。
  • コンソール出力にprintfを使おうとしていますが、全く出力されません。シリアル出力のレジスタをたたくとbyte単位でコンソール出力されますので、mainルーチンは動いていますし、シリアル通信も問題ありません。printfの関数だけが動かないのです。
  • 単純に#include <stdio.h> int val; ・・・・・ printf("%d\n",val); ・・・・・ といったようなプログラムなのですが。。。
回答を見る
  • ベストアンサー

R8Cマイコンでprintfを使いたい

R8C/Tinyシリーズのマイコン(R5F21324)の評価ボードを動かしています。そこでレジスタの値(HEX)を10進(DEC)でコンソールに出力させたいと思っていますがうまくいきません。 コンソール出力にprintfを使おうとしていますが、全く出力されません。シリアル出力のレジスタをたたくとbyte単位でコンソール出力されますので、mainルーチンは動いていますし、シリアル通信も問題ありません。printfの関数だけが動かないのです。 単純に #include <stdio.h> int val; ・・・・・ printf("%d\n",val); ・・・・・ といったようなプログラムなのですが。。。 何か特殊な事が必要なのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

> 低水準関数としては、putcharやfputcといったソースがあるのですが、 putcharのソースを見れば、どこに出力しているかがわかると思います。 バッファリングしているかどうかは知りませんが、外部への書き出しはどのようになっていますか? putcharが難しいようなら、fflushを見た方がよいかもしれません。

その他の回答 (1)

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.1

R8C/Tiny特有のの事情はわかりませんが、普通この手の処理系のライブラリは、自分で低水準関数をカスタマイズするようになっています。 writeとか_writeとかの名前になっていることが多いのですが、マニュアルに記載がないでしょうか?

zicojapan
質問者

お礼

回答ありがとうございます。 ご指摘を受けて探してみました。 低水準関数としては、putcharやfputcといったソースがあるのですが、 特に何かをカスタマイズしなければならないようには見えませんでした。マニュアルも特に記載がないんです。 未だ悩んでます。。。

関連するQ&A

  • H8マイコンCでprintf/scanfが使いたい

    C言語ですがちょっと特殊な範囲です。 H8マイコンについてどうしてもわからないことがあったので質 問させていただきます。 H8-3687+HEW4を使っております。 やりたいことはRAMではなくROMに書き込んだ状態で printf/scanfを使用したいのです。 (Htermに文字列を表示するなど・・・。) 付属のstdio.hをインクルードしてもwrite/readが足りないとコンパ イラにおこられます。 とりあえず、モニタのlower.cを改造して使えばコンパイルは 通るのですが、動作はしません。(-1が返ってきます。) write単体では動くのですが・・・。 とにかく、ROMに書き込んでprintf/scanfをを使ってPCと通信したいの で、よい方法があればよろしくお願いします。 stdioに限らず、等価な結果が得られればかまいません。 もちろん、モニタ上でprintfは問題なく動きます。

  • 独学で最近c言語を始めたものです。10進数を16進数に変換するプログラ

    独学で最近c言語を始めたものです。10進数を16進数に変換するプログラムを作りました。 しかしコンパイルしてもエラーは出ないのですがprintfの部分で配列の結果のみが出ません。 如何せん、独学ですので気付かないところで簡単なミスをしているかもしれませんが、分かる方がいましたご教授ください。 #include<stdio.h> int main() { static char data[16]= {'1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; char hex[5]; short dec,num,i; for(;;){ for(i=0;i<=3;i++) hex[i]=' '; hex[4]='\0'; printf("10進数を入力してください。>>"); scanf("%d",&dec); if(dec==0) break; for(i=3;dec!=0;i--){ num=dec%16; dec/=16; hex[i]=data[num]; } printf("16進数は%sです\n",hex); } }

  • printf文で"という文字を出力したい

    #include <stdio.h> #include <stdlib.h> #include <string.h> main() { printf("a"b"c\n"); } 標準出力でa"b"cと出力したいのですが、エラーが出てしまいます。 printf文で"を出力することは可能なのでしょうか。 教えてください、お願いします。

  • printf文で変数のアドレスを表示することはできますか?

    いま、H8S2368でプログラミングを行っていて、変数に入れたデータをprintf文でシリアルで出力して確認したいと思い、 BYTE cur; long addr; cur = TMR1.TCSR.BYTE; addr = (long)&cur; printf("data:%X add:%X\n\r",cur,addr); このようにプログラムしました。 curに入ったデータはH8S2368マイコンの0xFFFFB3番地のTCSR_1というアドレスなので、一応そのアドレス番地の値も表示したいと思い設定したのですが、 ”data:C0 add:FF” という表示が出てきます。 アドレスが0xFFFFB3と出てこないのはなぜなのでしょうか?

  • H8S2368マイコンのTCSR_1レジスタの4ビット目が1のはずなのに0と表示される。

    いま、H8S2368マイコンのプログラムを作っているのですが、 TCSR_1レジスタの値を printf("data:%X addr:%p\n\r", TMR1.TCSR.BYTE,(void*)&TMR1.TCSR.BYTE); このプログラムでリードしてみて、UART通信で受信したところ ”data:C0 addr:ffffb3” このレジスタのデータが0xC0というのを確認しました。 このH8S2368マイコンのデータシートの502ページ目(rjj09b0162_h8s2368.pdf)では、このレジスタの4ビット目はリザーブビットで、リードすると必ず”1”が読み込まれると書かれているのですが、なぜかそのビットが”0”で帰ってきます。 ”0xD0”ならばわかるのですが、これはなぜなのでしょうか?

  • printfがなくても文字が現れるのはなぜ!?

    #include <stdio.h> #include <string.h> int main() { int hensuu = 0; int *p; p = &hensuu; printf("p=%p &hensuu=%p\n", p, &hensuu); printf("*p=%d\n", *p); *p = 100; printf("*p=%d\n", *p); printf("hensuu=%d\n", hensuu); }  以下、出力結果です。    p=0xff930a1c &hensuu=0xff930a1c *p=0 *p=100 hensuu=100  以上が結果ですが!   *p=100 は*p = 100;で終わっていますが!出力結果として文字が出てきたいるのはなぜですか!  宜しくお願いします。

  • printf()で出力したいんですが?

    #include <stdio.h> int main( void ) { int air[4]; int i; i = 0; printf( "データ入力\n" ); do{ scanf( "%d\t", &air[ i++ ]); } while(air[ i - 1 ] > 0 ); printf( "%d\n", i ); return 0; } このプログラムはコンパイル出来ますが、期待していたprintf関数での出力ができません。 その理由として何がありますか?関数の使い方が間違っているのか、DO~WHILE文が使えない場所 なのか、もし直すとすればどう直せばいいのですか。

  • C言語について

    #include <stdio.h> int main(void) { printf("123456\tABC DEFGHIJK\n"); printf("2006/4/14\n"); printf("programing\n"); } のprintfをすべてputsに書き換えてコンパイル・実行すると、 #include <stdio.h> int main(void) { puts("123456\tABC DEFGHIJK\n"); puts("2006/4/14\n"); puts("programing\n"); } になると思うんですけど、そのputsを用いて上のprintfを用いたプログラムと同じ出力を得るにはどのようなプログラムに変えればいいのでしょうか?

  • c言語のプログラムの実行

    #include<stdio.h> int main() { int val; val=5; printf("今、変数の中身は、%dです\n", val); val=val+1; printf("今、変数の中身は、 %dです\n", val); val=val++; printf("今、変数の中身は、 %dです\n", val); return 0; } をファイル名 aaa  として、 %  gcc  aaa.c  で無事コンパイルできましたが、いざ実行しようと % ./aaa    Enter とすると ./aaa.out:コマンドが見つかりません.  となります。 また 別に %  ./aaa.out Enter としても上と同様な結果になります。 ぜひ、お答えを頂きたいです。     この時は unixとwindows98を使用しています。  

  • windowsフォームアプリケーションでprintfの使用

    windowsアプリケーションでprintfを使用したいのですがうまくできません。 AllocConsole関数を使えば、良いと聞いたのですが動きません。使い方が間違っているのでしょうか? AllocConsole(); freopen("file", "w", stdout); //標準出力をコンソールにする freopen("file", "r", stdin); //標準入力をコンソールにする  printf("いいえ"); error C3861: 'AllocConsole': 識別子が見つかりませんでした とエラーが出ます。 どなたかご教授お願いします。

専門家に質問してみよう