Форум РадиоКот https://radiokot.ru/forum/ |
|
STM32 Keil расчет размера программы https://radiokot.ru/forum/viewtopic.php?f=59&t=194181 |
Страница 1 из 1 |
Автор: | maksimdag0 [ Пт июл 19, 2024 20:41:56 ] | |||
Заголовок сообщения: | STM32 Keil расчет размера программы | |||
Доброго дня! Решил проверить следующие поянение: «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: Вложение: 2)Далее я создал 3 переменные, которым не присваивались начальные значения(a, b, c), типа int, и судя по определениям выше, у меня значения памяти должны быть следующие – Code =756, RO-data =424, RW-data = 4, ZI-data = 1636+12 = 1648. Но по факту у меня получается следующие значения памяти(см. скриншот №2): Вложение: Вопрос почему у меня прибавилось RW-data на 12, если RW-data – это переменные, инициализированные каким-то значением, а я создал переменные, которым не присваивались начальные значения, должно же было прибавиться ZI-data на 12? И почему ZI-data у меня уменьшилось на 4? Может компилятор своей жизнью живет и не стоит ему доверять? Смотрел в мап файле, там такие же значения! Так же я попробовал использовать переменные a,b,c в функции main, в итоге значения памяти остались такими же. Файл main.c и файл .MAP приложил во вложениях!
|
Автор: | veso74 [ Пт июл 19, 2024 21:39:00 ] |
Заголовок сообщения: | Re: STM32 Keil расчет размера программы |
... плюс добавляйте, меняйте оптимизацию. Там увеличение одного - это потеря для другого (напр. -O0, -Oz, -Ofast). И анализ еще больше запутывается. Зачем этот анализ? Какую пользу дает? Используйте ресурс МК, пока он есть. Если нет, переходите к следующему МК по списку. (От AVR, PIC к STM32 так было и для меня. Но дело пошло очень быстро). |
Автор: | smacorp [ Пт июл 19, 2024 21:52:23 ] |
Заголовок сообщения: | Re: STM32 Keil расчет размера программы |
Так посмотрите в asm-файле что там компилятор делает. Вы переменные не инициализировали, но кто сказал, что компилятор не решил сделать это за Вас? По крайней мере это первое что приходит в голову. И как правильно уже сказали, для начала нужно отключить все оптимизации. |
Автор: | maksimdag0 [ Сб июл 20, 2024 20:17:01 ] |
Заголовок сообщения: | Re: STM32 Keil расчет размера программы |
Оптимизация отключена! veso74 писал(а): Зачем этот анализ? Какую пользу дает? Хотел убедиться на практике, интересно стало, но более менее понятно, что факторов много, и скорее всего не стоит этим заниматься. Благодарю за ответы) |
Автор: | jcxz [ Сб авг 24, 2024 11:57:52 ] |
Заголовок сообщения: | Re: STM32 Keil расчет размера программы |
2)Далее я создал 3 переменные, которым не присваивались начальные значения(a, b, c), типа int, и судя по определениям выше, у меня значения памяти должны быть следующие – Не должны быть. Так как переменные не использованы, то компилятор или компоновщик имеют полное право их выкинуть.И переменные объявлены неправильно. Так же я попробовал использовать переменные a,b,c в функции main, в итоге значения памяти остались такими же. Покажите как "пытались". Возможно (по мнению компилятора/компоновщика) вы и не пытались их использовать. ![]() Добавлено after 3 minutes 23 seconds: Оптимизация отключена! Оптимизация не имеет никакого отношения к удалению неиспользуемых секций из выходного образа. Если компилятор оформил ваши переменные в отдельные секции, а компоновщик не увидел их использования нигде, то он просто не будет их включать в выходной образ.Это штатное поведение компоновщика. Не имеет никакого отношения к оптимизации. Иначе была бы невозможна работа с большинством серьёзных библиотек. Просто посмотрите на их размер. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |