2013-07-04 2 views
0

Я пытаюсь написать приложение на C++ для отправки 64-битного слова в Arduino.Байт Порядок последовательной связи с Arduino

Я использовал termios используя метод, описанным here

Проблемы я имею это прощания прибывают на Arduino в младших байтах первым.

т.е.

, если использование (где serialword является uint64_t)

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

младшие байты прибывают в Arduino первым.

Это не поведение, которое я хотел, есть ли способ получить самые важные байки, чтобы прибыть первым? Или лучше всего затормозить серийный пароль в байты и отправить байт байтом?

Благодаря

+1

ли вам есть что-нибудь против обмена байтами перед отправкой? – Borgleader

+2

Возможно, вы захотите изучить ['htonl'] (http://linux.die.net/man/3/htonl) и друзей. – Collin

ответ

3

Поскольку порядок байтов из процессора вовлечены разные вам нужно будет изменить порядок байтов, прежде чем отправить их или после их получения. В этом случае я бы рекомендовал обратить вспять их, прежде чем отправлять их только для сохранения циклов процессора на Arduino. Самый простой способ использования ++ Стандартная библиотека 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

Смежные вопросы