Цитата(Goodvin @ Oct 21 2009, 19:33)

Если действительно можно приказать Кейлу, чтобы он собирал hex начиная с определенного адреса так, чтобы вся программа, включая таблицу векторов прерывания, была тупо смещена, то проблем не должно быть.
Кейл правда умеет такое делать?
Чисто теоритически - такое проделать, имхо, возможно: переопределить начало всех сегментов, размещаемых в памяти программ командами линкера...
Сам я делал иначе. Делал так:
Загрузчик располагал в конце памяти программ. Загрузчик работает исключительно по готовности (не использует прерывания). Тогда в таблице векторов на загрузчик указывает только команда по вектору 0. При записи в память программ прикладной программы загрузчик контролирует запись в этот (нулевой) вектор и сохраняет его неизменным, но "выкусывает" из загружаемай программы адрес перехода из команды по нулевому адресу и сохраняет его в выделенном месте памяти программ. Это "выкусывание" и сохранение адреса используется для последующего запуска прикладной программы.
Приимущества: прикладную программу не нужно "корёжить". Единственное ограничение - прикладная программа должна использовать хоть один вектор прерывания, тогда по нулевому адресу Keil поместит команду JMP, из которой бутлоадер "выкусит" адрес старта прикладной программы.