私はCを使用してatMega1281マイクロコントローラを使用しています。私はSPNを読み取るためにCANバスから4バイトを引き出すルーチンを持っています。私は4バイトを取得することができますが、最初の2バイトを16ビットの数に切り捨てるので、4バイトの数字は印刷できません。私は宣言としてunsigned longを無事に使ってみました。 AVRで32ビットの数字を使うときのトリックは何ですか?AVRを使用してCで4バイトと数式計算を行う方法
unsigned long engine_hours_raw;
float engine_hours_uint;
engine_hours_raw = (OneMessage.Msg.Data[3] << 24) | (OneMessage.Msg.Data[2] << 16) | (OneMessage.Msg.Data[1] << 8) | OneMessage.Msg.Data[0]);
engine_hours_uint = engine_hours_raw * 0.05;
ftoa(engine_hours_uint, engHours, 1);
UART1_Printf("Engine Hours: %s ", engHours);
念のために:どのように4バイトの番号を印刷していますか? –
私はフロートを実際にftoaを使って文字列に変換してから文字列として出力します。 – Eddie
@Eddieベアメタルの組み込みシステムでは、ポインタがメモリ内の実際のアドレスであることがわかっているので標準に固執する必要はありません:) –