Есть еще "волшебные" функции/атрибуты, но можно ли без них

. Что делает это?
Код:
void SysTick_Handler(void) __attribute__((interrupt("WCH-Interrupt-fast")));
Если обратиться к руководству "QingKeV2 Microprocessor Manual V1.2" (а именно архитектура QingKe V2A используется согласно технической документации на МК серии CH32V003), то на странице 15 в подразделе "3.4 Hardware Prologue/Epilogue (HPE)" написано, что при возникновении прерывания аппаратно всего за один такт исполнения сохраняются 10 регистров в
аппаратном стеке, а на выходе из обработчика прерывания сохранённые 10 регистров аппаратно восстанавливаются, также за один такт. Поддерживаются до двух вложенных уровней прерываний. Для архитектур QingKeV3 и QingKeV4 сохраняются уже 16 регистров.
Таким образом компилятор понимает, что ему не надо генерировать пролог и эпилог функции для сохранения значения регистров, которые будут задействованы в функции обработки прерывания. За счёт этого снижается объём кода, вырастает скорость обработки прерывания. GCC должен быть с соответствующей "заплаткой" для использования такого режима.