[an error occurred while processing this directive]
|
> как отследить локальные, те которые сам компилятор для проведения
> арифметич. операций отводит. по map файлу?
> Не произойдет ли там перераспределение памяти и по глобальным
> переменным в других ф-ях?
Поскольку компилятор для проведения арифметических операций использует вызовы функций (хоть и своих библиотечных) подчиняющихся общим правилам установленным им же самим, т.е. для локальных переменных в зависимости от компилятора отводятся или/и
а) определенные регистры (scratch-регистры)
б) стек общего пользования или стек данных
в) общая оверлейная область
то я не вижу вероятности размещения этих переменных в области глобальных, поскольку то что эта область занята видно компилятору из любой области Вашей программы. Таким образом, если я правильно понял Ваш вопрос, Вам нет необходимости отслеживать эти переменные "вручную"
> допустим я откомпилил и слинковал 2 программы с разными ф-ями.
> из одного исполняемого файла вырезал кусок(ф-я 2) и поместил
> его в EEPROM. И при работе гружу его вместо ф-ии 1. И это будет
> работать?
Если речь идет не о переменных, а о коде, то здесь, по-моему, нужен несколько другой подход. Есть ли смысл грузить одни константные "данные" (программа) на место других. Это в PC оверлеи построены так - там ведь только один тип памяти - ОЗУ. Во встроенных системах для этого используются банки. Разные оверлейные части Вашей программы "обитают" в разных банках ROM имеющих "как бы один адрес" с точки зрения процессора. На самом деле у них одинакова только младшая часть адреса, равная ширине "родной" адресной шины процессора. Старшая часть адреса (переключение банков) подключена к какому-нибудь порту процессора (обычно достаточно несколько битов этого порта). И вместо того, чтобы перегрузить функцию из ЕЕПРОМ во FLASH вы просто переключите эти биты порта. Конечно, часть памяти обязательно должна быть "небанкируемой" т.е. выдавать один и тот же код в разных банках.
Надеюсь, я провильно понял суть Ваших вопросов.
E-mail: info@telesys.ru