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

 
 
> IAR-Keil для C51 - работа с локальными переменными
1kvi1
сообщение Aug 14 2011, 07:49
Сообщение #1


Участник
*

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



Доброго времени суток!

Интересует опыт использования iar'а для С51, точнее эффективность компилятора по сравнению с Keil.

Собственно проблема следующая:
keil для локальных переменных выделяет память статически, причем линкер при определенных условиях может обеспечить совместное использование этой памяти разными процедурами.
Данное свойство приводит к большому расходу памяти, что нежелательно.

У iar'а есть опция эмуляции 32-х регистров общего пользования, позволяет ли эта опция минимизировать потребление памяти локальными переменными?

Опыта работы с C51 к сожалению мало, подобная работа keil'а с локальными переменными была для меня настоящим сюрпризом - память неожиданно кончилась без видимых причин...

Всем заранее спасибо!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
1kvi1
сообщение Aug 17 2011, 09:26
Сообщение #2


Участник
*

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



использую C8051F342 - 256 RAM+4096XRAM
вся забита под завязку

Очень много локальных переменных типа unsigned long - причем для каждой из них компилятор выделяет 4 байта в XRAM

Меня интересует вопрос - делает ли так же IAR?
Go to the top of the page
 
+Quote Post
scifi
сообщение Aug 17 2011, 14:48
Сообщение #3


Гуру
******

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



Цитата(1kvi1 @ Aug 17 2011, 13:26) *
использую C8051F342 - 25д6 RAM+4096XRAM
вся забита под завязку

Очень много локальных переменных типа unsigned long - причем для каждой из них компилятор выделяет 4 байта в XRAM

Если не ошибаюсь, Keil анализирует программу (строит граф вызовов функций или что-то в этом духе) и оптимизирует использование памяти. То есть если на этапе компиляции известно, что две функции не вызывают друг друга, то их локальные переменные могут располагаться в перекрывающихся участках памяти. При анализе вызовов функций компилятор может быть сбит с толку, например, указателями на функции (попробуй проследи за ними). Так что я бы попытался понять, есть ли в программе что-то, что мешает компилятору делать свою работу.
Вот тут есть немного информации про указатели на функции и граф вызовов функций: Application Note 129 - Function Pointers in C51.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


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

 


RSS Текстовая версия Сейчас: 4th August 2025 - 20:44
Рейтинг@Mail.ru


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