int型とlong型

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
C素人

int型とlong型

#1

投稿記事 by C素人 » 8年前

A/D変換後の値をLCDへ表示するプログラムです。

A/D変換後の値(10bit)をint型で宣言した場合、
LCDには10bitのデジタル値(0~1023)が表示されますが、
long型で宣言したら、LCDに表示される値が0で固定されてしまいました。

理由が分かりません。
初歩的な質問かと思いますが、教えていただけると助かります。

コード:

static	unsigned int ADreadX,ADreadY,ADreadZ;	//加速度sens	


		sprintf(buff1,(const far rom char *)"X=%4d[mV]",ADreadX);
		lcd_cmd(0x80);			//1行目へ移動
  		lcd_str(buff1); 
		sprintf(buff2,(const far rom char *)"Y=%4d[mV]",ADreadY);
  		lcd_cmd(0xc0);			//2行目へ移動
  		lcd_str(buff2);

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: int型とlong型

#2

投稿記事 by みけCAT » 8年前

処理系(マイコン?)の仕様がわかりませんが、普通のC言語のsprintf関数では%dはint型を、%ldはlong型を受け取る書式であり、書式と渡すデータの型の対応が間違っていると未定義動作になります。
処理系のアーキテクチャ(ビッグエンディアンかリトルエンディアンかその他かや、関数への引数の渡し方)もわかりませんが、long型がint型より大きく、上位の0が使われたため0で固定されたのであると予想できます。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

C素人

Re: int型とlong型

#3

投稿記事 by C素人 » 8年前

みけCATさま

ありがとうございます。
勉強になりました。

返信

“C言語何でも質問掲示板” へ戻る