]> git.sur5r.net Git - freertos/commitdiff
Remove the two separate ports, instead use two demo apps that use a conditional compi...
authorrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Thu, 23 Oct 2008 19:16:29 +0000 (19:16 +0000)
committerrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Thu, 23 Oct 2008 19:16:29 +0000 (19:16 +0000)
git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@519 1d2547de-c912-0410-9cb9-b8ca96c0e9e2

Demo/msp430_CrossWorks/FreeRTOSConfig.h
Demo/msp430_CrossWorks/RTOSDemo.hzp
Demo/msp430_CrossWorks/RTOSDemo.hzs
Demo/msp430_CrossWorks/serial/serial.c
Demo/msp430_CrossWorks/serial/serialASM.asm [new file with mode: 0644]

index bf9c7f5aeb77927d3c610e21cbe9b0f72dcaf9f7..5b30cbc7817d4ef80a61c634a8d8846538fb9d45 100644 (file)
 \r
 #include <msp430x44x.h>\r
 \r
+/* \r
+Two interrupt examples are provided - \r
+\r
+ + Method 1 does everything in C code.\r
+ + Method 2 uses an assembly file wrapper.\r
+\r
+Code size:\r
+Method 1 uses assembly macros to save and restore the task context, whereas \r
+method 2 uses functions. This means method 1 will be faster, but method 2 will \r
+use less code space. \r
+\r
+Simplicity:\r
+Method 1 is very simplistic, whereas method 2 is more elaborate. This \r
+elaboration results in the code space saving, but also requires a slightly more \r
+complex procedure to define interrupt service routines. \r
+\r
+Interrupt efficiency:\r
+Method 1 uses the compiler generated function prologue and epilogue code to save \r
+and restore the necessary registers within an interrupt service routine (other \r
+than the RTOS tick ISR). Should a context switch be required from within the ISR \r
+the entire processor context is saved. This can result in some registers being saved \r
+twice - once by the compiler generated code, and then again by the FreeRTOS code.\r
+Method 2 saves and restores all the processor registers within each interrupt service \r
+routine, whether or not a context switch actually occurs. This means no registers \r
+ever get saved twice, but imposes an overhead on the occasions that no context switch \r
+occurs. \r
+*/\r
+\r
+#define configINTERRUPT_EXAMPLE_METHOD 1\r
+\r
 /*-----------------------------------------------------------\r
  * Application specific definitions.\r
  *\r
index 94acc5011fdec1e57f3b008fe12fb7bfaa39943d..56bb5a73b0a053caccd0944acd2fff242982dc0f 100644 (file)
       <file file_name="ParTest/ParTest.c" Name="ParTest.c" />
       <file file_name="serial/serial.c" Name="serial.c" />
       <file file_name="../Common/Minimal/integer.c" Name="integer.c" />
+      <file file_name="serial/serialASM.asm" Name="serialASM.asm" />
     </folder>
   </project>
   <configuration compiler_optimization_strategy="Minimize size" optimize_code_motion="No" optimize_block_locality="No" optimize_register_allocation="Locals Only" Name="Debug" />
   <configuration c_preprocessor_definitions="NDEBUG" build_debug_information="No" Name="Release" build_optimize_output="Yes" />
-  <configuration c_preprocessor_definitions="ROWLEY_MSP430" c_user_include_directories="$(ProjectDir);$(ProjectDir)/../common/include" linker_printf_width_precision_supported="No" Name="Common" c_system_include_directories="$(StudioDir)/include;$(ProjectDir)/../../source/include;$(ProjectDir)/../../source/portable/Rowley/msp430F449" />
+  <configuration compiler_optimization_strategy="Maximize speed" c_preprocessor_definitions="ROWLEY_MSP430" c_user_include_directories="$(ProjectDir);$(ProjectDir)/../common/include" linker_printf_width_precision_supported="No" Name="Common" c_system_include_directories="$(StudioDir)/include;$(ProjectDir)/../../source/include;$(ProjectDir)/../../source/portable/Rowley/msp430F449" />
 </solution>
index c4dc21923cb02babb5ff31ed157b582091895f02..bbeaeac8b4343abf0fe0c825490027e80ad1bcb1 100644 (file)
@@ -1,5 +1,9 @@
 <!DOCTYPE CrossStudio_for_MSP430_Session_File>
 <session>
+ <Autos>
+  <Watches active="0" />
+ </Autos>
+ <Bookmarks/>
  <Breakpoints/>
  <ExecutionCountWindow/>
  <Memory1>
   <ProjectSessionItem path="RTOSDemo" name="unnamed" />
   <ProjectSessionItem path="RTOSDemo;RTOSDemo" name="unnamed" />
   <ProjectSessionItem path="RTOSDemo;RTOSDemo;Demo Source" name="unnamed" />
-  <ProjectSessionItem path="RTOSDemo;RTOSDemo;Scheduler Source" name="unnamed" />
-  <ProjectSessionItem path="RTOSDemo;RTOSDemo;Startup Code" name="unnamed" />
  </Project>
  <Register1>
-  <RegisterWindow unsignedDisplays="" asciiDisplays="" octalDisplays="" visibleGroups="CPU Registers" decimalDisplays="" binaryDisplays="" />
+  <RegisterWindow unsignedDisplays="" asciiDisplays="" octalDisplays="" openGroups="CPU Registers" visibleGroups="CPU Registers" decimalDisplays="" binaryDisplays="" />
  </Register1>
  <Register2>
-  <RegisterWindow unsignedDisplays="" asciiDisplays="" octalDisplays="" visibleGroups="" decimalDisplays="" binaryDisplays="" />
+  <RegisterWindow unsignedDisplays="" asciiDisplays="" octalDisplays="" openGroups="" visibleGroups="" decimalDisplays="" binaryDisplays="" />
  </Register2>
  <Register3>
-  <RegisterWindow unsignedDisplays="" asciiDisplays="" octalDisplays="" visibleGroups="" decimalDisplays="" binaryDisplays="" />
+  <RegisterWindow unsignedDisplays="" asciiDisplays="" octalDisplays="" openGroups="" visibleGroups="" decimalDisplays="" binaryDisplays="" />
  </Register3>
  <Register4>
-  <RegisterWindow unsignedDisplays="" asciiDisplays="" octalDisplays="" visibleGroups="" decimalDisplays="" binaryDisplays="" />
+  <RegisterWindow unsignedDisplays="" asciiDisplays="" octalDisplays="" openGroups="" visibleGroups="" decimalDisplays="" binaryDisplays="" />
  </Register4>
  <SourceNavigatorWindow/>
  <TraceWindow>
@@ -50,8 +52,7 @@
   <Watches active="0" />
  </Watch4>
  <Files>
-  <SessionOpenFile useTextEdit="1" useBinaryEdit="0" x="0" debugPath="E:\Dev\FreeRTOS\Demo\msp430_CrossStudio\serial\serial.c" y="205" useHTMLEdit="0" path="E:\Dev\FreeRTOS\Demo\msp430_CrossStudio\serial\serial.c" left="0" selected="0" name="unnamed" top="186" />
-  <SessionOpenFile useTextEdit="1" useBinaryEdit="0" x="0" debugPath="E:\Dev\FreeRTOS\Demo\msp430_CrossStudio\main.c" y="134" useHTMLEdit="0" path="E:\Dev\FreeRTOS\Demo\msp430_CrossStudio\main.c" left="0" selected="0" name="unnamed" top="131" />
+  <SessionOpenFile useTextEdit="1" useBinaryEdit="0" x="0" debugPath="c:\e\dev\freertos\workingcopy2\demo\msp430_crossworks\main.c" y="152" useHTMLEdit="0" path="c:\e\dev\freertos\workingcopy2\demo\msp430_crossworks\main.c" left="0" selected="1" name="unnamed" top="146" />
  </Files>
- <MSP430CrossStudioWindow activeProject="RTOSDemo" ignoreExceptions="" autoConnectTarget="/MSP430 Flash Emulation Tool (MSP-FET430PIF)" debugSearchFileMap="" fileDialogInitialDirectory="E:\Dev\FreeRTOS\Demo\Common\Minimal" fileDialogDefaultFilter="*" debugSearchPath="" buildConfiguration="Debug" />
+ <MSP430CrossStudioWindow activeProject="RTOSDemo" moduleClockControl="24791" autoConnectTarget="/TI MSP430 Flash Emulation Tool (MSP-FET430PIF)" debugSearchFileMap="" fileDialogInitialDirectory="C:\E\Dev\FreeRTOS\WorkingCopy2\Demo\msp430_CrossWorks\serial" fileDialogDefaultFilter="*" haltTimerA="false" autoConnectCapabilities="1407" haltTimerB="false" holdBasicTimer="false" generalClockControl="46" debugSearchPath="" buildConfiguration="Debug" />
 </session>
index 175d591c0a9565aab4791110d34eff54aa0d3cd3..c22195b275ea393f9f791bef791a1c6beb69c3e6 100644 (file)
@@ -200,9 +200,7 @@ signed portBASE_TYPE xReturn;
 }\r
 /*-----------------------------------------------------------*/\r
 \r
