UraGun (12.11.2013 00:34, просмотров: 77) ответил koyodza на напишите здесь оба варианта и покажите, где неудобства
у меня есть три структуры для описания переменных трёх типов участников сети. К примеру. union
{
struct {
uint16_t AIN[8];
uint16_t AOUT[8];
uint32_t DIN[8];
uint32_t DOUT[8];
uint8_t dummy[4];
} CP709[255];
struct {
uint16_t AIN[6];
uint16_t AOUT[7];
uint32_t DIN[2];
uint32_t DOUT[2];
uint8_t dummy[58];
} CP707[255];
struct {
uint16_t AIN[5];
uint16_t AOUT[9];
uint32_t DIN[3];
uint32_t DOUT[2];
uint32_t DICO[5];
uint8_t dummy[32];
} CP705[255];
};
если у меня к примеру, по факту, 1й и второй участники сети имеют тип CP705, третий - CP709 а четвёртый и до 255го имеют тип CP707, то обращаться к данным соответствующего учасника сети, я смогу просто как
CP705[0].AIN[2]=...;
CP705[1].DOUT[6]=...;
CP709[3].DIN[0]=...;
CP707[141].DICO[4]=...;
В случае же с массивом юнионов, всё будет шиворот на выворот. Выровнять массивы в структура с учетом дополнительного последнего элемента, понятное дело прийдётся, но нужно обращаться именно так. Если в процессе работыустройства, у меня изменится тип какого-то из участников сети, я просто смогу использовать ту-же область памяти в 100 байт, под другую структуру. Байты dummy[] в конце структуры - для выравнивания длины структур.