]> git.sur5r.net Git - freertos/commitdiff
Add code to the idle hook to test low power mode operation.
authorrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Sun, 19 Oct 2008 18:51:16 +0000 (18:51 +0000)
committerrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Sun, 19 Oct 2008 18:51:16 +0000 (18:51 +0000)
git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@505 1d2547de-c912-0410-9cb9-b8ca96c0e9e2

Demo/msp430_GCC/FreeRTOSConfig.h
Demo/msp430_GCC/main.c
Demo/msp430_GCC/serial/serial.c

index 048aaaea37b0b29bcb8d0ce6ed00bbb0b6453212..aa004a23088cf809ca1cfb11710ea602a45098de 100644 (file)
@@ -65,7 +65,7 @@
  *----------------------------------------------------------*/\r
 \r
 #define configUSE_PREEMPTION           1\r
-#define configUSE_IDLE_HOOK                    0\r
+#define configUSE_IDLE_HOOK                    1\r
 #define configUSE_TICK_HOOK                    0\r
 #define configCPU_CLOCK_HZ                     ( ( unsigned portLONG ) 7995392 ) /* Clock setup from main.c in the demo application. */\r
 #define configTICK_RATE_HZ                     ( ( portTickType ) 1000 )\r
index 6cd95e0a39624d57d08dec475f61fe134efe8e9b..0b106ea496a41c03c51eff3a64188aa0a4372777 100644 (file)
@@ -132,6 +132,9 @@ static portSHORT prvCheckOtherTasksAreStillRunning( void );
  */\r
 static void prvSetupHardware( void );\r
 \r
+/* Used to detect the idle hook function stalling. */\r
+static volatile unsigned portLONG ulIdleLoops = 0UL;\r
+\r
 /*-----------------------------------------------------------*/\r
 \r
 /*\r
@@ -201,6 +204,7 @@ portTickType xDelayPeriod = mainNO_ERROR_CHECK_DELAY;
 static portSHORT prvCheckOtherTasksAreStillRunning( void )\r
 {\r
 static portSHORT sNoErrorFound = pdTRUE;\r
+static unsigned portLONG ulLastIdleLoops = 0UL;\r
 \r
        /* The demo tasks maintain a count that increments every cycle of the task\r
        provided that the task has never encountered an error.  This function \r
@@ -223,6 +227,13 @@ static portSHORT sNoErrorFound = pdTRUE;
        {\r
                sNoErrorFound = pdFALSE;\r
        }\r
+\r
+       if( ulLastIdleLoops == ulIdleLoops )\r
+       {\r
+               sNoErrorFound = pdFALSE;\r
+       }\r
+\r
+       ulLastIdleLoops = ulIdleLoops;\r
        \r
        return sNoErrorFound;\r
 }\r
@@ -251,6 +262,15 @@ static void prvSetupHardware( void )
 }\r
 /*-----------------------------------------------------------*/\r
 \r
+void vApplicationIdleHook( void );\r
+void vApplicationIdleHook( void )\r
+{\r
+       /* Simple put the CPU into lowpower mode. */\r
+       _BIS_SR( LPM3_bits );\r
+       ulIdleLoops++;\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
 \r
 \r
 \r
index e78d90829ef5a48dba4a95ccdc8eaeb582677718..268dd5a260e89fca0338eccc44edf73729a50855 100644 (file)
@@ -83,8 +83,8 @@ static xQueueHandle xCharsForTx;
 static volatile portSHORT sTHREEmpty;\r
 \r
 /* Interrupt service routines. */\r
-interrupt (UART1RX_VECTOR) vRxISR( void );\r
-interrupt (UART1TX_VECTOR) vTxISR( void );\r
+interrupt (UART1RX_VECTOR) wakeup vRxISR( void );\r
+interrupt (UART1TX_VECTOR) wakeup vTxISR( void );\r
 \r
 /*-----------------------------------------------------------*/\r
 \r
@@ -208,7 +208,7 @@ signed portBASE_TYPE xReturn;
 /*\r
  * UART RX interrupt service routine.\r
  */\r
-interrupt (UART1RX_VECTOR) vRxISR( void )\r
+interrupt (UART1RX_VECTOR) wakeup vRxISR( void )\r
 {\r
 signed portCHAR cChar;\r
 portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;\r
@@ -232,7 +232,7 @@ portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
 /*\r
  * UART Tx interrupt service routine.\r
  */\r
-interrupt (UART1TX_VECTOR) vTxISR( void )\r
+interrupt (UART1TX_VECTOR) wakeup vTxISR( void )\r
 {\r
 signed portCHAR cChar;\r
 portBASE_TYPE xTaskWoken = pdFALSE;\r