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

 
 
 
Reply to this topicStart new topic
> Keil и использование памяти, помогите разобраться какие килобайты откуда и куда
drum1987
сообщение Feb 21 2011, 13:22
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 255
Регистрация: 3-02-09
Из: Омск
Пользователь №: 44 323



после компиляции проекта в Keile высвечивается строчка:

при этом HEX файл имеет размер 347 кбайт.

Вопрос: как узнать сколько оперативки процессора займет программа и очень хотелось бы знать что значат Code,RO-data,RW-data,ZI-data.

Поиском пользовался - не нашел. Заранее благодарен.
Go to the top of the page
 
+Quote Post
fantex
сообщение Feb 21 2011, 13:35
Сообщение #2


Участник
*

Группа: Свой
Сообщений: 54
Регистрация: 4-11-05
Пользователь №: 10 480



В map-файле в конце пишется сколько программа занимает места по секциям:
==============================================================================

Code (inc. data) RO Data RW Data ZI Data Debug

71312 11390 26128 980 19692 496028 Grand Totals
71312 11390 26128 320 19692 496028 ELF Image Totals (compressed)
71312 11390 26128 320 0 0 ROM Totals

==============================================================================

Total RO Size (Code + RO Data) 97440 ( 95.16kB)
Total RW Size (RW Data + ZI Data) 20672 ( 20.19kB)
Total ROM Size (Code + RO Data + RW Data) 97760 ( 95.47kB)

==============================================================================
Go to the top of the page
 
+Quote Post
scifi
сообщение Feb 21 2011, 14:54
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Вот тут как бы объясняется: Getting information about images
Code - исполняемый код (ROM)
RO-data - константные данные (ROM)
RW-data - переменные в RAM, инициализируемые не нулями
ZI-data - переменные в RAM, инициализируемые нулями
Go to the top of the page
 
+Quote Post
drum1987
сообщение Feb 22 2011, 06:06
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 255
Регистрация: 3-02-09
Из: Омск
Пользователь №: 44 323



прочитал, скажите правильно ли я понимаю:

ZI-data составляет объем STACK и HEAP,
Code - исполняемый код понятно
RO-data - константные данные понятно
RW-data - переменные в RAM если это переменные с конкретными значениями при инициализации то тоже понятно...

Осталось понять что из этого будет занимать оперативку blush.gif

Изучив вопрос понял, что мне необходимо конвертировать HEX файф в BIN, а потом его уже грузить в процессор...так ли это? просто HEX - 347 кб, BIN - 128 smile3046.gif

Извините за глупые вопросы, просто новичек, а до этого работал только с TMS и там както по другому все...
Go to the top of the page
 
+Quote Post
scifi
сообщение Feb 22 2011, 09:10
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(drum1987 @ Feb 22 2011, 09:06) *
ZI-data составляет объем STACK и HEAP,
Code - исполняемый код понятно
RO-data - константные данные понятно
RW-data - переменные в RAM если это переменные с конкретными значениями при инициализации то тоже понятно...

Верно, только в ZI-data должны помимо stack и heap входить переменные, инициализируемые нулями.

Цитата(drum1987 @ Feb 22 2011, 09:06) *
Осталось понять что из этого будет занимать оперативку blush.gif

ОЗУ занимает ZI-data и RW-data.

Цитата(drum1987 @ Feb 22 2011, 09:06) *
Изучив вопрос понял, что мне необходимо конвертировать HEX файф в BIN, а потом его уже грузить в процессор...так ли это? просто HEX - 347 кб, BIN - 128 smile3046.gif

Если программатор позволяет заливать HEX, то можно не конвертировать. Если HEX заливать не позволяет, а BIN - позволяет, то нужно конвертировать в BIN. Для этого есть утилита fromelf.exe.
Размер HEX обычно превышает размер занимаемого ПЗУ приблизительно в 2,5 раза. Это обусловлено устройством формата Intel HEX. Можете про него почитать на досуге: Intel HEX File Format
Go to the top of the page
 
+Quote Post
drum1987
сообщение Feb 22 2011, 11:52
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 255
Регистрация: 3-02-09
Из: Омск
Пользователь №: 44 323



Огромное спасибо. Как я понимаю занимать будет программа во флешке проца(или внешней) ровно столько, сколько весит BIN файл.

И последний вопрос: как выделить оптимальный(минимально необходимый) размер кучи(heap)?
Go to the top of the page
 
+Quote Post
scifi
сообщение Feb 22 2011, 14:11
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(drum1987 @ Feb 22 2011, 14:52) *
Огромное спасибо. Как я понимаю занимать будет программа во флешке проца(или внешней) ровно столько, сколько весит BIN файл.

В большинстве случаев - да. Если сделать сложную карту памяти (составленную из кусков и пустых промежутков), то там немного сложнее.

Цитата(drum1987 @ Feb 22 2011, 14:52) *
И последний вопрос: как выделить оптимальный(минимально необходимый) размер кучи(heap)?

Вообще в микроконтроллерах лучше избегать динамическое выделение памяти, так как часто трудно заранее рассчитать необходимый размер кучи, к тому же возникает проблема фрагментации. То есть следует сделать кучу нулевого размера и забыть про malloc(). Часто malloc() используется в коде, который перекочевал из ПК, хотя скорее всего там динамическое выделение памяти не требуется. Как правило, можно обойтись статическими переменными. Иногда не вредно использовать локальные переменные значительного размера, так как они выделяют память стека, а расход стека гораздо легче контролировать, чем расход кучи.
Если же без динамического выделения никак нельзя, то расход кучи очень сильно зависит от особенностей программы. Тут трудно дать общие рекомендации.
Go to the top of the page
 
+Quote Post
drum1987
сообщение Feb 24 2011, 07:28
Сообщение #8


Местный
***

Группа: Участник
Сообщений: 255
Регистрация: 3-02-09
Из: Омск
Пользователь №: 44 323



тоесть вы рекомендуете убрать все malloc и сделать выделение памяти статическим?
Go to the top of the page
 
+Quote Post
scifi
сообщение Feb 24 2011, 07:31
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(drum1987 @ Feb 24 2011, 10:28) *
тоесть вы рекомендуете убрать все malloc и сделать выделение памяти статическим?

Да. По возможности, конечно.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 09:03
Рейтинг@Mail.ru


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