-#ifdef MSP_ROWLEY_RB_PORT\r
-\r
-/* Serial interrupt service routines for the RB port. */\r
+#if configINTERRUPT_EXAMPLE_METHOD == 1\r
 \r
        /*\r
         * UART RX interrupt service routine.\r
@@ -226,6 +224,7 @@ signed portBASE_TYPE xReturn;
                        taskYIELD();\r
                }\r
 \r
+        /* Make sure any low power mode bits are clear before leaving the ISR. */\r
         __bic_SR_register_on_exit( SCG1 + SCG0 + OSCOFF + CPUOFF );\r
        }\r
        /*-----------------------------------------------------------*/\r
@@ -252,17 +251,16 @@ signed portBASE_TYPE xReturn;
                        sTHREEmpty = pdTRUE;\r
                }\r
 \r
+        /* Make sure any low power mode bits are clear before leaving the ISR. */\r
         __bic_SR_register_on_exit( SCG1 + SCG0 + OSCOFF + CPUOFF );\r
        }\r
+    /*-----------------------------------------------------------*/\r
 \r
-#endif\r
-/*-----------------------------------------------------------*/\r
-\r
-#ifdef MSP_ROWLEY_MP_PORT\r
+#elif configINTERRUPT_EXAMPLE_METHOD == 2\r
 \r
