|
|
  |
IAR-Keil для C51 - работа с локальными переменными |
|
|
|
Aug 14 2011, 07:49
|
Участник

Группа: Участник
Сообщений: 36
Регистрация: 5-12-10
Пользователь №: 61 414

|
Доброго времени суток!
Интересует опыт использования iar'а для С51, точнее эффективность компилятора по сравнению с Keil.
Собственно проблема следующая: keil для локальных переменных выделяет память статически, причем линкер при определенных условиях может обеспечить совместное использование этой памяти разными процедурами. Данное свойство приводит к большому расходу памяти, что нежелательно.
У iar'а есть опция эмуляции 32-х регистров общего пользования, позволяет ли эта опция минимизировать потребление памяти локальными переменными?
Опыта работы с C51 к сожалению мало, подобная работа keil'а с локальными переменными была для меня настоящим сюрпризом - память неожиданно кончилась без видимых причин...
Всем заранее спасибо!
|
|
|
|
|
Aug 17 2011, 01:44
|
Участник

Группа: Участник
Сообщений: 36
Регистрация: 5-12-10
Пользователь №: 61 414

|
Лучше чем Keil среды для разработки программ для МК51, скорее всего, не найти.
А вы пробовали? Конкретно про iar что-нибудь знаете?
Оптимизация 4 не помогает, ибо используется уже 8-я...
Может кто по существу что-нибудь напишет? Неужели никто iar'ом не пользовался?
|
|
|
|
|
Aug 17 2011, 08:39
|
Участник

Группа: Участник
Сообщений: 36
Регистрация: 5-12-10
Пользователь №: 61 414

|
У iar'а как обстоят дела с локальными переменными?
У меня проблема с оперативной памятью - полностью забита. Пишу новую функцию, объявляю локальную переменную, а он пишет что оперативка кончилась.
|
|
|
|
|
Aug 17 2011, 09:26
|
Участник

Группа: Участник
Сообщений: 36
Регистрация: 5-12-10
Пользователь №: 61 414

|
использую C8051F342 - 256 RAM+4096XRAM вся забита под завязку
Очень много локальных переменных типа unsigned long - причем для каждой из них компилятор выделяет 4 байта в XRAM
Меня интересует вопрос - делает ли так же IAR?
|
|
|
|
|
Aug 17 2011, 09:37
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
QUOTE (shreck @ Aug 17 2011, 08:29)  Буквально на днях отказался от IAR в пользу Keil. Не вдаваясь в подробности скажу, что у Keilа реализация стандартных библиотек существенно лучше заточена под 51 ядро. В результате программа не влезавшая в 8К под IAR'ом влезла под Keil'ом еще и место осталось. Ну и что за критерий? Имеем меньшие по размеру библиотеки (это хорошо, а что у них со производительнорстью? Вообще-то использование стандартных библиотек на 51 у себя я вообще я что-то и не припомню ). Получается какая-то поверхностная оценка  . P.S. Я для 51 крайне редко что-то пишу, по этой причине совершенно не собираюсь дискутировать по поводу Keil/IAR. Просто не смог удержаться от комментария по поводу оценки критерия.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Aug 17 2011, 13:56
|

Гуру
     
Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954

|
Цитата(1kvi1 @ Aug 17 2011, 13:26)  Меня интересует вопрос - делает ли так же IAR? Вам выше уже ответили: Цитата(shreck @ Aug 17 2011, 12:45)  Можно как и в Keil в виде overlapped области. Можно стандартно, в виде классического стека. Только, если Вы будете распологать локальные переменные в стеке, то тут же всплывет закономерный вопрос : достаточно ли выделенной под стек памяти для размещения локальных переменных? Keil ещё на этапе линковки по-возможности "перекрыл" области памяти, отводимые под локальные переменные, и определил: памяти - не хватает! Используя IAR, Вы немножко помучаетесь, определяя потребный размер стека, и, скорее всего, прийдёте к тому же выводу...
|
|
|
|
|
Aug 17 2011, 23:26
|
Участник

Группа: Участник
Сообщений: 36
Регистрация: 5-12-10
Пользователь №: 61 414

|
Цитата(Палыч @ Aug 17 2011, 22:56)  Только, если Вы будете распологать локальные переменные в стеке, то тут же всплывет закономерный вопрос : достаточно ли выделенной под стек памяти для размещения локальных переменных? Keil ещё на этапе линковки по-возможности "перекрыл" области памяти, отводимые под локальные переменные, и определил: памяти - не хватает! Используя IAR, Вы немножко помучаетесь, определяя потребный размер стека, и, скорее всего, прийдёте к тому же выводу... основная моя мысль по поводу iar'а следующая: он позволяет выполнять эмуляцию 32 регистров общего назначения вместо 8 регистров, то есть отказывается от использования банков как я понимаю - такая тактика должна позволить минимизировать расходы памяти для размещения локальных переменных в стеке, что должно положительно сказаться на расходах памяти и быстродействии так ли это? может ли iar делать код подобный варианту для AVR'а(32 регистра для и аппаратный+программный стек)?
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|