16+
Среда
18 июля
Вход |Карта сайта | |Upload |codebook | PARTS

 О смысле всего сущего 0xFF

 Средства и методы разработки

 Мобильная и беспроводная связь

 Блошиный рынок Объявления

caxapa

Микроконтроллеры ARM 

AVR PIC MSP PLD,FPGA,DSP 

Кибернетика Технологии 

Схемы, платы, компоненты 

Микроконтроллеры

 
   Новая тема Правила Регистрация Поиск »» Архив
Вернуться в конференциюТопик полностью
sladkoejka  (03.07.2018 14:40 - 03.07.2018 15:24) , в ответ на Я думаю контроллер у вас подменяет байт в авто-векторе USB не зависимо от наличия перед ним опкода LJMP и разрешения прерываний от USB. автор: Boвa
на какой инструкции теряется управление неизвестно и врядли это будет просто отловить. Точно ясно, что прерывание не срабатывает. Ясно также, что код в таблице векторов обрабатывается не так как в остальной части памяти. А где именно происходит 
засада неясно. То что это результат действия фичи autovector это моё предположение. Да, еще пробовал добавлять в асме nop на 0x4F или 0x50. При этом код генерируется после этого адреса. Если код генерируется после 0x50, то всё работает ок. Если до - то не работает. Т.е. с вот таким кодом не работает:
    COMMON  INTVEC:CODE:ROOT(0)
    ORG     0x4F
    nop
    END
А с таким уже работает:
    COMMON  INTVEC:CODE:ROOT(0)
    ORG     0x50
    nop
    END
В последнем случае (который работает) код располагается с адреса 0x51:
 00004F  00              NOP
 000050  00              NOP
 000051  00              NOP
 000052  00              NOP
 000053  00              NOP
 000054  80 FB           SJMP  0x0051
 000056  78 10           MOV   R0,#0x10
 000058  90 00 7B        MOV   DPTR,#0x007B
код начинается с кода C_EXIT/ROM_MONITOR_NOPS, там 3 nop и SJMP зацикливающийся. Этот код попадает на область вектора 0x0053 - это IE4 [GPIF / FIFOs / INT4 Pin]. Он тоже работает через autovector. А вот нерабочий вариант:
 00004F  00              NOP
 000050  00              NOP
 000051  00              NOP
 000052  00              NOP
 000053  80 FB           SJMP  0x0050
 000055  78 10           MOV   R0,#0x10
 000057  90 00 7A        MOV   DPTR,#0x007A
Тут интересно то, что SJMP никогда не выполняется, т.к. это код, который работает после main. А выполнение программы начинается с адреса 0x0055. Вероятно эта фича autovector сразу ячейку памяти подменяет в зависимости от источника прерывания. И эта замена работает даже если прерывания не было. Т.е. в последнем примере первый байт программы подменяется чемто и выполнение программы нарушается...
 [x][x][x][x][x][x] [x][x][x][x][x][x][x][x]

Тема выделяется по переводу строки или автоматом

 

Имя


Регистрация позволит вам редактировать и перемещать ваши сообщения и прикреплять к ним файлы.
 
Символы: á é ó ú ý « »
Главная | Карта сайта | О проекте | Проекты | Файлообменник | Регистрация | Вебмастер | RSS
Лето 7526 от сотворения мира. При использовании материалов сайта ссылка на caxapу обязательна.
MMI © MMXVIII