Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32F103 - Кейл. (3.85)
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > Keil
Serj78
при работе линкера после успешной сборки появляется сообщение
о размере программы:
Code= .... это размер самого кода
RO-data - это, очевидно константы во флеш
RW-data размер памяти переменных в SRAM

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

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

aaarrr
Цитата(Serj78 @ Jun 21 2010, 12:07) *
Но почему при минимуме переменных это значение около 8000 !
Куда зарезервировано столько памяти и как это отключить?

Посмотрите map-файл.
sonycman
В ZI область попадает стек и куча.
Проверьте в асмовом стартапе, какого они размера?
Serj78
Цитата(sonycman @ Jun 21 2010, 13:22) *
В ZI область попадает стек и куча.
Проверьте в асмовом стартапе, какого они размера?


Хм.. асмового не нашел а в подключенном сишном стек и куча по 1000
Код
;// <h> Stack Configuration
;//   <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
;// </h>

Stack_Size      EQU     0x00001000

                AREA    STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem       SPACE   Stack_Size
__initial_sp


;// <h> Heap Configuration
;//   <o>  Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
;// </h>

Heap_Size       EQU     0x00001000

                AREA    HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem        SPACE   Heap_Size
__heap_limit
sonycman
Цитата(Serj78 @ Jun 21 2010, 14:11) *
Хм.. асмового не нашел а в подключенном сишном стек и куча по 1000

Ну вот Ваши 8 килобайт и нашлись - 0х1000 равно 4096 байт.
Serj78
Цитата(sonycman @ Jun 21 2010, 14:38) *
Ну вот Ваши 8 килобайт и нашлись - 0х1000 равно 4096 байт.


Спасибо!! как говорится, сам дурак smile.gif
ViKo
Что-то в Keil какая-то путаница (а может, в моей голове).
Что означает zero-initialized?
Разве стек нужно инициализировать нулями? Или это просто подразумевается?


aaarrr
Цитата(ViKo @ Jun 21 2010, 16:54) *
Разве стек нужно инициализировать нулями? Или это просто подразумевается?

Просто запихнули стек в ZI. Можно этого и не делать.
ViKo
Нашел в одной из статей хэлпа:
Uninitialized variables are placed in a section with type ZI

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

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

int main(void)
{
...
}

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

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

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

Действительно, путаница получается... sad.gif
aaarrr
Цитата(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.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.