Files
PX4-Autopilot/nuttx-patches/no_irq_args.patch
T
David Sidrane 99f694598e Updated NuttX submodule to upstream 7.19+ ==upstream
The has the upstream irq dispatch changes and PX4 contrib fixes
   There is now a  large static (4*NR_IRQ) NR_IRQ is > 77 on most SoS
   that is uses to save and pass args to an interrupt service.
   The problem this introduces is running out of ram on the
   STM32F100 devices. So we will carry a set patches to at
   COMPILE time use the oldstyle dispatch.
2017-09-29 10:13:51 -04:00

60 lines
1.8 KiB
Diff

diff --git NuttX/nuttx/sched/irq/irq.h NuttX/nuttx/sched/irq/irq.h
index 59bd5ea..fcf996f 100644
--- NuttX/nuttx/sched/irq/irq.h
+++ NuttX/nuttx/sched/irq/irq.h
@@ -63,7 +63,9 @@
struct irq
{
xcpt_t handler; /* Address of the interrupt handler */
+#if !defined(CONFIG_NOIRQARGS)
FAR void *arg; /* The argument provided to the interrupt handler. */
+#endif
};
/****************************************************************************
diff --git NuttX/nuttx/sched/irq/irq_attach.c NuttX/nuttx/sched/irq/irq_attach.c
index ae147e2..50c621b 100644
--- NuttX/nuttx/sched/irq/irq_attach.c
+++ NuttX/nuttx/sched/irq/irq_attach.c
@@ -97,7 +97,11 @@ int irq_attach(int irq, xcpt_t isr, FAR void * arg)
/* Save the new ISR in the table. */
g_irqvector[irq].handler = isr;
+#if defined(CONFIG_NOIRQARGS)
+ ASSERT(arg == NULL);
+#else
g_irqvector[irq].arg = arg;
+#endif
leave_critical_section(flags);
ret = OK;
}
diff --git NuttX/nuttx/sched/irq/irq_dispatch.c NuttX/nuttx/sched/irq/irq_dispatch.c
index 576e757..941eeb8 100644
--- NuttX/nuttx/sched/irq/irq_dispatch.c
+++ NuttX/nuttx/sched/irq/irq_dispatch.c
@@ -75,7 +75,11 @@ void irq_dispatch(int irq, FAR void *context)
else
{
vector = g_irqvector[irq].handler;
+#if defined(CONFIG_NOIRQARGS)
+ arg = NULL;
+#else
arg = g_irqvector[irq].arg;
+#endif
}
#else
vector = irq_unexpected_isr;
diff --git NuttX/nuttx/sched/irq/irq_initialize.c NuttX/nuttx/sched/irq/irq_initialize.c
index e03d27a..3350fb0 100644
--- NuttX/nuttx/sched/irq/irq_initialize.c
+++ NuttX/nuttx/sched/irq/irq_initialize.c
@@ -70,6 +70,8 @@ void irq_initialize(void)
for (i = 0; i < NR_IRQS; i++)
{
g_irqvector[i].handler = irq_unexpected_isr;
+#if !defined(CONFIG_NOIRQARGS)
g_irqvector[i].arg = NULL;
+#endif
}
}