‮Сдвиг по фазе (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

  • Runaway

    Давным-давно, когда я ещё пешком под стол уже не ходил, по местному кабельному посмотрел кинцо, название, персонажи и сюжет коего мне практически не…

  • А что все они так громко страдают от "Тёмной судьбы"? Поиск глубокого смысла.

    Ну вот, смотрите, плач по Джону Коннору - понятное дело, это персонаж, которому мы очень сопереживали. И тут вдруг он погибает. Но разве это в самом…

  • "Джокер"

    А мне показалось, или возмущённая толпа там скандировала не то "Нахер Уэйна", не то прямо-таки "Нахуй" его же?

  • 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

  • Runaway

    Давным-давно, когда я ещё пешком под стол уже не ходил, по местному кабельному посмотрел кинцо, название, персонажи и сюжет коего мне практически не…

  • А что все они так громко страдают от "Тёмной судьбы"? Поиск глубокого смысла.

    Ну вот, смотрите, плач по Джону Коннору - понятное дело, это персонаж, которому мы очень сопереживали. И тут вдруг он погибает. Но разве это в самом…

  • "Джокер"

    А мне показалось, или возмущённая толпа там скандировала не то "Нахер Уэйна", не то прямо-таки "Нахуй" его же?