2013-07-13 4 views
2

Я получил struct с 3 16-битные значения во встроенной системе:Как передать структуру как массив?

struct { 
    uint16_t x; 
    uint16_t y; 
    uint16_t z; 
}; 

struct будет передаваться в другую систему под управлением того же программного обеспечения на том же оборудовании. Передача осуществляется путем отправки серии из 8 8-битных значений (send_data(uint8_t *data)).

Моя идея просто дать send_data адрес структуры. Два последних байта считаются мусором. Будет ли это работать? Это безопасно?

+0

Принимая зависимость от структуры и порядка байтов полей, не является самой большой идеей. Эти два фантомных байта также могут быть байтом, вызвав ошибку процессора. Но вы, вероятно, можете заставить его работать. Написание кода, так что это никогда не проблема, конечно, это не то, что вы должны уволить, я бы этого не сделал. –

ответ

1

Это должно быть безопасно, если вы правильно его обрабатываете на другом конце (например, не записывайте два байта в случайное местоположение).

Я также предлагаю вам четко прокомментировать вопрос в коде, чтобы будущие сопровождающие не сталкивались с трудностями.


ИЛИ

Вы можете изменить структуру для передачи и приема включать имя (например, кожуха) для данных в конце. Это позволит вам обнулить эти байты перед отправкой. Тогда код должен быть совершенно ясен для всех, кто работает над ним, и если реализованное право не должно влиять на производительность.

1
  1. Будет ли это работать? - Да (send_data адрес структуры.)

  2. Безопасно? Оперативно да, но нет.

Рекомендовать не отправить мусор. Поместите данные, указанные send_data(), по мере необходимости (2 байта) и инициализируйте лишнее что-нибудь, скажем 0. Это облегчит отладку и сделает для последовательного регрессионного тестирования.

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