[an error occurred while processing this directive]
Очевидно из-за незнания специфики Вашего компилятора, не схватываю суть вопросов (+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Бендер++ 28 февраля 2003 г. 13:06
В ответ на: вопросы(+) отправлено abivan 28 февраля 2003 г. 12:14

> как отследить локальные, те которые сам компилятор для проведения
> арифметич. операций отводит. по map файлу?
> Не произойдет ли там перераспределение памяти и по глобальным
> переменным в других ф-ях?
Поскольку компилятор для проведения арифметических операций использует вызовы функций (хоть и своих библиотечных) подчиняющихся общим правилам установленным им же самим, т.е. для локальных переменных в зависимости от компилятора отводятся или/и
а) определенные регистры (scratch-регистры)
б) стек общего пользования или стек данных
в) общая оверлейная область
то я не вижу вероятности размещения этих переменных в области глобальных, поскольку то что эта область занята видно компилятору из любой области Вашей программы. Таким образом, если я правильно понял Ваш вопрос, Вам нет необходимости отслеживать эти переменные "вручную"

> допустим я откомпилил и слинковал 2 программы с разными ф-ями.
> из одного исполняемого файла вырезал кусок(ф-я 2) и поместил
> его в EEPROM. И при работе гружу его вместо ф-ии 1. И это будет
> работать?

Если речь идет не о переменных, а о коде, то здесь, по-моему, нужен несколько другой подход. Есть ли смысл грузить одни константные "данные" (программа) на место других. Это в PC оверлеи построены так - там ведь только один тип памяти - ОЗУ. Во встроенных системах для этого используются банки. Разные оверлейные части Вашей программы "обитают" в разных банках ROM имеющих "как бы один адрес" с точки зрения процессора. На самом деле у них одинакова только младшая часть адреса, равная ширине "родной" адресной шины процессора. Старшая часть адреса (переключение банков) подключена к какому-нибудь порту процессора (обычно достаточно несколько битов этого порта). И вместо того, чтобы перегрузить функцию из ЕЕПРОМ во FLASH вы просто переключите эти биты порта. Конечно, часть памяти обязательно должна быть "небанкируемой" т.е. выдавать один и тот же код в разных банках.

Надеюсь, я провильно понял суть Ваших вопросов.


Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru