Синтаксис ISR с ARM-GCC

Демонстрационный код в Интернете для определения ISR для ARM обычно выглядит следующим образом:

__irq void ISRFunc (void);

Использование ARM-GCC дает синтаксические ошибки при компиляции, я пробовал очевидные варианты, такие как _irq, но у всех одна и та же проблема. В некоторых ссылках Google указано, что вам не нужно указывать функцию как ISR, т.е. void ISRFunc(...) также будет работать. Однако у меня возникают проблемы с запуском моих программ, поэтому было бы очень полезно, если бы кто-нибудь мог подтвердить (а) требуется ли спецификатор типа __irq (или эквивалентный) и (б) каким он должен быть, чтобы избежать ошибок компиляции.

Спасибо за любую информацию.


person BruceV    schedule 30.05.2017    source источник


Ответы (1)


__isr зависит от компилятора ARM C< ключевое слово /a> (и похоже, что оно было тоже специфично для Keil, но устарел) и не будет компилироваться через GCC.

Согласно документации GCC, ниже приведен синтаксис для объявления ARM процедура обслуживания прерывания:

void __attribute__((interrupt("IRQ"))) do_irq()
{
    //your irq service code goes here
}

Дополнительные детали:

На самом деле, вы можете использовать любое из следующего, чтобы сообщить компилятору, что ваша функция является обработчиком прерывания.

void __attribute__((interrupt)) ...
void __attribute__((interrupt("FIQ"))) ...
void __attribute__((interrupt("IRQ"))) ...

Разница в том, что и "IRQ", и "FIQ" должны переключать контексты регистров и сохранять определенные регистры ("FIQ" ничего не складывает), в то время как обычный interrupt является более общим «сохранить то, что вы используете здесь, и восстановить при выходе».

person Andrejs Cainikovs    schedule 30.05.2017
comment
Спасибо Андрейс. Это еще одна неопределенность, которую я могу отметить! Ваше здоровье - person BruceV; 30.05.2017
comment
Пожалуйста! Не забудьте принять ответ :) - person Andrejs Cainikovs; 30.05.2017
comment
Я сделаю, как только узнаю, как это сделать! - person BruceV; 31.05.2017
comment
Люди на этом веб-сайте получают репутацию за проголосовавшие и принятые ответы. Вот подробная информация о том, как это делается. - person Andrejs Cainikovs; 31.05.2017