ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
5 мая
1513880 Топик полностью
Nikolay_Po (24.04.2025 10:48, просмотров: 151) ответил SciFi на Я не настаиваю. Сомневаюсь, что найдёте вариант лучше, я уже немного изучал этот вопрос. А лишний call/ret - это такая мелочь. Жизнь слишком коротка, чтобы зацикливаться на такой ерунде.
Как вам мой свежий взгляд на проблему? Ни строчки на ассемблере! И заработало в железе. 
void __attribute__ ((interrupt)) USARTISR (void) { //ОПРЕДЕЛЕНИЕ ФАКТИЧЕСКОГО ОБРАБОТЧИКА ПРЕРЫВАНИЯ
    //ТУТ КОД СИ МОЕГО ОБРАБОТЧИКА ПРЕРЫВАНИЯ
}

void __attribute__ ((naked)) USART1_IRQHandler (void) { //ОПРЕДЕЛЕНИЕ ГОЛОГО ПРЕ-ПРОЛОГА ПО ВЕКТОРУ ПРЕРЫВАНИЯ
    //ТУТ МОЙ ГОЛЫЙ ПРЕ-ПРОЛОГ
    goto *&USARTISR;
}

АССЕМБЛЕР:

00000f48 g     F .text	0000023a USARTISR
00001304 g     F .text	00000020 USART1_IRQHandler

00001304 <USART1_IRQHandler>:

    ТУТ МОЙ ГОЛЫЙ ПРЕ-ПРОЛОГ. УРА!

ПЕРЕХОД НА ПОЛНЫЙ ОБРАБОТЧИК 131e: 0747a783 lw a5,116(a5) # 20000074 <FuncAddr> 1322: 8782 jr a5 00000f48 <USARTISR>:
АВТОМАТИЧЕСКИЙ ПРОЛОГ. УРА! f48: 715d addi sp,sp,-80 f4a: d03e sw a5,32(sp) f4c: 400147b7 lui a5,0x40014 f50: d23a sw a4,36(sp) f52: de22 sw s0,60(sp) f54: 80078713 addi a4,a5,-2048 # 40013800 <_eusrstack+0x20011000> f58: 20000437 lui s0,0x20000 f5c: 8007d783 lhu a5,-2048(a5) f60: dc26 sw s1,56(sp) f62: 2346 lhu s1,4(a4) f64: 42042703 lw a4,1056(s0) # 20000420 <SerialState> f68: d436 sw a3,40(sp) f6a: c686 sw ra,76(sp) f6c: c496 sw t0,72(sp) f6e: c29a sw t1,68(sp) f70: c09e sw t2,64(sp) f72: da2a sw a0,52(sp) f74: d82e sw a1,48(sp) f76: d632 sw a2,44(sp) f78: ce42 sw a6,28(sp) f7a: cc46 sw a7,24(sp) f7c: ca4a sw s2,20(sp) f7e: c872 sw t3,16(sp) f80: c676 sw t4,12(sp) f82: c47a sw t5,8(sp) f84: c27e sw t6,4(sp) ТУТ МОЙ КОД ОБРАБОТЧИКА ПРЕРЫВАНИЯ

АВТОМАТИЧЕСКИЙ ЭПИЛОГ: 10cc: 5472 lw s0,60(sp) 10ce: 40b6 lw ra,76(sp) 10d0: 42a6 lw t0,72(sp) 10d2: 4316 lw t1,68(sp) 10d4: 4386 lw t2,64(sp) 10d6: 54e2 lw s1,56(sp) 10d8: 5552 lw a0,52(sp) 10da: 55c2 lw a1,48(sp) 10dc: 5632 lw a2,44(sp) 10de: 56a2 lw a3,40(sp) 10e0: 5712 lw a4,36(sp) 10e2: 5782 lw a5,32(sp) 10e4: 4872 lw a6,28(sp) 10e6: 48e2 lw a7,24(sp) 10e8: 4952 lw s2,20(sp) 10ea: 4e42 lw t3,16(sp) 10ec: 4eb2 lw t4,12(sp) 10ee: 4f22 lw t5,8(sp) 10f0: 4f92 lw t6,4(sp) 10f2: 6161 addi sp,sp,80
А ВОТ И КОРРЕКТНЫЙ ВОЗВРАТ! 10f4: 30200073 mret