ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
26 ноября
462488 Топик полностью
UraGun (12.11.2013 00:34, просмотров: 78) ответил 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[] в конце структуры - для выравнивания длины структур.