diff options
-rw-r--r-- | nuttx/ChangeLog | 13 | ||||
-rw-r--r-- | nuttx/Documentation/NuttX.html | 12 | ||||
-rw-r--r-- | nuttx/TODO | 4 | ||||
-rwxr-xr-x | nuttx/arch/arm/src/lpc17xx/Make.defs | 8 | ||||
-rwxr-xr-x | nuttx/arch/arm/src/lpc17xx/lpc17_idle.c | 104 | ||||
-rwxr-xr-x | nuttx/configs/nucleus2g/README.txt | 1 | ||||
-rwxr-xr-x | nuttx/configs/olimex-lpc1766stk/README.txt | 46 | ||||
-rwxr-xr-x | nuttx/configs/olimex-lpc1766stk/include/board.h | 11 | ||||
-rwxr-xr-x | nuttx/configs/olimex-lpc1766stk/src/up_leds.c | 14 | ||||
-rwxr-xr-x | nuttx/configs/stm3210e-eval/README.txt | 1 | ||||
-rwxr-xr-x | nuttx/include/stdint.h | 8 |
11 files changed, 187 insertions, 35 deletions
diff --git a/nuttx/ChangeLog b/nuttx/ChangeLog index 23520da45..261415e16 100644 --- a/nuttx/ChangeLog +++ b/nuttx/ChangeLog @@ -1483,6 +1483,9 @@ 5.19 2011-xx-xx Gregory Nutt <spudmonkey@racsa.co.cr> + * arch/arm/stm32/stm32_idle.c -- During idle times, the STM32 now uses the + WFI instruction to sleep in a reduced power mode until the next interrupt + occurs (Contributed by Uros Platise). * NSH: 'mem' command renamed to 'free'. Output is now more similar to the Linux 'free' command. * NSH: Correct a redirection bug in NSH. The following would not work; it @@ -1500,7 +1503,13 @@ nsh> cat test.txt This is a test - * drvers/pipes/pipe_common.c: Driver open method eas not returning an EINTR + * drivers/pipes/pipe_common.c: Driver open method eas not returning an EINTR error when it received a signal. Instead, it just re-started the wait. This makes it impossible to kill a background pipe operation from NSH. - + * include/stdint.h -- Correct some errors in conditional compilation (submitted + by Johannes Hampel). + * arch/arm/lpc17xx/lp17_idle.c -- Uses the same logic as the STM32: uses the + WFI instruction to sleep in a reduced power mode until the next interrupt + occurs. + * configs/olimex-lpc1766stk -- Added an LED encoded to indicate if the LPC1766 + is in sleeping. diff --git a/nuttx/Documentation/NuttX.html b/nuttx/Documentation/NuttX.html index 44fc71a9e..56ddb6351 100644 --- a/nuttx/Documentation/NuttX.html +++ b/nuttx/Documentation/NuttX.html @@ -2085,6 +2085,9 @@ buildroot-1.9 2011-02-10 <spudmonkey@racsa.co.cr> <ul><pre> nuttx-5.19 2011-xx-xx Gregory Nutt <spudmonkey@racsa.co.cr> + * arch/arm/stm32/stm32_idle.c -- During idle times, the STM32 now uses the + WFI instruction to sleep in a reduced power mode until the next interrupt + occurs (Contributed by Uros Platise). * NSH: 'mem' command renamed to 'free'. Output is now more similar to the Linux 'free' command. * NSH: Correct a redirection bug in NSH. The following would not work; it @@ -2102,9 +2105,16 @@ nuttx-5.19 2011-xx-xx Gregory Nutt <spudmonkey@racsa.co.cr> nsh> cat test.txt This is a test - * drvers/pipes/pipe_common.c: Driver open method eas not returning an EINTR + * drivers/pipes/pipe_common.c -- Driver open method eas not returning an EINTR error when it received a signal. Instead, it just re-started the wait. This makes it impossible to kill a background pipe operation from NSH. + * include/stdint.h -- Correct some errors in conditional compilation (submitted + by Johannes Hampel). + * arch/arm/lpc17xx/lp17_idle.c -- Uses the same logic as the STM32: uses the + WFI instruction to sleep in a reduced power mode until the next interrupt + occurs. + * configs/olimex-lpc1766stk -- Added an LED encoded to indicate if the LPC1766 + is in sleeping. pascal-2.1 2011-xx-xx Gregory Nutt <spudmonkey@racsa.co.cr> diff --git a/nuttx/TODO b/nuttx/TODO index 9dcb56425..5fb772cd6 100644 --- a/nuttx/TODO +++ b/nuttx/TODO @@ -87,6 +87,10 @@ o Memory Managment (mm/) Description: Add an option to free all memory allocated by a task when the task exits. This is probably not be worth the overhead for a deeply embedded system. + There would be complexities with this implementation as well + because often one task allocates memory and then passes the + memory to another: The task that "owns" the memory may not + be the same as the task that allocated the memory. Status: Open Priority: Medium/Low, a good feature to prevent memory leaks but would have negative impact on memory usage and code size. diff --git a/nuttx/arch/arm/src/lpc17xx/Make.defs b/nuttx/arch/arm/src/lpc17xx/Make.defs index 2b4ea0ffc..3665b9cce 100755 --- a/nuttx/arch/arm/src/lpc17xx/Make.defs +++ b/nuttx/arch/arm/src/lpc17xx/Make.defs @@ -1,7 +1,7 @@ ############################################################################ # arch/arm/src/lpc17xx/Make.defs # -# Copyright (C) 2010 Gregory Nutt. All rights reserved. +# Copyright (C) 2010-2011 Gregory Nutt. All rights reserved. # Author: Gregory Nutt <spudmonkey@racsa.co.cr> # # Redistribution and use in source and binary forms, with or without @@ -41,7 +41,7 @@ HEAD_ASRC = lpc17_vectors.S CMN_ASRCS = up_saveusercontext.S up_fullcontextrestore.S up_switchcontext.S CMN_CSRCS = up_assert.c up_blocktask.c up_copystate.c up_createstack.c \ - up_mdelay.c up_udelay.c up_exit.c up_idle.c up_initialize.c \ + up_mdelay.c up_udelay.c up_exit.c up_initialize.c \ up_initialstate.c up_interruptcontext.c up_modifyreg8.c \ up_modifyreg16.c up_modifyreg32.c up_releasepending.c \ up_releasestack.c up_reprioritizertr.c up_schedulesigaction.c \ @@ -52,8 +52,8 @@ CMN_CSRCS = up_assert.c up_blocktask.c up_copystate.c up_createstack.c \ CHIP_ASRCS = CHIP_CSRCS = lpc17_allocateheap.c lpc17_clockconfig.c lpc17_clrpend.c \ - lpc17_gpio.c lpc17_irq.c lpc17_lowputc.c lpc17_serial.c \ - lpc17_spi.c lpc17_ssp.c lpc17_start.c lpc17_timerisr.c + lpc17_gpio.c lpc17_idle.c lpc17_irq.c lpc17_lowputc.c \ + lpc17_serial.c lpc17_spi.c lpc17_ssp.c lpc17_start.c lpc17_timerisr.c # Configuration-dependent LPC17xx files diff --git a/nuttx/arch/arm/src/lpc17xx/lpc17_idle.c b/nuttx/arch/arm/src/lpc17xx/lpc17_idle.c new file mode 100755 index 000000000..6e55bca9e --- /dev/null +++ b/nuttx/arch/arm/src/lpc17xx/lpc17_idle.c @@ -0,0 +1,104 @@ +/****************************************************************************
+ * arch/arm/src/lpc17/lpc17_idle.c
+ *
+ * Copyright (C) 2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <arch/board/board.h>
+#include <nuttx/config.h>
+
+#include <nuttx/arch.h>
+#include "up_internal.h"
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+/* Does the board support an IDLE LED to indicate that the board is in the
+ * IDLE state?
+ */
+
+#if defined(CONFIG_ARCH_LEDS) && defined(LED_IDLE)
+# define BEGIN_IDLE() up_ledon(LED_IDLE)
+# define END_IDLE() up_ledoff(LED_IDLE)
+#else
+# define BEGIN_IDLE()
+# define END_IDLE()
+#endif
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: up_idle
+ *
+ * Description:
+ * up_idle() is the logic that will be executed when their is no other
+ * ready-to-run task. This is processor idle time and will continue until
+ * some interrupt occurs to cause a context switch from the idle task.
+ *
+ * Processing in this state may be processor-specific. e.g., this is where
+ * power management operations might be performed.
+ *
+ ****************************************************************************/
+
+void up_idle(void)
+{
+#if defined(CONFIG_SUPPRESS_INTERRUPTS) || defined(CONFIG_SUPPRESS_TIMER_INTS)
+ /* If the system is idle and there are no timer interrupts, then process
+ * "fake" timer interrupts. Hopefully, something will wake up.
+ */
+
+ sched_process_timer();
+#else
+
+ /* Sleep until an interrupt occurs to save power */
+
+ BEGIN_IDLE();
+ asm("WFI");
+ END_IDLE();
+#endif
+}
+
diff --git a/nuttx/configs/nucleus2g/README.txt b/nuttx/configs/nucleus2g/README.txt index 559c16ef3..d57980b0c 100755 --- a/nuttx/configs/nucleus2g/README.txt +++ b/nuttx/configs/nucleus2g/README.txt @@ -250,6 +250,7 @@ LEDs #define LED_SIGNAL 5 /* NC NC ON (momentary) */
#define LED_ASSERTION 6 /* NC NC ON (momentary) */
#define LED_PANIC 7 /* NC NC ON (0.5Hz flashing) */
+ #undef LED_IDLE /* Sleep mode indication not supported */
After the system is booted, this logic will no longer use LEDs 1 and 2. They
are then available for use the application software using lpc17_led1() and
diff --git a/nuttx/configs/olimex-lpc1766stk/README.txt b/nuttx/configs/olimex-lpc1766stk/README.txt index d09d504d0..98b0bb135 100755 --- a/nuttx/configs/olimex-lpc1766stk/README.txt +++ b/nuttx/configs/olimex-lpc1766stk/README.txt @@ -329,6 +329,9 @@ LEDs if you see this at all, it probably means that the system is hanging up
somewhere in the initialization phases.
- ON means that the OS completed initialization.
+ - Glowing means that the LPC17 is running in a reduced power mode: LED1 is
+ turned off when the processor enters sleep mode and back on when it wakesup
+ up.
LED2:
- ON/OFF toggles means that various events are happening.
@@ -341,25 +344,32 @@ LEDs NOTE: LED2 is controlled by a jumper labeled: ACC_IRQ/LED2. That jump must be
in the LED2 position in order to support LED2.
- LED1 LED2 Meaning
- ----- -------- --------------------------------------------------------------------
- OFF OFF Still initializing and there is no interrupt activity.
- Initialization is very fast so if you see this, it probably means
- that the system is hung up somewhere in the initialization phases.
- OFF Glowing Still initializing (see above) but taking interrupts.
- OFF ON This would mean that (1) initialization did not complete but the
- software is hung, perhaps in an infinite loop, somewhere inside
- of an interrupt handler.
- OFF Flashing Ooops! We crashed before finishing initialization.
+ LED1 LED2 Meaning
+ ------- -------- --------------------------------------------------------------------
+ OFF OFF Still initializing and there is no interrupt activity.
+ Initialization is very fast so if you see this, it probably means
+ that the system is hung up somewhere in the initialization phases.
+ OFF Glowing Still initializing (see above) but taking interrupts.
+ OFF ON This would mean that (1) initialization did not complete but the
+ software is hung, perhaps in an infinite loop, somewhere inside
+ of an interrupt handler.
+ OFF Flashing Ooops! We crashed before finishing initialization (or, perhaps
+ after initialization, during an interrupt while the LPC17xx was
+ sleeping -- see below).
- ON OFF The system has completed initialization, but is apparently not taking
- any interrupts.
- ON Glowing This is the normal healthy state: The OS successfully initialized
- and is taking interrupts.
- ON ON This would mean that (1) the OS complete initialization, but (2)
- the software is hung, perhaps in an infinite loop, somewhere inside
- of a signal or interrupt handler.
- ON Flashing Ooops! We crashed sometime after initialization.
+ ON OFF The system has completed initialization, but is apparently not taking
+ any interrupts.
+ ON Glowing The OS successfully initialized and is taking interrupts (but, for
+ some reason, is never entering a reduced power mode -- perhaps the
+ CPU is very busy?).
+ ON ON This would mean that (1) the OS complete initialization, but (2)
+ the software is hung, perhaps in an infinite loop, somewhere inside
+ of a signal or interrupt handler.
+ Glowing Glowing This is also a normal healthy state: The OS successfully initialized,
+ is running in reduced power mode, but taking interrupts. The glow
+ is very faint and you may have to dim the lights to see that LEDs are
+ active at all!
+ ON Flashing Ooops! We crashed sometime after initialization.
Using OpenOCD and GDB with an FT2232 JTAG emulator
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
diff --git a/nuttx/configs/olimex-lpc1766stk/include/board.h b/nuttx/configs/olimex-lpc1766stk/include/board.h index 275714da0..33c44b885 100755 --- a/nuttx/configs/olimex-lpc1766stk/include/board.h +++ b/nuttx/configs/olimex-lpc1766stk/include/board.h @@ -136,11 +136,12 @@ #define LED_HEAPALLOCATE 0 /* OFF OFF = Still initializing */ #define LED_IRQSENABLED 0 /* OFF OFF = Still initializing */ #define LED_STACKCREATED 1 /* ON OFF = Initialization complete */ -#define LED_INIRQ 2 /* NC ON = In an interrupt handler */ -#define LED_SIGNAL 2 /* NC ON = In a signal handler */ -#define LED_ASSERTION 2 /* NC ON = In an assertion */ -#define LED_PANIC 2 /* NC ON = Oops! We crashed. (flashing) */ - +#define LED_INIRQ 2 /* N/C ON = In an interrupt handler */ +#define LED_SIGNAL 2 /* N/C ON = In a signal handler (glowing) */ +#define LED_ASSERTION 2 /* N/C ON = In an assertion */ +#define LED_PANIC 2 /* N/C ON = Oops! We crashed. (flashing) */ +#define LED_IDLE 3 /* OFF N/C = LPC17 in sleep mode (LED1 glowing) */ + /* Alternate pin selections *********************************************************/ /* CAN1 GPIO PIN SIGNAL NAME diff --git a/nuttx/configs/olimex-lpc1766stk/src/up_leds.c b/nuttx/configs/olimex-lpc1766stk/src/up_leds.c index 73ae0c3eb..da23e18d3 100755 --- a/nuttx/configs/olimex-lpc1766stk/src/up_leds.c +++ b/nuttx/configs/olimex-lpc1766stk/src/up_leds.c @@ -2,7 +2,7 @@ * configs/olimex-lpc1766stk/src/up_leds.c * arch/arm/src/board/up_leds.c * - * Copyright (C) 2010 Gregory Nutt. All rights reserved. + * Copyright (C) 2010-2011 Gregory Nutt. All rights reserved. * Author: Gregory Nutt <spudmonkey@racsa.co.cr> * * Redistribution and use in source and binary forms, with or without @@ -92,6 +92,8 @@ * Private Data ****************************************************************************/ +static bool g_uninitialized = true; + /**************************************************************************** * Private Functions ****************************************************************************/ @@ -132,11 +134,16 @@ void up_ledon(int led) case 1 : /* STACKCREATED */ lpc17_gpiowrite(LPC1766STK_LED1, false); lpc17_gpiowrite(LPC1766STK_LED2, true); + g_uninitialized = false; break; case 2 : /* INIRQ, SIGNAL, ASSERTION, PANIC */ lpc17_gpiowrite(LPC1766STK_LED2, false); break; + + case 3 : /* IDLE */ + lpc17_gpiowrite(LPC1766STK_LED1, true); + break; } } @@ -152,9 +159,14 @@ void up_ledoff(int led) case 0 : /* STARTED, HEAPALLOCATE, IRQSENABLED */ case 1 : /* STACKCREATED */ lpc17_gpiowrite(LPC1766STK_LED1, true); + case 2 : /* INIRQ, SIGNAL, ASSERTION, PANIC */ lpc17_gpiowrite(LPC1766STK_LED2, true); break; + + case 3 : /* IDLE */ + lpc17_gpiowrite(LPC1766STK_LED1, g_uninitialized); + break; } } #endif /* CONFIG_ARCH_LEDS */ diff --git a/nuttx/configs/stm3210e-eval/README.txt b/nuttx/configs/stm3210e-eval/README.txt index 9d0807087..2a58577f6 100755 --- a/nuttx/configs/stm3210e-eval/README.txt +++ b/nuttx/configs/stm3210e-eval/README.txt @@ -228,6 +228,7 @@ They are encoded as follows: LED_SIGNAL In a signal handler*** N/C ON N/C OFF LED_ASSERTION An assertion failed ON ON N/C OFF LED_PANIC The system has crashed N/C N/C N/C ON + LED_IDLE STM32 is is sleep mode (Optional, not used) * If LED1, LED2, LED3 are statically on, then NuttX probably failed to boot and these LEDs will give you some indication of where the failure was diff --git a/nuttx/include/stdint.h b/nuttx/include/stdint.h index 3bd1d9f47..d44b13639 100755 --- a/nuttx/include/stdint.h +++ b/nuttx/include/stdint.h @@ -1,7 +1,7 @@ /**************************************************************************** * include/stdint.h * - * Copyright (C) 2009 Gregory Nutt. All rights reserved. + * Copyright (C) 2009, 2011 Gregory Nutt. All rights reserved. * Author: Gregory Nutt <spudmonkey@racsa.co.cr> * * Redistribution and use in source and binary forms, with or without @@ -60,7 +60,7 @@ #define INT16_MAX 0x7fff #define UINT16_MAX 0xffff -#ifdef __INT64_DEFINED +#ifdef __INT24_DEFINED # define INT24_MIN 0x800000 # define INT24_MAX 0x7fffff # define UINT24_MAX 0xffffff @@ -86,7 +86,7 @@ #define INT16_LEASTN_MAX 0x7fff #define UINT16_LEASTN_MAX 0xffff -#ifdef __INT64_DEFINED +#ifdef __INT24_DEFINED # define INT24_LEASTN_MIN 0x800000 # define INT24_LEASTN_MAX 0x7fffff # define UINT24_LEASTN_MAX 0xffffff @@ -112,7 +112,7 @@ #define INT16_FASTN_MAX 0x7fff #define UINT16_FASTN_MAX 0xffff -#ifdef __INT64_DEFINED +#ifdef __INT24_DEFINED # define INT24_FASTN_MIN 0x800000 # define INT24_FASTN_MAX 0x7fffff # define UINT24_FASTN_MAX 0xffffff |