• 締切済み

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は問題なく動きます。

  • k_ppm
  • お礼率69% (16/23)

みんなの回答

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

printfとscanfを動かすには、標準出力と標準入力を実装する必要があります。通常はシリアルポートに割り付けることになると思います。 これは、質問者さんも書かれているようにlower.cを修正して使うことになります。厳密にはopenやcloseも実装しなければなりませんが、とりあえずwriteとreadを実装すれば十分でしょう。それぞれの関数の中の処理は自作する必要があります(H8のシリアル通信ならサンプルはいくらでもあると思います)。 > もちろん、モニタ上でprintfは問題なく動きます。 ちょっと、この意味がわかりません。 モニタというのはどのモニタのことを指していますか?

k_ppm
質問者

補足

補足させていただきます。 モニタとはルネサスの配布しているデバッグモニタです。 目的は、このモニタを使わずにprintf/scanfを使うことです。 lower.cを修正してwrite、readは実装しました。 コンパイルエラーは起こりません。 しかし、printfは動きません。 (信じられませんが、writeが呼ばれていない可能性が高いようです) 私がやったことは修正したlower.cをプロジェクトに追加しただけです。 おそらくは、printfがきちんとwriteを使ってくれるにはどうしたいいのかが問題だと思います。 ちなみにwrite単体は動作しますので、関数定義のミスの可能性は低そうです。 よろしくお願いします。