-/* Serial port interrupts for the alternative port code. */\r
-\r
-       void ISRCom1Rx( void )\r
+    /* This is a standard C function as an assembly file wrapper is used as an\r
+    interrupt entry point. */\r
+       void vRxISR( void )\r
        {\r
        signed portCHAR cChar;\r
        portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;\r
@@ -273,17 +271,16 @@ signed portBASE_TYPE xReturn;
        \r
                xQueueSendFromISR( xRxedChars, &cChar, &xHigherPriorityTaskWoken );\r
 \r
-               if( xHigherPriorityTaskWoken )\r
-               {\r
-                       /*If the post causes a task to wake force a context switch \r
-                       as the woken task may have a higher priority than the task we have \r
-                       interrupted. */\r
-                       portEXIT_SWITCHING_ISR( pdTRUE );\r
-               }\r
+        /*If the post causes a task to wake force a context switch \r
+        as the woken task may have a higher priority than the task we have \r
+        interrupted. */\r
+        portYIELD_FROM_ISR( xHigherPriorityTaskWoken );\r
        }\r
        /*-----------------------------------------------------------*/\r
        \r
-       void ISRCom1Tx( void )\r
+    /* This is a standard C function as an assembly file wrapper is used as an\r
+    interrupt entry point. */\r
+       void vTxISR( void )\r
        {\r
        signed portCHAR cChar;\r
        portBASE_TYPE xTaskWoken = pdFALSE;\r
@@ -303,5 +300,5 @@ signed portBASE_TYPE xReturn;
                }\r
        }\r
 \r
