‮Сдвиг по фазе (kincajou) wrote,
‮Сдвиг по фазе
kincajou

Category:
А ещё! а ещё я посылаю лучи пылающего гнева тем людям, что придумали разворачивать массивы структур как массивы полей по отдельности. То есть, если у нас есть что-то типа
typedef struct
{
  uint8_t field1;
  uint16_t field2;
  some_type_t weird_field;
} data_t;

data_t Array_Of_Data_Structs[10];

и мы хотим сделать сериализацию массива таких структур, то ежели мы с Земли, то будем делать так:
uint8_t *serialized_data = (uint8_t*)Array_Of_Data_Structs;
uint32_t data_length = 10 * sizeof(data_t); // 10 - это для упрощения примера
serial_write_bunch (serialized_data[i], data_length);

Практично, квадратно, хорошо. Однако, серьёзные дяди в пиджаках посчитали, что это слишком просто, поэтому у них вот так:
uint8_t *serialized_data;
uint32_t data_length;

for (uint32_t i = 0; i < 10; i++)
{
  data_length = sizeof(uint8_t); // опять для наглядности
  serial_write_bunch (&Array_Of_Data_Structs[i].field1, data_length); // да, вот так тупо, по каждому полю каждой структуры отдельно...
}

for (i = 0; i < 10; i++)
{
  data_length = sizeof(uint16_t); // опять для наглядности
  serial_write_bunch (&Array_Of_Data_Structs[i].field2, data_length);
}

for (i = 0; i < 10; i++)
{
  data_length = sizeof(some_type_t); // опять для наглядности
  serial_write_bunch (&Array_Of_Data_Structs[i].weird_field, data_length);
}


То есть, все поля структур лежат отдельным, блять, кучками. И чтобы их считать обратно, собрав в осмысленные структуры, нужно ещё полстраницы кода. Вместо serial_read_bunch ((uint8_t*)Array_Of_Data_Structs, (10 * sizeof(data_t)))....

У серьёзных дядь не то чтоб руки из жопы, но вот мозг точно где-то в альтернативном месте.
Tags: приключения Электроника
Subscribe

  • Пополнение: XHDATA D-808

    Купил себе вышеозначенный приёмничек. Мне достался экземпляр с белой подсветкой. Вообще-то, у меня уже есть Degen DE-1103, но захотелось вот…

  • Работают все радиостанции

    т.к. моё радио я, наверное, не доделаю вообще никогда, заказал себе нечто под названием HackRF. Интересно будет попробовать. Ну и вообще.

  • worklog: очарование аналоговой схемотехники

    Эти самые "токовые зеркала", оказывается, любопытнейшая вещь. С их помощью можно, например, организовать замер напряжения отдельных ячеек в…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 18 comments

  • Пополнение: XHDATA D-808

    Купил себе вышеозначенный приёмничек. Мне достался экземпляр с белой подсветкой. Вообще-то, у меня уже есть Degen DE-1103, но захотелось вот…

  • Работают все радиостанции

    т.к. моё радио я, наверное, не доделаю вообще никогда, заказал себе нечто под названием HackRF. Интересно будет попробовать. Ну и вообще.

  • worklog: очарование аналоговой схемотехники

    Эти самые "токовые зеркала", оказывается, любопытнейшая вещь. С их помощью можно, например, организовать замер напряжения отдельных ячеек в…