ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
27 января
1567401 Топик полностью
Peter_M (Сегодня, 11:17, просмотров: 209)
Почему в обработчике прерываний К1921ВГ015 (RISC-V 32 бит), такое странное сохранение контекста регистров с использованием регистра t0? 

https://gitflic.ru/project/niiet/k1921vg015_sdk/blob

Файл memasm.h строка 138

// PLF_TRAP_STACK

// save context without trap stack

save_reg_offs t0, -1, sp // save original t0 (x5)

mv t0, sp // t0 = original sp

addi sp, sp, -TRAP_REGS_SPACE

andi sp, sp, -0x10 // align callee SP by 16

save_reg 1, sp // save ra (x1)

save_reg_offs t0, 2, sp // save original sp (x2)

load_reg_offs t0, -1, t0// restore original t0 (x5)



В функции, работу которой прервало прерывание, не испортится содержимое данных по адресу sp-4 (если они там есть, конечно)?

И почему не используется mscratch?

Как вообще правильно входить и выходить из прерывания (сохранять контекст)?

Спасибо!