ページ 1 / 1
int型とlong型
Posted: 2017年3月21日(火) 12:06
by C素人
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);
Re: int型とlong型
Posted: 2017年3月21日(火) 22:48
by みけCAT
処理系(マイコン?)の仕様がわかりませんが、普通のC言語のsprintf関数では%dはint型を、%ldはlong型を受け取る書式であり、書式と渡すデータの型の対応が間違っていると未定義動作になります。
処理系のアーキテクチャ(ビッグエンディアンかリトルエンディアンかその他かや、関数への引数の渡し方)もわかりませんが、long型がint型より大きく、上位の0が使われたため0で固定されたのであると予想できます。
Re: int型とlong型
Posted: 2017年3月22日(水) 10:50
by C素人
みけCATさま
ありがとうございます。
勉強になりました。