ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
9 июля
301220 Топик полностью
Точка опоры (23.01.2012 11:51, просмотров: 107) ответил Сергей Борщ на Извините, я принципиально не хожу на казус, даже из уважения к вам не пойду. Тащите код сюда или кидайте в мыло (см. профиль), постараюсь помочь. Нет там никаких подводный камней.
Ларчик просто открывался. "#define waitcmd 0x0025 - вход в автомат загрузчика" - забыл отделить комментарий. А по поводу казуса - я-ж не предлагаю там регистрироваться, что-бы ответить, а только посмотреть. Вот, что там:
... Вот такой примерно загрузчик "прибит гвоздями" к началу памяти программ и заботится только об игнорировании попыток записи в себя (несколько первых страниц) без утомительных вычислений "а можно-ли переписать этот вектор прерывания", "а можно-ли этот фрагмент памяти переписать". .org 0h rjmp bootloader rjmp app_start+1 ... rjmp app_start+NN bootloader: ... ... rjmp app_start ... ... end_bootloader: app_start = (end_bootloader % PAGESIZE)+1)*PAGESIZE Благодаря конструкциям app_start+ сразу за ним имеется "копия" таблицы прерываний, выровненная по границе страницы записи (за исключением прерываний, занятых загрузчиком). Прикладная программа (на ассемблере) начинается не с .org 0h, а с .org app_start (для прикладной программы app_start - константа) и работает ничего не зная о загрузчике. ..... 2 такта на лишний RJMP я посчитал приемлемой платой за "неубиваемость" загрузчика. P.S. Кстати, надуманный мною вариант а можно-ли переписать это вектор прерывания вообще невозможен, т.к. все вектора попадают в одну страницу ПЗУ.
Заказать импортные ЭК - https://shop.fulcrum.ru/buy