diff --git a/arch/Kconfig b/arch/Kconfig index 9e98363d85..6fac6fd310 100644 --- a/arch/Kconfig +++ b/arch/Kconfig @@ -644,10 +644,10 @@ config ARCH_MINIMAL_VECTORTABLE This table is index by the hardware IRQ number and provides a value in the range of 0 to CONFIG_ARCH_NUSER_INTERRUPTS that is the new, mapped index into the vector table. Unused, unmapped interrupts - should be set to (irq_mapped_t)-1. So, for example, if g_irqmap[37] + should be set to IRQMAPPED_MAX. So, for example, if g_irqmap[37] == 24, then the hardware interrupt vector 37 will be mapped to the interrupt vector table at index 24. if g_irqmap[42] == - (irq_mapped_t)-1, then hardware interrupt vector 42 is not used and + IRQMAPPED_MAX, then hardware interrupt vector 42 is not used and if it occurs will result in an unexpected interrupt crash. config ARCH_NUSER_INTERRUPTS diff --git a/include/nuttx/irq.h b/include/nuttx/irq.h index a128482566..c194d82fdc 100644 --- a/include/nuttx/irq.h +++ b/include/nuttx/irq.h @@ -52,13 +52,33 @@ * Pre-processor Definitions ****************************************************************************/ +#ifndef __ASSEMBLY__ /* IRQ detach is a convenience definition. Detaching an interrupt handler * is equivalent to setting a NULL interrupt handler. */ -#ifndef __ASSEMBLY__ # define irq_detach(isr) irq_attach(isr, NULL, NULL) -#endif + +/* Maximum/minimum values of IRQ integer types */ + +# if NR_IRQS <= 256 +# define IRQT_MAX UINT8_MAX +# elif NR_IRQS <= 65536 +# define IRQT_MAX UINT16_MAX +# else +# define IRQT_MAX UINT32_MAX +# endif + +# ifdef CONFIG_ARCH_MINIMAL_VECTORTABLE +# if CONFIG_ARCH_NUSER_INTERRUPTS <= 256 +# define IRQMAPPED_MAX UINT8_MAX +# elif CONFIG_ARCH_NUSER_INTERRUPTS <= 65536 +# define IRQMAPPED_MAX UINT16_MAX +# else +# define IRQMAPPED_MAX UINT32_MAX +# endif + +#endif /* __ASSEMBLY__ */ /**************************************************************************** * Public Types