В дебагере 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 съезжает, что делается не понятно. В чем может быть дело? как то можно это исправить?
Спасибо.