-#endif\r
+#endif /* configINTERRUPT_EXAMPLE_METHOD */\r
 /*-----------------------------------------------------------*/\r
diff --git a/Demo/msp430_CrossWorks/serial/serialASM.asm b/Demo/msp430_CrossWorks/serial/serialASM.asm
new file mode 100644 (file)
index 0000000..85b6a0e
--- /dev/null
@@ -0,0 +1,101 @@
+/*\r
+       FreeRTOS.org V5.0.4 - Copyright (C) 2003-2008 Richard Barry.\r
+\r
+       This file is part of the FreeRTOS.org distribution.\r
+\r
+       FreeRTOS.org is free software; you can redistribute it and/or modify\r
+       it under the terms of the GNU General Public License as published by\r
+       the Free Software Foundation; either version 2 of the License, or\r
+       (at your option) any later version.\r
+\r
+       FreeRTOS.org is distributed in the hope that it will be useful,\r
+       but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+       GNU General Public License for more details.\r
+\r
+       You should have received a copy of the GNU General Public License\r
+       along with FreeRTOS.org; if not, write to the Free Software\r
+       Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\r
+\r
+       A special exception to the GPL can be applied should you wish to distribute\r
+       a combined work that includes FreeRTOS.org, without being obliged to provide\r
+       the source code for any proprietary components.  See the licensing section \r
+       of http://www.FreeRTOS.org for full details of how and when the exception\r
+       can be applied.\r
+\r
+    ***************************************************************************\r
+    ***************************************************************************\r
+    *                                                                         *\r
+    * SAVE TIME AND MONEY!  We can port FreeRTOS.org to your own hardware,    *\r
+    * and even write all or part of your application on your behalf.          *\r
+    * See http://www.OpenRTOS.com for details of the services we provide to   *\r
+    * expedite your project.                                                  *\r
+    *                                                                         *\r
+    ***************************************************************************\r
+    ***************************************************************************\r
+\r
+       Please ensure to read the configuration and relevant port sections of the\r
+       online documentation.\r
+\r
+       http://www.FreeRTOS.org - Documentation, latest information, license and \r
+       contact details.\r
+\r
+       http://www.SafeRTOS.com - A version that is certified for use in safety \r
+       critical systems.\r
+\r
+       http://www.OpenRTOS.com - Commercial support, development, porting, \r
+       licensing and training services.\r
+*/\r
+\r
+#include "FreeRTOSConfig.h"\r
+#include "portasm.h"\r
+\r
+/* These wrappers are only used when interrupt method 2 is being used.  See\r
+FreeRTOSConfig.h for an explanation. */\r
+#if configINTERRUPT_EXAMPLE_METHOD == 2\r
+\r
+.CODE\r
+\r
+\r
+\r
+\r
+\r
+/* Wrapper for the Rx UART interrupt. */\r
+_vUARTRx_Wrapper\r
+\r
+       portSAVE_CONTEXT\r
+       call #_vRxISR\r
+       portRESTORE_CONTEXT\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+/* Wrapper for the Tx UART interrupt. */\r
+_vUARTTx_Wrapper\r
+\r
+       portSAVE_CONTEXT\r
+       call #_vTxISR\r
+       portRESTORE_CONTEXT\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+\r
+               \r
+\r
+       /* Place the UART ISRs in the correct vectors. */\r
+\r
+       .VECTORS\r
+\r
+       .KEEP\r
+\r
+       ORG             UART1RX_VECTOR\r
+       DW              _vUARTRx_Wrapper\r
+\r
+       ORG             UART1TX_VECTOR\r
+       DW              _vUARTTx_Wrapper                \r
+               \r
+\r
+#endif /* configINTERRUPT_EXAMPLE_METHOD */\r
+\r
+       END\r
+       \r
+               \r