Доброго дня!
Решил проверить следующие поянение:
«RO Data - константы, размещенные в Flash
RW Data - переменные в RAM, для них генерировался код инициализации, соотв. есть массив в Flаsh с их начальными значениями.
ZI Data - "Zero Initialized" - переменные в RAM, которым не присваивались начальные значения, те для них не нет массива с нач. значениями, и
их при старте обнулили и все.»
Для этого создал пустой проект! Далее в пустом написал небольшой код инициализации GPIO, далее в этом проекте создавал переменные, компилировал, и смотрел как увеличивается значения памяти(Code, RO-data, RW-data, ZI-data).
1)Сначала создал переменную «VerTest1=0», после чего у меня значения памяти были равны как указаны на сриншоте №1:
Вложение:
1.png [58.54 KiB]
Скачиваний: 92
2)Далее я создал 3 переменные, которым не присваивались начальные значения(a, b, c), типа int, и судя по определениям выше, у меня значения памяти должны быть следующие –
Code =756,
RO-data =424,
RW-data = 4,
ZI-data = 1636+12 = 1648.
Но по факту у меня получается следующие значения памяти(см. скриншот №2):
Вложение:
2.png [46.18 KiB]
Скачиваний: 83
Вопрос почему у меня прибавилось RW-data на 12, если RW-data – это переменные, инициализированные каким-то значением, а я создал переменные, которым не присваивались начальные значения, должно же было прибавиться ZI-data на 12?
И почему ZI-data у меня уменьшилось на 4?
Может компилятор своей жизнью живет и не стоит ему доверять? Смотрел в мап файле, там такие же значения!
Так же я попробовал использовать переменные a,b,c в функции main, в итоге значения памяти остались такими же.
Файл main.c и файл .MAP приложил во вложениях!