........................
........................
Последний раз редактировалось Валенок; 09.08.2021 в 13:06.
это не гарантируется. но в конкретном проекте пройдет.
...................
Последний раз редактировалось Валенок; 09.08.2021 в 13:06.
чтобы была гарантия - сделайте структуру, содержащую нужные члены.
не забываем про выравнивание!
Подниму тему.
Насколько я понял из ответа Филоненко Владислава, члены структуры располагаются в памяти непрерывным блоком строго в том порядке, в котором они перечислены при объявлении структуры. Это верно?
И аналогичный вопрос по массивам. Элементы массива (пусть для определенности это будет ARRAY OF BYTE) расположены в памяти непрерывным блоком строго в порядке возрастания индекса. Это так?
И немного оффтопа:
Что значит "выравнивание"? Встретил этот совет в нескольких темах форума. А что это такое и зачем/как это делать не нашел ни в документации ни на форуме
В CoDeSys при выборе реализации решение всегда принимается в пользу быстродействия. Возьмем современный проц. 32 разряда. Машинное слово (два байта) он берет за 1 такт, а вот взять бит для него это подпрограмма - медленнее раз в 20. В таком случае, компилятор CoDeSys будет под BOOL выделять целое слово 2 байта! Байты он тоже может выравнивать по границам слов. В памяти получаются дырки, но быстродействие программы на ST получается равным приличному Си компилятору.
Здравствуйте
мне надо объявить 4 переменных типа real расположенных в памяти подряд. Обявляю так:
ругается:VAR_GLOBAL
realBuf1 AT %MD0:REAL;
realBuf2 AT %MD1:REAL;
realBuf3 AT %MD2:REAL;
realBuf4 AT %MD3:REAL;
...
END_VAR
"... Invalid type real at address %MD2"
"... Invalid type real at address %MD3"
вопрос:
как узнать по каким адресам можно разместить такие переменные?
или как освободить ячейки %MD2 и %MD3 чтобы объявить в них переменные real ?
заранее спасибо