реклама на сайте
подробности

 
 
> STM32F103 - Кейл. (3.85), ZI DATA - что это такое и как им управлять
Serj78
сообщение Jun 21 2010, 08:07
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 966
Регистрация: 27-05-06
Из: СПб
Пользователь №: 17 499



при работе линкера после успешной сборки появляется сообщение
о размере программы:
Code= .... это размер самого кода
RO-data - это, очевидно константы во флеш
RW-data размер памяти переменных в SRAM

ZI data - мне непонятно. нечто, инициализируемое нулем.Если пытаться объявить массив его размер прибавляется к этой области.
Это понять можно, эти данные по умолчанию 0.

Нашел как управлять этой областью и включить предупреждение когда она больше чем RAM..
Но почему при минимуме переменных это значение около 8000 !
Куда зарезервировано столько памяти и как это отключить?

Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ViKo
сообщение Jun 21 2010, 13:05
Сообщение #2


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Нашел в одной из статей хэлпа:
Uninitialized variables are placed in a section with type ZI

Может быть, ZI означает, что в этой области не размещены конкретные (статические) переменные? Стек - как раз такое...
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 21 2010, 13:44
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(ViKo @ Jun 21 2010, 17:05) *
Может быть, ZI означает, что в этой области не размещены конкретные (статические) переменные? Стек - как раз такое...

Нет. К ZI относятся как раз статические объекты без инициализаторов, например:
Код
int a;

int main(void)
{
...
}

Переменная a будет расположена в секции ZI и обнулена во время стартапа.

Стек в данном случае оказался в ZI из-за атрибута NOINIT.
Go to the top of the page
 
+Quote Post
sonycman
сообщение Jun 21 2010, 21:07
Сообщение #4


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(aaarrr @ Jun 21 2010, 17:44) *
Стек в данном случае оказался в ZI из-за атрибута NOINIT.

То есть он обнуляться не будет, не смотря на то, что расположен в области ZI?
Или опция NOINIT просто игнорируется?

Действительно, путаница получается... sad.gif
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 21 2010, 21:17
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(sonycman @ Jun 22 2010, 01:07) *
То есть он обнуляться не будет, не смотря на то, что расположен в области ZI?

Будет, как и все остальное в ZI.

Цитата(sonycman @ Jun 22 2010, 01:07) *
Или опция NOINIT просто игнорируется?

Почему же? Просто в контексте ассемблера он означает совсем не то, что схожий по звучанию атрибут региона из скрипта линкера (UNINIT)

Assembler:
Цитата
NOINIT
Indicates that the data section is uninitialized, or initialized to zero. It contains only space reservation directives SPACE or DCB, DCD, DCDU, DCQ, DCQU, DCW, or DCWU with initialized values of zero. You can decide at link time whether an area is uninitialized or zero initialized.


Linker:
Цитата
UNINIT
Use to create execution regions containing uninitialized data or memory-mapped I/O.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 11:17
Рейтинг@Mail.ru


Страница сгенерированна за 0.01381 секунд с 7
ELECTRONIX ©2004-2016