Argon (17.11.2007 15:12, просмотров: 135) ответил Argon на Сергей, и еще в тему вопрос. После установки границ сегмента INTVEC 0x00001000...0x0000103f (у меня LPC). Возникает ошибка проверки диапазонов.
Уточнение: это у меня было в связи с прямым назначением сегмента INTVEC в "неродные" адреса. Сделал как в Вашем варианте, с копированием сегментов, предупреждения пропали. Но возникли еще вопросы. Мой xcl-файл:
<c>
//область бутлоадера
-DBL_START=00000040
-DBL_END=0000FFF
//область основной программы
-DROMSTART=00001040
-DROMEND=0007FFF
-Z(CODE)INTVEC=00000000-0000003f //"родные" адреса таблицы векторов
-Z(CODE)INTVEC_I=00001000-0000103f //копия таблицы, к-рая будет скопирована в 0x40000000-0x4000003f
-QINTVEC=INTVEC_I //копирование содержимого INTVEC в INTVEC_I
-Z(CODE)ICODE,DIFUNCT=ROMSTART-ROMEND
-Z(CODE)SWITAB=ROMSTART-ROMEND
-Z(CODE)BLCODE=BL_START-BL_END
-DRAMSTART=40000040 //используемая софтом таблица векторов
-DRAMEND=40001FFF
</c>
Вопрос такой:
Если в нулевых адресах находится реальная таблица векторов, то с 0-го адреса происходит переход на __program_start(). Если принудительно поместить туда джамп на загрузчик (кстати как не вызвать при этом конфликта с линкером?), то необходимо вычислить контрольную сумму по адресу 0x00000040, к-рую проверяет NXP-шный бутлоадер перед тем, как дать управление программе.
Как вариант, можно прошивать прибор в 2 этапа:
Первым этапом загрузчик, в котором содержится его правильная контрольная сумма.
Вторым этапом - загрузчик берет прошивку из файла.
Но это громоздко. Хотелось бы в одной прошивке иметь и загрузчик и основную программу, чтобы можно было в процессе разработки заниматься отладкой всего вместе.
Как Вы решаете эту проблему?