PDA

Просмотр полной версии : Правила выравнивания и расположения структур и массивов?



Загнетов
03.09.2012, 19:06
можно ли быть уверенным, что объявляя в Кодесис2
структуру:

- ее компоненты будут размещены в оперативной памяти по порядку друг за другом, без оптимизации и разбиения структуры на куски?

- ее компонеты будут выровнены по тем же правилам, что и память ввода-вывода ПЛК Овен 1хх, то есть 4байтовые по адресам кратным 4, 2-байтовые кратным 2, булевые и байтовые по адресам кратным 2, или это не так?

- всегда ли гарантированно и корректно на контроллере 1хх можно будет записать значение по адресу из указателя в область ввода-вывода modbus?

- разрешено ли в ST записывать по указателю содержимое сложного типа (например большой структуры около 400 байт) или можно записывать только из стандартных типов переменных?

- хорошо ли поведет себя модуль modbus slave RTU на TCP при объеме около 400 байт?



struct1:Bigstructure;
ptr : POINTER TO Bigstructure;

ptr:=ADR(Modbus_area);
ptr1^:=struct1;

Валенок
04.09.2012, 21:23
1.Да. По порядку,но есть выравнивание
2.Да. Но байт,буль,string, array[..] of буль/байт - кратно 1
3.Да, если с самим адресом не ошиблись
4.Да
5.См.L и M

Код - замечательный. Размер структуры под указателем не имеет значения до обращения за пределами доступной памяти.

Загнетов
05.09.2012, 00:16
1.Да. По порядку,но есть выравнивание
2.Да. Но байт,буль,string, array[..] of буль/байт - кратно 1
3.Да, если с самим адресом не ошиблись
4.Да
5.См.L и M

Код - замечательный. Размер структуры под указателем не имеет значения до обращения за пределами доступной памяти.

capzap писал мне в почте, что в структуре нет выравнивания, эти правила не для нее.
Кто же прав?

Валенок
05.09.2012, 00:21
Пусть скажет capzap

capzap
05.09.2012, 07:17
Пусть скажет capzap

http://www.owen.ru/forum/showpost.php?p=90016&postcount=21
уже