AVR: Add examples for ISR macro to interrupt attribute doc.

gcc/
	* doc/extend.texi (AVR Function Attributes): Fuse description
	of "signal" and "interrupt" attribute.  Link pseudo instruction.
This commit is contained in:
Georg-Johann Lay 2024-02-18 11:59:06 +01:00
parent 3796216bfa
commit 0b2284bb26

View file

@ -5060,20 +5060,47 @@ without modifying an existing @option{-march=} or @option{-mcpu} option.
These function attributes are supported by the AVR back end:
@table @code
@cindex @code{signal} function attribute, AVR
@cindex @code{interrupt} function attribute, AVR
@item interrupt
Use this attribute to indicate
that the specified function is an interrupt handler. The compiler generates
@item signal
@itemx interrupt
The function is an interrupt service routine (ISR). The compiler generates
function entry and exit sequences suitable for use in an interrupt handler
when this attribute is present.
when one of the attributes is present.
On the AVR, the hardware globally disables interrupts when an
interrupt is executed. The first instruction of an interrupt handler
declared with this attribute is a @code{SEI} instruction to
re-enable interrupts. See also the @code{signal} function attribute
that does not insert a @code{SEI} instruction. If both @code{signal} and
@code{interrupt} are specified for the same function, @code{signal}
is silently ignored.
The AVR hardware globally disables interrupts when an interrupt is executed.
@itemize @bullet
@item ISRs with the @code{signal} attribute do not re-enable interrupts.
It is save to enable interrupts in a @code{signal} handler.
This ``save'' only applies to the code
generated by the compiler and not to the IRQ layout of the
application which is responsibility of the application.
@item ISRs with the @code{interrupt} attribute re-enable interrupts.
The first instruction of the routine is a @code{SEI} instruction to
globally enable interrupts.
@end itemize
The recommended way to use these attributes is by means of the
@code{ISR} macro provided by @code{avr/interrupt.h} from
@w{@uref{https://www.nongnu.org/avr-libc/user-manual/group__avr__interrupts.html,,AVR-LibC}}:
@example
#include <avr/interrupt.h>
ISR (INT0_vect) // Uses the "signal" attribute.
@{
// Code
@}
ISR (ADC_vect, ISR_NOBLOCK) // Uses the "interrupt" attribute.
@{
// Code
@}
@end example
When both @code{signal} and @code{interrupt} are specified for the same
function, then @code{signal} is silently ignored.
@cindex @code{naked} function attribute, AVR
@item naked
@ -5088,7 +5115,9 @@ depended upon to work reliably and are not supported.
@cindex @code{no_gccisr} function attribute, AVR
@item no_gccisr
Do not use @code{__gcc_isr} pseudo instructions in a function with
Do not use the @code{__gcc_isr}
@uref{https://sourceware.org/binutils/docs/as/AVR-Pseudo-Instructions.html,pseudo instruction}
in a function with
the @code{interrupt} or @code{signal} attribute aka. interrupt
service routine (ISR).
Use this attribute if the preamble of the ISR prologue should always read
@ -5141,24 +5170,6 @@ or a frame pointer whereas @code{OS_main} and @code{OS_task} do this
as needed.
@end itemize
@cindex @code{signal} function attribute, AVR
@item signal
Use this attribute on the AVR to indicate that the specified
function is an interrupt handler. The compiler generates function
entry and exit sequences suitable for use in an interrupt handler when this
attribute is present.
See also the @code{interrupt} function attribute.
The AVR hardware globally disables interrupts when an interrupt is executed.
Interrupt handler functions defined with the @code{signal} attribute
do not re-enable interrupts. It is save to enable interrupts in a
@code{signal} handler. This ``save'' only applies to the code
generated by the compiler and not to the IRQ layout of the
application which is responsibility of the application.
If both @code{signal} and @code{interrupt} are specified for the same
function, @code{signal} is silently ignored.
@end table
@node Blackfin Function Attributes