0

Arduino に 64 ビット ワードを送信する C++ アプリケーションを作成しようとしています。

here で説明されている方法を使用して termios を使用しました

私が抱えている問題は、さようならが最初に最下位バイトでarduinoに到着することです。

すなわち

使用する場合 (serialword が uint64_t の場合)

write(fp,(const void*)&serialWord, 8); 

最下位バイトが最初に arduino に到着します。

これは私が望んでいた動作ではありません。最も重要なバイを最初に到着させる方法はありますか? それとも、シリアルワードをバイトに分割し、バイトごとに送信するのが最善ですか?

ありがとう

4

1 に答える 1

3

関連する CPU のエンディアンが異なるため、送信前または受信後にバイトの順序を逆にする必要があります。この場合、Arduino の CPU サイクルを節約するために、送信する前にそれらを逆にすることをお勧めします。C++ 標準ライブラリを使用する最も簡単な方法std::reverseは、次の例に示すとおりです。

#include <cstdint>  // uint64_t (example only)
#include <iostream> // cout (example only)
#include <algorithm>  // std::reverse

int main()
{
    uint64_t value = 0x1122334455667788;

    std::cout << "Before: " << std::hex << value << std::endl;

    // swap the bytes
    std::reverse(
        reinterpret_cast<char*>(&value),
        reinterpret_cast<char*>(&value) + sizeof(value));

    std::cout << "After: " << std::hex << value << std::endl;
}

これにより、次が出力されます。

変更前: 1122334455667788 変更
後: 8877665544332211

于 2013-07-04T04:32:55.170 に答える