【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※マルチポスト(多重投稿)は慎んで!

 詳しくはこちら



 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板2こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.20223

getc()の使い方
投稿者---まっちゃ(2005/03/05 14:01:35)


int a;
a = getc();
x=a-48;
xは、整数の2となります。
でも、
int a;
char n[10] = "0volts"
a = getc();
*n=a;
x = atoi(n);
とした場合、xが2とならないのはなぜでしょう?
getc()で受け取る値は同じです。

ccs-sを使って、PIC間で232cの通信したいのですが、
データの受け渡しが、思うようにいかなくて困って
います。
よろしくおねがいします。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:getc()の使い方(訂正) 20224 まっちゃ 2005/03/05 14:16:33
<子記事> Re:getc()の使い方 20249 まっちゃ 2005/03/07 13:04:57
<子記事> Re:getc()の使い方 20250 shu 2005/03/07 16:52:29


No.20224

Re:getc()の使い方(訂正)
投稿者---まっちゃ(2005/03/05 14:16:33)


int a, x;
a = getc();
x=a-48;
xは、整数の2となります。

でも、
int a, x;
char n[10] = "0volts", zz[10], g;
g= getc();
*n=g;
strcpy(zz,n);
x = atoi(zz);
とした場合、xが2とならないのはなぜでしょう?
getc()で受け取る値は同じです。

ccs-sを使って、PIC間で232cの通信したいのですが、
データの受け渡しが、思うようにいかなくて困って
います。
よろしくおねがいします。


この投稿にコメントする

削除パスワード

No.20227

Re:getc()の使い方(訂正)
投稿者---RAPT(2005/03/05 20:15:28)


入力される値は何ですか?
それから環境も書いてください。


この投稿にコメントする

削除パスワード

No.20229

Re:getc()の使い方(訂正)
投稿者---Sophist(2005/03/05 20:19:15)


>a = getc();

私が知っているgetc()はFILE *型の引数が必要です。
何か特別な環境での話でしょうか。


この投稿にコメントする

削除パスワード

No.20234

Re:getc()の使い方(訂正)
投稿者---Kiyo(2005/03/06 05:44:23)


getc()、strcpy()、atoi()など、
組み込み系Cの場合は、PC環境では当たり前の
関数でも中身はベンダが勝手に作っているので、
全て初めて使用するものとして疑うべきです。
異常な引数に対応できていない関数も多々
あるかと思います。

まず、リファレンスを読むといいでしょう。
実際の動作を確かめてもいいでしょう。

私自身PIC-Cの動作は知りませんが、
数値文字列以外の文字列を atoi()に渡してるところが
臭そうな気がします。

憶測ですみません(汗


この投稿にコメントする

削除パスワード

No.20249

Re:getc()の使い方
投稿者---まっちゃ(2005/03/07 13:04:57)


環境ですが、コンパイラはCCS社の PIC-PCM Compiler Version 3.209 を使用しています。
マイクロチップはPIC16F628Aを2個使い、PIC間でRS232C通信機能を利用して、データの受け渡し
をします。

データ送り側の値は、
int i; // カウンターで使用し、0〜9 です。
printf("%d\n",i );

getc()関数は、value=getc(); //valueはchar 又はint型であり、
RS232ピンに入力があったら、1バイトデータを返すとあります。

こんな感じでごまかしています。
int i,z, count_data1;
char y[10]= "0volts\0", ww;

count_data1 = 0;
i=0;
while(1)
{
ww=getc();
*y=ww;
z = atoi(y);
if (ww == 48){
count_data1 = 0;
}
if (ww !=48){
if (z!=0){
count_data1 = z;
}
}
変数 ww に atoi()関数で変換出来ないコードが含まれているのでしょうか?
よろしくおねがいします。



この投稿にコメントする

削除パスワード

No.20265

Re:getc()の使い方
投稿者---Kiyo(2005/03/08 02:47:04)


getc()で受信できてるのだから、まず文字列から
数値文字列以外をなくしてみたらいかがでしょう?
数値文字列とカンマ等しか見ないかも知れません。
たとえば全て無くして

char y[2]="0";

...(中略)...

y[0] = ww;
z = atoi(y);

とか。w
ICEやエミュレートツールが無い場合は
手間をかけるしかなさそうですね。


この投稿にコメントする

削除パスワード

No.20250

Re:getc()の使い方
投稿者---shu(2005/03/07 16:52:29)


環境依存については良くわかりませんが、
とりあえず気になった点をいろいろとあげてみます。

>int a;
>a = getc();
>x=a-48;

48じゃなくて、'0'の方が良くないでしょうか?

>xは、整数の2となります。
>でも、
>int a;
>char n[10] = "0volts"

↑セミコロンが抜けてる。

>a = getc();

a = (char) getc(); /* キャストしてみるとか */

>*n=a;

n[0] = a; の方がわかりやすい。

>x = atoi(n);
>とした場合、xが2とならないのはなぜでしょう?

全般的に変数名がわかりづらいです。
わかりづらいコードは、エラーにつながります。
わかりやすく書きなおしてみるのも、ひとつの手段です。

>getc()で受け取る値は同じです。
>
>ccs-sを使って、PIC間で232cの通信したいのですが、
>データの受け渡しが、思うようにいかなくて困って
>います

どういうデータの受け渡しをしたいのかを、
自分の中で細かくはっきりすっきりなるまで練り直してみる。
頭の中だけで無理なら、書き出してみる。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