私は現在USB経由でフロートを送信しようとしています。 PCは、私がこのサイトSTM32がPCからUSBでフロートされ、エンディアンが苦労しています
に応じて、以下の順序.. 00 00 00 40 ..
を通過する一連のバイトをはっきりと見ることができるDEBUGLOG機能では、次のコード
float x = 2.0;
memcpy(buffer.data() + 14, &x, sizeof x);
を実行しているQtアプリケーションを持っています
http://www.scadacore.com/field-tools/programming-calculators/online-hex-converter/
は、リトルエンディアンの場合には、1073741824に変換されます。
私は私が をすれば、実際に本物のfloat値に2.0を変換したいときに問題が発生し、その後LED4
にuint32_t a = buffer[14] | (buffer[15] << 8) | (buffer[16] << 16) | (buffer[17] << 24);
if (a == 1073741824){
HAL_GPIO_WritePin(LED4_PORT, LED4_PIN, GPIO_PIN_RESET);
}
を回すために、次のコードを使用することができます私のSTM32の
float b = buffer[14] | (buffer[15] << 8) | (buffer[16] << 16) | (buffer[17] << 24);
if (b == 2.0f){
HAL_GPIO_WritePin(LED5_PORT, LED5_PIN, GPIO_PIN_RESET);
}
LED5が点灯していません。
エンディアンの問題ですか? float値2.0を取得するにはどうすればよいですか?
よろしく、IEEE 754浮動小数点数については
フロートをASCIIテキストとして送信し、もう一方の端に戻します。それだけで安全で簡単です。 – ThingyWotsit
"2.0"(CRまたはNULと言う)は、両者がプロトコルを知っている限り、単一のものと同じサイズであり、誤解が容易ではありません。また、終端文字を持つプロトコルは、rx呼び出しが完全なメッセージ/ floatのために必要とされるよりも少ないバイトで「早い」ものを返すストリーミング接続の問題を回避します。 – ThingyWotsit
例を挙げることができますか? – Luigi