ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
1 июля
98659
Sagittarius (06.09.2007 13:56, просмотров: 690)
В дебагере IAR 5.10 съехали адреса :-( функция прерывания: __arm void _USB::do_interrupt(void){ .... switch(stp.typew){ case : log.addA(SDR_GetDescriptor) break; case : break; } .... } на switch дебагер в окне дизасемблера выдает: switch(stp.typew){ 0000320 E3A0000A MOV R0, #0xA 0000324 E3800F80 ORR R0, R0, #0x200 0000328 E19000B4 LDRH R0, [R0, + R4] 000032C E3500080 CMP R0, #0x80 0000330 0A0000EE BEQ ??do_interrupt_10 ..... 000037C E3500E68 CMP R0, #0x680 0000380 0A000024 BEQ ??do_interrupt_16 0000384 81 DC8 0x81 log.addA(SDR_GetDescriptor) 0000385 60E3A010 RSCVS R10,R3,R0, LSL R0 0000389 01E3811E MVNEQ R8, LR, LSL R1 т.е. как то он спотыкается на первой команде в case, неправильно дизасемблирует ну и дальше идет по нечетным адресам. Такие глюки наблюдаются в нескольких местах. На код ниже switch-а брейки не ставятся - ругается на нечетный адрес. Если выполнять код не по С-тексту а по единичным командам в дебагере то идет он по четным адресам и текущую команду декодирует правильно, но всякая привязка к исходникам C съезжает, что делается не понятно. В чем может быть дело? как то можно это исправить? Спасибо.