mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-29 21:53:33 +08:00
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.
60 lines
1.8 KiB
Diff
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
|
|
}
|
|
}
|