PDA

Просмотр полной версии : Непонятки с распределением памяти



Boris_K
30.09.2014, 15:35
Непонятно как распределяется память. Вот например, сейчас у меня ПЛК100.К-М. Согласно руководству, у него:
- 8 МБ оперативки
- 4 МБ энергонезависимой для хранения ядра Кодесис, программ и архивов
- 4 кБ Retain (настраивается до 16 кБ)

А вот скрин распределения памяти, в настройках целевой платформы, по умолчанию (таргет стоит 2.10 или 2.11, не помню, никогда не менял):

14557

В руководстве к Кодесис, традиционно, всё предельно лаконично и потому нихрена не понятно. Для наглядности, hex-значения я перевёл в dec (дописано красным). Сразу возникают вопросы:

1) Почему оперативной памяти для данных доступно всего 128 кБ (те самые 131072 байт, что обозначены как "Глобальные")? Можно подумать, что это только память под глобальные переменные, но нет, все локальные переменные также её занимают. Понятно, что часть оперативной памяти отводится под код (ровно 1 МБ, если верить этим настройкам), и возможно что-то ещё, но всё равно должны быть мегабайты! Причём значение невозможно редактировать...

2) Что такое просто "Память", которой ровно 1000 байт?

3) Что такое "Общий размер памяти" (которой 32768 байт)?

Особенно волнует первый вопрос, это значение памяти указывается в сообщении после компиляции, и, если насоздавать в проекте массивов и переменных, переполняющих этот объём памяти, проект не компилируется.

Yegor
30.09.2014, 15:55
Что такое просто "Память", которой ровно 1000 байт?Это т.н. «флаговая память». Вот прямые адреса бывают %I... — на вход, %Q... — на выход, %M... — оно и есть. Для обмена или ещё для чего... Надо как-нибудь взять разобраться получше.
Что такое "Общий размер памяти"На инглише там «Total size of data memory».

lara197a
30.09.2014, 16:08
А так же можно изменять размер. К примеру при необходимости увеличить.
Распределятся она автоматически.

Boris_K
30.09.2014, 17:39
На инглише там «Total size of data memory».
То-то. Даже Кодесис не могли русифицировать нормально. :eek: Пора мне отвыкать от дебильной привычки ставить русские версии. Технический и программистский инглиш и так давно понятен.

Но что это за "общий размер памяти данных" в 32 кБ? Вроде кэп говорит что он должен быть как минимум те 128 кБ. :confused:


А так же можно изменять размер. К примеру при необходимости увеличить.
Да, что-то тут можно менять, но самое главное - память под код и под данные - нельзя. А так хотелось бы увеличить память для данных. В программе, где есть массивы и типы, вполне можно упереться в эту границу 128 кБ.

lara197a
30.09.2014, 19:26
х. В программе, где есть массивы и типы, вполне можно упереться в эту границу 128 кБ.
Если только теоретически.

Boris_K
30.09.2014, 19:46
Если только теоретически. Да ну? Несколько массивов с каким-нибудь собираемым набором данных, допустим если надо собирать значения каких-то переменных в течение какого-то времени, и всё.

lara197a
30.09.2014, 19:51
для собираемых данных(архивов) придумали специальные устройства(флеш и др. накопители).

Boris_K
30.09.2014, 20:22
Согласен, даже в ПЛК можно модуль архиватора задействовать, там вроде до 3 МБ памяти можно, правда, с этим пока не приходилось сталкиваться.

lara197a
30.09.2014, 20:33
К примеру в S7-1200 памяти от 30(CPU1211)кб до 100кб(CPU1215)

Валенок
01.10.2014, 22:34
О куче забыли (0.5М).
Что хоть за данные - может еще и паковать ?

Amko
02.10.2014, 04:15
К примеру в S7-1200 памяти от 30(CPU1211)кб до 75кб(CPU1215)
Все таки 100кБ в 1215 модельке.

Boris_K
02.10.2014, 12:43
Значения переменных и в массивах, результаты измерений или расчётов. От упаковки конечно толк будет.

capzap
02.10.2014, 14:22
Да, что-то тут можно менять, но самое главное - память под код и под данные - нельзя. А так хотелось бы увеличить память для данных. В программе, где есть массивы и типы, вполне можно упереться в эту границу 128 кБ.

Незнаю почему Валенок не упомянул заглянуть в эту тему http://www.owen.ru/forum/showthread.php?t=13446&p=91600&viewfull=1#post91600

Валенок
02.10.2014, 17:46
Ну собсно про кучу - предложил. А с крахом боротся - надстраивать свой менеджер памяти