関連するQ&A

  • printf scanf が、反応しません。

    printf scanf が、反応しません。 #include <stdio.h> int main(void) { int num = 0; int sum = 0; printf("テストの点数を入力してください。(0で終了)\n"); do{ scanf("%d", &num); sum += num; }while(num); printf("テストの合計点は%d点です。\n", sum); return 0; } C:\WORK>gcc test1.c C:\WORK>gcc -o test1 test1.c おかしいです。 打開策を教えてください。 ご多忙中恐れ入ります。 ご回答のほど、宜しくお願い申し上げます。

  • printf scanf が、反応しません。

    #include <stdio.h> /*構造体struct carの宣言*/ struct Car{ int num; double gas; }; int main(void) { struct Car car1; printf("ナンバーを入力してください。\n"); scanf("%d", &car1.num ); printf("ガソリン量を入力してください。\n" ); scanf("%lf, &car1.gas"); printf("車のナンバーは%d:ガソリン量は%fです。\n", car1.num,car1.gas); return 0; } C:\WORK>gcc test18.c C:\WORK>gcc -o test18 test18.c いつも教えて頂き、誠にありがとうございます。 上記の件。 println scanfが反応しません。 どうすればいいでしょうか? ご回答のほど、宜しくお願い申し上げます。

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

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

  • C言語でscanf()が先に実行されるのはなぜですか?

    C言語でscanf()が先に実行されるのはなぜですか? #include <stdio.h> int main(void){ int intNum; printf("整数を入力してください:\n"); scanf("%d", &intNum); printf("入力値は:%d\n",intNum); return(0); }

  • C++でscanfは使えない?

    お盆休みを利用してC言語の勉強をしようと思っています。 さわり程度にはわかるのですが、ポインタなどを本気で理解してみようと思っています。 PCにvisual studio2013が入っているので、2013のC++のプロジェクトを使って勉強していこうと思っているのですが、下記のように入力すると、scanfでエラーが出てしまいます。 #include "stdafx.h" #include <stdio.h> void main() { int n; scanf("%d",&n); } C++ではC言語の文法は全て使えると聞いていたのですが、ある程度例外もあるということなのでしょうか?それともなにか原因があるのでしょうか?

  • scanf文がうまくいかないのですが・・・

    下のようなプログラムを実行するとうまくいかないのですが、何故なのでしょう。 どうかお教えください。 #include<stdio.h> int main(void) { int i; char n; for(i = 0; i < 10; i++) { printf("nを入力してください>>>"); scanf("%c",&n); printf("%c\n",n); } return 0; }

  • scanf()関数の使い方について

    はじめまして。 質問があります。 まずは、以下のコードを見てください。 ---------------------------------------------------------------- #include<stdio.h> int main(void) { char c; int i; printf("0を入力すると終了します。\n"); while(1) { printf("文字を入力してください=>"); scanf("%c",&c); printf("入力した文字は %c です。\n",c); printf("数字を入力してください=>"); scanf("%d",&i); if(i==0) { break; } printf("入力した数字は %d です。\n",i); } return 0; } ---------------------------------------------------------------- 上のコードを実行すると、初回はscanf()はcharとintの両方とも 入力待ちになってくれるのですが、2回目以降はcharは入力待ちに なってくれません。これは、なぜなのでしょうか? ご教授お願いします。 現在VC++6.0を使用しております。

  • c言語 scanf

    下のソースを実行したらおかしなことになったんですがなんででしょうか?? #include<stdio.h> int main(void){ int i; char c[1000]; for(i=0;;i++){ printf("文字>>>>"); scanf("%c",&c[i]); printf("result = %c \n",c[i]); } } ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓実行↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 文字>>>>a result = a 文字>>>>result = 文字>>>>b result = b 文字>>>>result = 文字>>>>c result = c 文字>>>>result = 文字>>>>d result = d 文字>>>>result = 文字>>>>^C

  • H8Sマイコンに新規printfを追加でエラー

    前回、 http://okwave.jp/qa/q9191153.html こちらのサイトでH8S2368にprintfを追加したい内容の質問をした時の続きです。 現在、 イチから作って丸ごと学ぶ! H8マイコン道(12):シリアル通信でオリジナルprintf関数を作ろう (3/3) - MONOist(モノイスト) http://monoist.atmarkit.co.jp/mn/articles/1003/26/news096.html こちらのサイトの内容を参考に、printfのサンプルコードを追加してみました。 https://github.com/KenjiMaehara/ios_apply_test/blob/20150720_test/H8S2368_console/console/console.c しかし、コード追加後にコンパイルを実施すると次のようなエラーが発生します。 (コンパイルエラー内容) HMAKE MAKE UTILITY Ver. 2.1.00.000 Copyright (C) 2001,2006 Renesas Technology Europe Ltd. Copyright (C) 2001,2006 Renesas Technology Corp. and Renesas Solutions Corp. Executing Hitachi H8S,H8/300 C/C++ Library Generator01 phase set CH38TMP=C:\Users\KMAEH_~1\AppData\Local\Temp set PATH=c:\program files (x86)\renesas\hew\tools\renesas\h8\6_2_2\bin set CH38=c:\program files (x86)\renesas\hew\tools\renesas\h8\6_2_2\include Executing Hitachi H8S,H8/300 C/C++ Compiler02 phase "c:\program files (x86)\renesas\hew\tools\renesas\h8\6_2_2\bin\ch38.exe" -ws=C:\Users\KMAEH_~1\AppData\Local\Temp\hmk6689.tmp Executing Hitachi H8S,H8/300 Assembler03 phase Executing Hitachi OptLinker04 phase "c:\program files (x86)\renesas\hew\tools\renesas\h8\6_2_2\bin\LnkSpawn.exe" -subcommand=C:\Users\KMAEH_~1\AppData\Local\Temp\hmk6A82.tmp ** L2310 (E) Undefined external symbol "_mprint_test_sci1" referenced in "..\myproject\obj\main.obj" Optimizing Linkage Editor Abort ERROR: Process failed with return code: 1 mprint_test_sci1という関数の宣言は #include "all_includes.h" こちらのヘッダーファイルに (all_includes.hの内容の一部) extern void outs_sci1(char *, short); extern void outc_sci1(char, short); extern void outn_sci1(char, unsigned long, short); extern void mprint_test_sci1(char *fmt, ...); extern void charput_sci1(char OutputChar); このような形で宣言しています。 しかし、エラーが出てくるのですが、これをどのように解決すればよいのかご教示頂きますよう、よろしくお願い致します。

  • H8/3052FマイコンにRTOS

    こんばんは!! 学校の授業で組込みに興味を持ち、勉強してみようと思い、 組込みを勉強しようと思っています!! 秋月電子のAKI-H8-LANが学校にあったので、 借りて来ています。しかしマニュアルも何もありません。 マイコンはH8/3052Fを使っています。 開発環境はRENESASのHEWを使い、LEDを点灯させたり、 点滅させたりというプログラムをやっと出来るようになりました>< 書き込みはH8write turboで行っています。 RTOSを勉強したいのですが、TOPPERS/JSPカーネルを ダウンロードし、HEWでコンパイルしたかったのですが、 出来ません>< そこで、3052Fで使えて、HEWでコンパイル(というかビルド?) 出来るRTOSを教えてください!! 私の調査・勉強不足なのですが、 HEWでTOPPERS/JSPカーネルが使える方法もありましたら よろしくお願いします!! 未熟者ですがどうかよろしくお願いしたしますm(__)m

専門家に質問してみよう