]> git.sur5r.net Git - freertos/commitdiff
Add Full build configuration to the Kinetis demo. Still a work in progress.
authorrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Fri, 8 Jul 2011 21:02:03 +0000 (21:02 +0000)
committerrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Fri, 8 Jul 2011 21:02:03 +0000 (21:02 +0000)
git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@1488 1d2547de-c912-0410-9cb9-b8ca96c0e9e2

Demo/CORTEX_Kinetis_K60_Tower_IAR/FreeRTOSConfig.h
Demo/CORTEX_Kinetis_K60_Tower_IAR/Freescale_Code/common/startup.c
Demo/CORTEX_Kinetis_K60_Tower_IAR/Freescale_Code/cpu/crt0.s
Demo/CORTEX_Kinetis_K60_Tower_IAR/Freescale_Code/cpu/vectors.c
Demo/CORTEX_Kinetis_K60_Tower_IAR/Freescale_Code/cpu/vectors.h
Demo/CORTEX_Kinetis_K60_Tower_IAR/ParTest.c [new file with mode: 0644]
Demo/CORTEX_Kinetis_K60_Tower_IAR/RTOSDemo.ewd
Demo/CORTEX_Kinetis_K60_Tower_IAR/RTOSDemo.ewp
Demo/CORTEX_Kinetis_K60_Tower_IAR/main-full.c [new file with mode: 0644]
Demo/CORTEX_Kinetis_K60_Tower_IAR/main_blinky.c

index b3b498bec22cfac971e750d6f44571ed3cef797c..1baa172e24767855c07e9ed8105db6180dbddd69 100644 (file)
  * See http://www.freertos.org/a00110.html.\r
  *----------------------------------------------------------*/\r
 \r
-\r
 #define configUSE_PREEMPTION                   1\r
 #define configUSE_IDLE_HOOK                            1\r
 #define configUSE_TICK_HOOK                            1\r
-#define configCPU_CLOCK_HZ                             ( 75000000UL )\r
+#define configCPU_CLOCK_HZ                             ( 96000000UL )\r
 #define configTICK_RATE_HZ                             ( ( portTickType ) 1000 )\r
 #define configMAX_PRIORITIES                   ( ( unsigned portBASE_TYPE ) 5 )\r
 #define configMINIMAL_STACK_SIZE               ( ( unsigned short ) 90 )\r
index 0d2fb4586febada5e2c3a5fbf1034c9db08c4929..0e1ba1f2c9c5d9441852f3fda9424ba821c6871d 100644 (file)
@@ -38,19 +38,6 @@ common_startup(void)
     uint8 * bss_start, * bss_end;\r
 \r
 \r
-    /* Addresses for VECTOR_TABLE and VECTOR_RAM come from the linker file */\r
-    extern uint32 __VECTOR_TABLE[];\r
-    extern uint32 __VECTOR_RAM[];\r
-\r
-    /* Copy the vector table to RAM */\r
-    if (__VECTOR_RAM != __VECTOR_TABLE)\r
-    {\r
-        for (n = 0; n < 0x410; n++)\r
-            __VECTOR_RAM[n] = __VECTOR_TABLE[n];\r
-    }\r
-    /* Point the VTOR to the new copy of the vector table */\r
-    write_vtor((uint32)__VECTOR_RAM);\r
-\r
     /* Get the addresses for the .data section (initialized data section) */\r
        #if (defined(CW))\r
         data_ram = (uint8 *)__DATA_RAM;\r
index a983ed3173d3ead221fbc04ff1611f30f9edf068..bc2ec885cac558f3d15f4b5c4207fc7293c3eb4c 100644 (file)
@@ -27,7 +27,6 @@ __startup
        MOV     r10,#0\r
        MOV     r11,#0\r
        MOV     r12,#0\r
-       CPSIE   i                       ; Unmask interrupts\r
         import start\r
         BL      start                  ; call the C code\r
 __done\r
index 8443b67c1bc87f9a2e4eae94f8ed10b718687ae7..8ce4241621fb9015d7d597a4b4f224f161d8350e 100644 (file)
@@ -7,14 +7,6 @@
 #include "vectors.h"\r
 #include "common.h"\r
 \r
-/* The kernel interrupts - in their CMSIS form. */\r
-extern void SVC_Handler( void );\r
-extern void PendSV_Handler( void );\r
-extern void SysTick_Handler( void );\r
-\r
-/* The button interrupt. */\r
-extern void vPort_E_ISRHandler( void );\r
-\r
 /******************************************************************************\r
 * Vector Table\r
 ******************************************************************************/\r
@@ -41,11 +33,11 @@ typedef void (*vector_entry)(void);
    VECTOR_008,\r
    VECTOR_009,\r
    VECTOR_010,\r
-   SVC_Handler,\r
+   VECTOR_011,\r
    VECTOR_012,\r
    VECTOR_013,\r
-   PendSV_Handler,\r
-   SysTick_Handler,\r
+   VECTOR_014,\r
+   VECTOR_015,\r
 \r
    VECTOR_016,\r
    VECTOR_017,\r
@@ -134,11 +126,11 @@ typedef void (*vector_entry)(void);
    VECTOR_100,\r
    VECTOR_101,\r
    VECTOR_102,\r
-   VECTOR_103, /* Port A */\r
+   VECTOR_103,\r
    VECTOR_104,\r
-   VECTOR_105, /* Port C */\r
+   VECTOR_105,\r
    VECTOR_106,\r
-   vPort_E_ISRHandler, /* Port E */\r
+   VECTOR_107,\r
    VECTOR_108,\r
    VECTOR_109,\r
    VECTOR_110,\r
index 072c409b8dbc3523ace98d96627e7ef0a5a3412b..76bf5afdc607e2026f0c2f15ae2c6f54bc982b8f 100644 (file)
@@ -1,16 +1,25 @@
 /******************************************************************************\r
 * File:    vectors.h\r
 *\r
-* Purpose: Provide custom interrupt service routines for Kinetis. \r
+* Purpose: Provide custom interrupt service routines for Kinetis.\r
 *\r
-* NOTE: This vector table is a superset table, so interrupt sources might be \r
-*       listed that are not available on the specific Kinetis device you are \r
+* NOTE: This vector table is a superset table, so interrupt sources might be\r
+*       listed that are not available on the specific Kinetis device you are\r
 *       using.\r
 ******************************************************************************/\r
 \r
 #ifndef __VECTORS_H\r
 #define __VECTORS_H     1\r
 \r
+/* The kernel interrupts - in their CMSIS form. */\r
+extern void SVC_Handler( void );\r
+extern void PendSV_Handler( void );\r
+extern void SysTick_Handler( void );\r
+\r
+/* The button interrupt. */\r
+extern void vPort_E_ISRHandler( void );\r
+\r
+\r
 // function prototype for default_isr in vectors.c\r
 void default_isr(void);\r
 void abort_isr(void);\r
@@ -32,15 +41,15 @@ extern void __iar_program_start(void);
 #define VECTOR_004      default_isr     // 0x0000_0010 4 -\r
 #define VECTOR_005      default_isr     // 0x0000_0014 5 -          ARM core         Bus Fault\r
 #define VECTOR_006      default_isr     // 0x0000_0018 6 -          ARM core         Usage Fault\r
-#define VECTOR_007      default_isr     // 0x0000_001C 7 -                           \r
-#define VECTOR_008      default_isr     // 0x0000_0020 8 -                           \r
+#define VECTOR_007      default_isr     // 0x0000_001C 7 -\r
+#define VECTOR_008      default_isr     // 0x0000_0020 8 -\r
 #define VECTOR_009      default_isr     // 0x0000_0024 9 -\r
 #define VECTOR_010      default_isr     // 0x0000_0028 10 -\r
-#define VECTOR_011      default_isr     // 0x0000_002C 11 -         ARM core         Supervisor call (SVCall)\r
+#define VECTOR_011      SVC_Handler     // 0x0000_002C 11 -         ARM core         Supervisor call (SVCall)\r
 #define VECTOR_012      default_isr     // 0x0000_0030 12 -         ARM core         Debug Monitor\r
-#define VECTOR_013      default_isr     // 0x0000_0034 13 -                          \r
-#define VECTOR_014      default_isr     // 0x0000_0038 14 -         ARM core         Pendable request for system service (PendableSrvReq)\r
-#define VECTOR_015      default_isr     // 0x0000_003C 15 -         ARM core         System tick timer (SysTick)\r
+#define VECTOR_013      default_isr     // 0x0000_0034 13 -\r
+#define VECTOR_014      PendSV_Handler  // 0x0000_0038 14 -         ARM core         Pendable request for system service (PendableSrvReq)\r
+#define VECTOR_015      SysTick_Handler // 0x0000_003C 15 -         ARM core         System tick timer (SysTick)\r
 #define VECTOR_016      default_isr     // 0x0000_0040 16     0     DMA              DMA Channel 0 transfer complete\r
 #define VECTOR_017      default_isr     // 0x0000_0044 17     1     DMA              DMA Channel 1 transfer complete\r
 #define VECTOR_018      default_isr     // 0x0000_0048 18     2     DMA              DMA Channel 2 transfer complete\r
@@ -85,7 +94,7 @@ extern void __iar_program_start(void);
 #define VECTOR_057      default_isr     // 0x0000_00E4 57    41     CAN1             Receive Warning\r
 #define VECTOR_058      default_isr     // 0x0000_00E8 58    42     CAN1             Wake Up\r
 #define VECTOR_059      default_isr     // 0x0000_00EC 59    43     CAN1             Individual Matching Elements Update (IMEU)\r
-#define VECTOR_060      default_isr     // 0x0000_00F0 60    44     CAN1             Lost receive \r
+#define VECTOR_060      default_isr     // 0x0000_00F0 60    44     CAN1             Lost receive\r
 #define VECTOR_061      default_isr     // 0x0000_00F4 61    45     UART0            Single interrupt vector for UART status sources\r
 #define VECTOR_062      default_isr     // 0x0000_00F8 62    46     UART0            Single interrupt vector for UART error sources\r
 #define VECTOR_063      default_isr     // 0x0000_00FC 63    47     UART1            Single interrupt vector for UART status sources\r
@@ -100,7 +109,7 @@ extern void __iar_program_start(void);
 #define VECTOR_072      default_isr     // 0x0000_0120 72    56     UART5            Single interrupt vector for UART error sources\r
 #define VECTOR_073      default_isr     // 0x0000_0124 73    57     ADC0\r
 #define VECTOR_074      default_isr     // 0x0000_0128 74    58     ADC1\r
-#define VECTOR_075      default_isr     // 0x0000_012C 75    59     CMP0             High-speed comparator \r
+#define VECTOR_075      default_isr     // 0x0000_012C 75    59     CMP0             High-speed comparator\r
 #define VECTOR_076      default_isr     // 0x0000_0130 76    60     CMP1\r
 #define VECTOR_077      default_isr     // 0x0000_0134 77    61     CMP2\r
 #define VECTOR_078      default_isr     // 0x0000_0138 78    62     FTM0                        Single interrupt vector for all sources\r
@@ -116,7 +125,7 @@ extern void __iar_program_start(void);
 #define VECTOR_088      default_isr     // 0x0000_0160 88    72     PDB\r
 #define VECTOR_089      default_isr     // 0x0000_0164 89    73     USB OTG\r
 #define VECTOR_090      default_isr     // 0x0000_0168 90    74     USB Charger Detect\r
-#define VECTOR_091      default_isr     // 0x0000_016C 91    75                ENET                     IEEE 1588 Timer interrupt                       \r
+#define VECTOR_091      default_isr     // 0x0000_016C 91    75                ENET                     IEEE 1588 Timer interrupt                      \r
 #define VECTOR_092      default_isr     // 0x0000_0170 92    76                ENET                     Transmit interrupt\r
 #define VECTOR_093      default_isr     // 0x0000_0174 93    77                ENET                     Receive interrupt\r
 #define VECTOR_094      default_isr     // 0x0000_0178 94    78                ENET                     Error and miscellaneous interrupt\r
@@ -132,157 +141,157 @@ extern void __iar_program_start(void);
 #define VECTOR_104      default_isr     // 0x0000_01A0 104   88     Port control module Pin Detect (Port B)\r
 #define VECTOR_105      default_isr     // 0x0000_01A4 105   89     Port control module Pin Detect (Port C)\r
 #define VECTOR_106      default_isr     // 0x0000_01A8 106   90     Port control module Pin Detect (Port D)\r
-#define VECTOR_107      default_isr     // 0x0000_01AC 107   91     Port control module Pin Detect (Port E)\r
-#define VECTOR_108      default_isr     // 0x0000_01B0 108   92    \r
-#define VECTOR_109      default_isr     // 0x0000_01B4 109   93    \r
-#define VECTOR_110      default_isr     // 0x0000_01B8 110   94    \r
-#define VECTOR_111      default_isr     // 0x0000_01BC 111   95    \r
-#define VECTOR_112      default_isr     // 0x0000_01C0 112   96    \r
-#define VECTOR_113      default_isr     // 0x0000_01C4 113   97    \r
-#define VECTOR_114      default_isr     // 0x0000_01C8 114   98    \r
-#define VECTOR_115      default_isr     // 0x0000_01CC 115   99    \r
+#define VECTOR_107      vPort_E_ISRHandler // 0x0000_01AC 107   91     Port control module Pin Detect (Port E)\r
+#define VECTOR_108      default_isr     // 0x0000_01B0 108   92\r
+#define VECTOR_109      default_isr     // 0x0000_01B4 109   93\r
+#define VECTOR_110      default_isr     // 0x0000_01B8 110   94\r
+#define VECTOR_111      default_isr     // 0x0000_01BC 111   95\r
+#define VECTOR_112      default_isr     // 0x0000_01C0 112   96\r
+#define VECTOR_113      default_isr     // 0x0000_01C4 113   97\r
+#define VECTOR_114      default_isr     // 0x0000_01C8 114   98\r
+#define VECTOR_115      default_isr     // 0x0000_01CC 115   99\r
 #define VECTOR_116      default_isr     // 0x0000_01D0 116   100\r
 #define VECTOR_117      default_isr     // 0x0000_01D4 117   101\r
 #define VECTOR_118      default_isr     // 0x0000_01D8 118   102\r
 #define VECTOR_119      default_isr     // 0x0000_01DC 119   103\r
-#define VECTOR_120      default_isr     // \r
-#define VECTOR_121      default_isr     // \r
-#define VECTOR_122      default_isr     // \r
-#define VECTOR_123      default_isr     // \r
-#define VECTOR_124      default_isr     // \r
-#define VECTOR_125      default_isr     // \r
-#define VECTOR_126      default_isr     // \r
-#define VECTOR_127      default_isr     // \r
-#define VECTOR_128      default_isr     // \r
-#define VECTOR_129      default_isr     // \r
-#define VECTOR_130      default_isr     // \r
-#define VECTOR_131      default_isr     // \r
-#define VECTOR_132      default_isr     // \r
-#define VECTOR_133      default_isr     // \r
-#define VECTOR_134      default_isr     // \r
-#define VECTOR_135      default_isr     // \r
-#define VECTOR_136      default_isr     // \r
-#define VECTOR_137      default_isr     // \r
-#define VECTOR_138      default_isr     // \r
-#define VECTOR_139      default_isr     // \r
-#define VECTOR_140      default_isr     // \r
-#define VECTOR_141      default_isr     // \r
-#define VECTOR_142      default_isr     // \r
-#define VECTOR_143      default_isr     // \r
-#define VECTOR_144      default_isr     // \r
-#define VECTOR_145      default_isr     // \r
-#define VECTOR_146      default_isr     // \r
-#define VECTOR_147      default_isr     // \r
-#define VECTOR_148      default_isr     // \r
-#define VECTOR_149      default_isr     // \r
-#define VECTOR_150      default_isr     // \r
-#define VECTOR_151      default_isr     // \r
-#define VECTOR_152      default_isr     // \r
-#define VECTOR_153      default_isr     // \r
-#define VECTOR_154      default_isr     // \r
-#define VECTOR_155      default_isr     // \r
-#define VECTOR_156      default_isr     // \r
-#define VECTOR_157      default_isr     // \r
-#define VECTOR_158      default_isr     // \r
-#define VECTOR_159      default_isr     // \r
-#define VECTOR_160      default_isr     // \r
-#define VECTOR_161      default_isr     // \r
-#define VECTOR_162      default_isr     // \r
-#define VECTOR_163      default_isr     // \r
-#define VECTOR_164      default_isr     // \r
-#define VECTOR_165      default_isr     // \r
-#define VECTOR_166      default_isr     // \r
-#define VECTOR_167      default_isr     // \r
-#define VECTOR_168      default_isr     // \r
-#define VECTOR_169      default_isr     // \r
-#define VECTOR_170      default_isr     // \r
-#define VECTOR_171      default_isr     // \r
-#define VECTOR_172      default_isr     // \r
-#define VECTOR_173      default_isr     // \r
-#define VECTOR_174      default_isr     // \r
-#define VECTOR_175      default_isr     // \r
-#define VECTOR_176      default_isr     // \r
-#define VECTOR_177      default_isr     // \r
-#define VECTOR_178      default_isr     // \r
-#define VECTOR_179      default_isr     // \r
-#define VECTOR_180      default_isr     // \r
-#define VECTOR_181      default_isr     // \r
-#define VECTOR_182      default_isr     // \r
-#define VECTOR_183      default_isr     // \r
-#define VECTOR_184      default_isr     // \r
-#define VECTOR_185      default_isr     // \r
-#define VECTOR_186      default_isr     // \r
-#define VECTOR_187      default_isr     // \r
-#define VECTOR_188      default_isr     // \r
-#define VECTOR_189      default_isr     // \r
-#define VECTOR_190      default_isr     // \r
-#define VECTOR_191      default_isr     // \r
-#define VECTOR_192      default_isr     // \r
-#define VECTOR_193      default_isr     // \r
-#define VECTOR_194      default_isr     // \r
-#define VECTOR_195      default_isr     // \r
-#define VECTOR_196      default_isr     // \r
-#define VECTOR_197      default_isr     // \r
-#define VECTOR_198      default_isr     // \r
-#define VECTOR_199      default_isr     // \r
-#define VECTOR_200      default_isr     // \r
-#define VECTOR_201      default_isr     // \r
-#define VECTOR_202      default_isr     // \r
-#define VECTOR_203      default_isr     // \r
-#define VECTOR_204      default_isr     // \r
-#define VECTOR_205      default_isr     // \r
-#define VECTOR_206      default_isr     // \r
-#define VECTOR_207      default_isr     // \r
-#define VECTOR_208      default_isr     // \r
-#define VECTOR_209      default_isr     // \r
-#define VECTOR_210      default_isr     // \r
-#define VECTOR_211      default_isr     // \r
-#define VECTOR_212      default_isr     // \r
-#define VECTOR_213      default_isr     // \r
-#define VECTOR_214      default_isr     // \r
-#define VECTOR_215      default_isr     // \r
-#define VECTOR_216      default_isr     // \r
-#define VECTOR_217      default_isr     // \r
-#define VECTOR_218      default_isr     // \r
-#define VECTOR_219      default_isr     // \r
-#define VECTOR_220      default_isr     // \r
-#define VECTOR_221      default_isr     // \r
-#define VECTOR_222      default_isr     // \r
-#define VECTOR_223      default_isr     // \r
-#define VECTOR_224      default_isr     // \r
-#define VECTOR_225      default_isr     // \r
-#define VECTOR_226      default_isr     // \r
-#define VECTOR_227      default_isr     // \r
-#define VECTOR_228      default_isr     // \r
-#define VECTOR_229      default_isr     // \r
-#define VECTOR_230      default_isr     // \r
-#define VECTOR_231      default_isr     // \r
-#define VECTOR_232      default_isr     // \r
-#define VECTOR_233      default_isr     // \r
-#define VECTOR_234      default_isr     // \r
-#define VECTOR_235      default_isr     // \r
-#define VECTOR_236      default_isr     // \r
-#define VECTOR_237      default_isr     // \r
-#define VECTOR_238      default_isr     // \r
-#define VECTOR_239      default_isr     // \r
-#define VECTOR_240      default_isr     // \r
-#define VECTOR_241      default_isr     // \r
-#define VECTOR_242      default_isr     // \r
-#define VECTOR_243      default_isr     // \r
-#define VECTOR_244      default_isr     // \r
-#define VECTOR_245      default_isr     // \r
-#define VECTOR_246      default_isr     // \r
-#define VECTOR_247      default_isr     // \r
-#define VECTOR_248      default_isr     // \r
-#define VECTOR_249      default_isr     // \r
-#define VECTOR_250      default_isr     // \r
-#define VECTOR_251      default_isr     // \r
-#define VECTOR_252      default_isr     // \r
-#define VECTOR_253      default_isr     // \r
-#define VECTOR_254      default_isr     // \r
-#define VECTOR_255      default_isr     // \r
-#define CONFIG_1               (pointer*)0xffffffff \r
-#define CONFIG_2               (pointer*)0xffffffff \r
+#define VECTOR_120      default_isr     //\r
+#define VECTOR_121      default_isr     //\r
+#define VECTOR_122      default_isr     //\r
+#define VECTOR_123      default_isr     //\r
+#define VECTOR_124      default_isr     //\r
+#define VECTOR_125      default_isr     //\r
+#define VECTOR_126      default_isr     //\r
+#define VECTOR_127      default_isr     //\r
+#define VECTOR_128      default_isr     //\r
+#define VECTOR_129      default_isr     //\r
+#define VECTOR_130      default_isr     //\r
+#define VECTOR_131      default_isr     //\r
+#define VECTOR_132      default_isr     //\r
+#define VECTOR_133      default_isr     //\r
+#define VECTOR_134      default_isr     //\r
+#define VECTOR_135      default_isr     //\r
+#define VECTOR_136      default_isr     //\r
+#define VECTOR_137      default_isr     //\r
+#define VECTOR_138      default_isr     //\r
+#define VECTOR_139      default_isr     //\r
+#define VECTOR_140      default_isr     //\r
+#define VECTOR_141      default_isr     //\r
+#define VECTOR_142      default_isr     //\r
+#define VECTOR_143      default_isr     //\r
+#define VECTOR_144      default_isr     //\r
+#define VECTOR_145      default_isr     //\r
+#define VECTOR_146      default_isr     //\r
+#define VECTOR_147      default_isr     //\r
+#define VECTOR_148      default_isr     //\r
+#define VECTOR_149      default_isr     //\r
+#define VECTOR_150      default_isr     //\r
+#define VECTOR_151      default_isr     //\r
+#define VECTOR_152      default_isr     //\r
+#define VECTOR_153      default_isr     //\r
+#define VECTOR_154      default_isr     //\r
+#define VECTOR_155      default_isr     //\r
+#define VECTOR_156      default_isr     //\r
+#define VECTOR_157      default_isr     //\r
+#define VECTOR_158      default_isr     //\r
+#define VECTOR_159      default_isr     //\r
+#define VECTOR_160      default_isr     //\r
+#define VECTOR_161      default_isr     //\r
+#define VECTOR_162      default_isr     //\r
+#define VECTOR_163      default_isr     //\r
+#define VECTOR_164      default_isr     //\r
+#define VECTOR_165      default_isr     //\r
+#define VECTOR_166      default_isr     //\r
+#define VECTOR_167      default_isr     //\r
+#define VECTOR_168      default_isr     //\r
+#define VECTOR_169      default_isr     //\r
+#define VECTOR_170      default_isr     //\r
+#define VECTOR_171      default_isr     //\r
+#define VECTOR_172      default_isr     //\r
+#define VECTOR_173      default_isr     //\r
+#define VECTOR_174      default_isr     //\r
+#define VECTOR_175      default_isr     //\r
+#define VECTOR_176      default_isr     //\r
+#define VECTOR_177      default_isr     //\r
+#define VECTOR_178      default_isr     //\r
+#define VECTOR_179      default_isr     //\r
+#define VECTOR_180      default_isr     //\r
+#define VECTOR_181      default_isr     //\r
+#define VECTOR_182      default_isr     //\r
+#define VECTOR_183      default_isr     //\r
+#define VECTOR_184      default_isr     //\r
+#define VECTOR_185      default_isr     //\r
+#define VECTOR_186      default_isr     //\r
+#define VECTOR_187      default_isr     //\r
+#define VECTOR_188      default_isr     //\r
+#define VECTOR_189      default_isr     //\r
+#define VECTOR_190      default_isr     //\r
+#define VECTOR_191      default_isr     //\r
+#define VECTOR_192      default_isr     //\r
+#define VECTOR_193      default_isr     //\r
+#define VECTOR_194      default_isr     //\r
+#define VECTOR_195      default_isr     //\r
+#define VECTOR_196      default_isr     //\r
+#define VECTOR_197      default_isr     //\r
+#define VECTOR_198      default_isr     //\r
+#define VECTOR_199      default_isr     //\r
+#define VECTOR_200      default_isr     //\r
+#define VECTOR_201      default_isr     //\r
+#define VECTOR_202      default_isr     //\r
+#define VECTOR_203      default_isr     //\r
+#define VECTOR_204      default_isr     //\r
+#define VECTOR_205      default_isr     //\r
+#define VECTOR_206      default_isr     //\r
+#define VECTOR_207      default_isr     //\r
+#define VECTOR_208      default_isr     //\r
+#define VECTOR_209      default_isr     //\r
+#define VECTOR_210      default_isr     //\r
+#define VECTOR_211      default_isr     //\r
+#define VECTOR_212      default_isr     //\r
+#define VECTOR_213      default_isr     //\r
+#define VECTOR_214      default_isr     //\r
+#define VECTOR_215      default_isr     //\r
+#define VECTOR_216      default_isr     //\r
+#define VECTOR_217      default_isr     //\r
+#define VECTOR_218      default_isr     //\r
+#define VECTOR_219      default_isr     //\r
+#define VECTOR_220      default_isr     //\r
+#define VECTOR_221      default_isr     //\r
+#define VECTOR_222      default_isr     //\r
+#define VECTOR_223      default_isr     //\r
+#define VECTOR_224      default_isr     //\r
+#define VECTOR_225      default_isr     //\r
+#define VECTOR_226      default_isr     //\r
+#define VECTOR_227      default_isr     //\r
+#define VECTOR_228      default_isr     //\r
+#define VECTOR_229      default_isr     //\r
+#define VECTOR_230      default_isr     //\r
+#define VECTOR_231      default_isr     //\r
+#define VECTOR_232      default_isr     //\r
+#define VECTOR_233      default_isr     //\r
+#define VECTOR_234      default_isr     //\r
+#define VECTOR_235      default_isr     //\r
+#define VECTOR_236      default_isr     //\r
+#define VECTOR_237      default_isr     //\r
+#define VECTOR_238      default_isr     //\r
+#define VECTOR_239      default_isr     //\r
+#define VECTOR_240      default_isr     //\r
+#define VECTOR_241      default_isr     //\r
+#define VECTOR_242      default_isr     //\r
+#define VECTOR_243      default_isr     //\r
+#define VECTOR_244      default_isr     //\r
+#define VECTOR_245      default_isr     //\r
+#define VECTOR_246      default_isr     //\r
+#define VECTOR_247      default_isr     //\r
+#define VECTOR_248      default_isr     //\r
+#define VECTOR_249      default_isr     //\r
+#define VECTOR_250      default_isr     //\r
+#define VECTOR_251      default_isr     //\r
+#define VECTOR_252      default_isr     //\r
+#define VECTOR_253      default_isr     //\r
+#define VECTOR_254      default_isr     //\r
+#define VECTOR_255      default_isr     //\r
+#define CONFIG_1               (pointer*)0xffffffff\r
+#define CONFIG_2               (pointer*)0xffffffff\r
 #define CONFIG_3               (pointer*)0xffffffff\r
 #define CONFIG_4               (pointer*)0xfffffffe\r
 \r
diff --git a/Demo/CORTEX_Kinetis_K60_Tower_IAR/ParTest.c b/Demo/CORTEX_Kinetis_K60_Tower_IAR/ParTest.c
new file mode 100644 (file)
index 0000000..37e48fe
--- /dev/null
@@ -0,0 +1,150 @@
+/*\r
+    FreeRTOS V7.0.1 - Copyright (C) 2011 Real Time Engineers Ltd.\r
+       \r
+\r
+    ***************************************************************************\r
+     *                                                                       *\r
+     *    FreeRTOS tutorial books are available in pdf and paperback.        *\r
+     *    Complete, revised, and edited pdf reference manuals are also       *\r
+     *    available.                                                         *\r
+     *                                                                       *\r
+     *    Purchasing FreeRTOS documentation will not only help you, by       *\r
+     *    ensuring you get running as quickly as possible and with an        *\r
+     *    in-depth knowledge of how to use FreeRTOS, it will also help       *\r
+     *    the FreeRTOS project to continue with its mission of providing     *\r
+     *    professional grade, cross platform, de facto standard solutions    *\r
+     *    for microcontrollers - completely free of charge!                  *\r
+     *                                                                       *\r
+     *    >>> See http://www.FreeRTOS.org/Documentation for details. <<<     *\r
+     *                                                                       *\r
+     *    Thank you for using FreeRTOS, and thank you for your support!      *\r
+     *                                                                       *\r
+    ***************************************************************************\r
+\r
+\r
+    This file is part of the FreeRTOS distribution.\r
+\r
+    FreeRTOS is free software; you can redistribute it and/or modify it under\r
+    the terms of the GNU General Public License (version 2) as published by the\r
+    Free Software Foundation AND MODIFIED BY the FreeRTOS exception.\r
+    >>>NOTE<<< The modification to the GPL is included to allow you to\r
+    distribute a combined work that includes FreeRTOS without being obliged to\r
+    provide the source code for proprietary components outside of the FreeRTOS\r
+    kernel.  FreeRTOS is distributed in the hope that it will be useful, but\r
+    WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\r
+    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for\r
+    more details. You should have received a copy of the GNU General Public\r
+    License and the FreeRTOS license exception along with FreeRTOS; if not it\r
+    can be viewed here: http://www.freertos.org/a00114.html and also obtained\r
+    by writing to Richard Barry, contact details for whom are available on the\r
+    FreeRTOS WEB site.\r
+\r
+    1 tab == 4 spaces!\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
+/*-----------------------------------------------------------\r
+ * Simple parallel port IO routines.\r
+ *-----------------------------------------------------------*/\r
+\r
+/* Kernel includes. */\r
+#include "FreeRTOS.h"\r
+#include "task.h"\r
+\r
+/* Standard demo include. */\r
+#include "partest.h"\r
+\r
+/* Freescale includes. */\r
+#include "common.h"\r
+\r
+/* Only the LEDs on one of the two seven segment displays are used. */\r
+#define partstMAX_LEDS         4\r
+\r
+const unsigned long ulLEDs[ partstMAX_LEDS ] = { ( 1UL << 10UL ), ( 1UL << 29UL ), ( 1UL << 28UL ), ( 1UL << 11UL ) };\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+void vParTestInitialise( void )\r
+{\r
+       /* Set PTA10, PTA11, PTA28, and PTA29 (connected to LED's) for GPIO\r
+       functionality. */\r
+       PORTA_PCR10 = ( 0 | PORT_PCR_MUX( 1 ) );\r
+       PORTA_PCR11 = ( 0 | PORT_PCR_MUX( 1 ) );\r
+       PORTA_PCR28 = ( 0 | PORT_PCR_MUX( 1 ) );\r
+       PORTA_PCR29 = ( 0 | PORT_PCR_MUX( 1 ) );\r
+       \r
+       /* Change PTA10, PTA11, PTA28, PTA29 to outputs. */\r
+       GPIOA_PDDR=GPIO_PDDR_PDD( ulLEDs[ 0 ] | ulLEDs[ 1 ] | ulLEDs[ 2 ] | ulLEDs[ 3 ] );      \r
+\r
+       /* Start with LEDs off. */\r
+       GPIOA_PTOR = ~0U;\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+void vParTestSetLED( unsigned portBASE_TYPE uxLED, signed portBASE_TYPE xValue )\r
+{\r
+       if( uxLED < partstMAX_LEDS )\r
+       {\r
+               /* A critical section is used as the LEDs are also accessed from an\r
+               interrupt. */\r
+               taskENTER_CRITICAL();\r
+               {\r
+                       if( xValue == pdTRUE )\r
+                       {\r
+                               GPIOA_PDOR &= ~GPIO_PDOR_PDO( ulLEDs[ uxLED ] );\r
+                       }\r
+                       else\r
+                       {\r
+                               GPIOA_PDOR |= GPIO_PDOR_PDO( ulLEDs[ uxLED ] );\r
+                       }\r
+               }\r
+               taskEXIT_CRITICAL();\r
+       }\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+void vParTestToggleLED( unsigned portBASE_TYPE uxLED )\r
+{\r
+       if( uxLED < partstMAX_LEDS )\r
+       {\r
+               /* A critical section is used as the LEDs are also accessed from an\r
+               interrupt. */\r
+               taskENTER_CRITICAL();\r
+               {\r
+                       GPIOA_PTOR |= GPIO_PDOR_PDO( ulLEDs[ uxLED ] );         \r
+               }\r
+               taskEXIT_CRITICAL();\r
+       }\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+void vParTestSetLEDFromISR( unsigned portBASE_TYPE uxLED, signed portBASE_TYPE xValue )\r
+{\r
+unsigned portBASE_TYPE uxInterruptFlags;\r
+\r
+       if( uxLED < partstMAX_LEDS )\r
+       {\r
+               uxInterruptFlags = portSET_INTERRUPT_MASK_FROM_ISR();\r
+               {\r
+                       if( xValue == pdTRUE )\r
+                       {\r
+                               GPIOA_PDOR &= ~GPIO_PDOR_PDO( ulLEDs[ uxLED ] );\r
+                       }\r
+                       else\r
+                       {\r
+                               GPIOA_PDOR |= GPIO_PDOR_PDO( ulLEDs[ uxLED ] );\r
+                       }\r
+               }\r
+               portCLEAR_INTERRUPT_MASK_FROM_ISR( uxInterruptFlags );\r
+       }\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
index ac617a5e146dc7472efcccd378f617955eca1fd6..377fbfad8a7d1d3cb31ee8a51682027fabf72ea9 100644 (file)
@@ -3,7 +3,7 @@
 <project>\r
   <fileVersion>2</fileVersion>\r
   <configuration>\r
-    <name>RTOSDemo</name>\r
+    <name>Full</name>\r
     <toolchain>\r
       <name>ARM</name>\r
     </toolchain>\r
       </plugin>\r
     </debuggerPlugins>\r
   </configuration>\r
+  <configuration>\r
+    <name>Blinky</name>\r
+    <toolchain>\r
+      <name>ARM</name>\r
+    </toolchain>\r
+    <debug>1</debug>\r
+    <settings>\r
+      <name>C-SPY</name>\r
+      <archiveVersion>2</archiveVersion>\r
+      <data>\r
+        <version>22</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>CInput</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CEndian</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CProcessor</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>OCVariant</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>MacOverride</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>MacFile</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>MemOverride</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>MemFile</name>\r
+          <state>$TOOLKIT_DIR$\CONFIG\debugger\Freescale\iok60xxxx.ddf</state>\r
+        </option>\r
+        <option>\r
+          <name>RunToEnable</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>RunToName</name>\r
+          <state>main</state>\r
+        </option>\r
+        <option>\r
+          <name>CExtraOptionsCheck</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CExtraOptions</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>CFpuProcessor</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>OCDDFArgumentProducer</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>OCDownloadSuppressDownload</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OCDownloadVerifyAll</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>OCProductVersion</name>\r
+          <state>5.50.0.51907</state>\r
+        </option>\r
+        <option>\r
+          <name>OCDynDriverList</name>\r
+          <state>JLINK_ID</state>\r
+        </option>\r
+        <option>\r
+          <name>OCLastSavedByProductVersion</name>\r
+          <state>6.21.1.52845</state>\r
+        </option>\r
+        <option>\r
+          <name>OCDownloadAttachToProgram</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>UseFlashLoader</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CLowLevel</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>OCBE8Slave</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>MacFile2</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>CDevice</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>FlashLoadersV3</name>\r
+          <state>$TOOLKIT_DIR$\config\flashloader\Freescale\FlashK60Xxxx.board</state>\r
+        </option>\r
+        <option>\r
+          <name>OCImagesSuppressCheck1</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OCImagesPath1</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>OCImagesSuppressCheck2</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OCImagesPath2</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>OCImagesSuppressCheck3</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OCImagesPath3</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>OverrideDefFlashBoard</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OCImagesOffset1</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>OCImagesOffset2</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>OCImagesOffset3</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>OCImagesUse1</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OCImagesUse2</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OCImagesUse3</name>\r
+          <state>0</state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>ARMSIM_ID</name>\r
+      <archiveVersion>2</archiveVersion>\r
+      <data>\r
+        <version>1</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>OCSimDriverInfo</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>OCSimEnablePSP</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OCSimPspOverrideConfig</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OCSimPspConfigFile</name>\r
+          <state></state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>ANGEL_ID</name>\r
+      <archiveVersion>2</archiveVersion>\r
+      <data>\r
+        <version>0</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>CCAngelHeartbeat</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CAngelCommunication</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CAngelCommBaud</name>\r
+          <version>0</version>\r
+          <state>3</state>\r
+        </option>\r
+        <option>\r
+          <name>CAngelCommPort</name>\r
+          <version>0</version>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>ANGELTCPIP</name>\r
+          <state>aaa.bbb.ccc.ddd</state>\r
+        </option>\r
+        <option>\r
+          <name>DoAngelLogfile</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>AngelLogFile</name>\r
+          <state>$PROJ_DIR$\cspycomm.log</state>\r
+        </option>\r
+        <option>\r
+          <name>OCDriverInfo</name>\r
+          <state>1</state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>GDBSERVER_ID</name>\r
+      <archiveVersion>2</archiveVersion>\r
+      <data>\r
+        <version>0</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>OCDriverInfo</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>TCPIP</name>\r
+          <state>aaa.bbb.ccc.ddd</state>\r
+        </option>\r
+        <option>\r
+          <name>DoLogfile</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>LogFile</name>\r
+          <state>$PROJ_DIR$\cspycomm.log</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJTagBreakpointRadio</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJTagDoUpdateBreakpoints</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJTagUpdateBreakpoints</name>\r
+          <state>_call_main</state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>IARROM_ID</name>\r
+      <archiveVersion>2</archiveVersion>\r
+      <data>\r
+        <version>1</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>CRomLogFileCheck</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CRomLogFileEditB</name>\r
+          <state>$PROJ_DIR$\cspycomm.log</state>\r
+        </option>\r
+        <option>\r
+          <name>CRomCommPort</name>\r
+          <version>0</version>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CRomCommBaud</name>\r
+          <version>0</version>\r
+          <state>7</state>\r
+        </option>\r
+        <option>\r
+          <name>OCDriverInfo</name>\r
+          <state>1</state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>JLINK_ID</name>\r
+      <archiveVersion>2</archiveVersion>\r
+      <data>\r
+        <version>13</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>JLinkSpeed</name>\r
+          <state>32</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJLinkDoLogfile</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJLinkLogFile</name>\r
+          <state>$PROJ_DIR$\cspycomm.log</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJLinkHWResetDelay</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OCDriverInfo</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>JLinkInitialSpeed</name>\r
+          <state>32</state>\r
+        </option>\r
+        <option>\r
+          <name>CCDoJlinkMultiTarget</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCScanChainNonARMDevices</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJLinkMultiTarget</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJLinkIRLength</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJLinkCommRadio</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJLinkTCPIP</name>\r
+          <state>aaa.bbb.ccc.ddd</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJLinkSpeedRadioV2</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCUSBDevice</name>\r
+          <version>1</version>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CCRDICatchReset</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCRDICatchUndef</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCRDICatchSWI</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCRDICatchData</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCRDICatchPrefetch</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCRDICatchIRQ</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCRDICatchFIQ</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJLinkBreakpointRadio</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJLinkDoUpdateBreakpoints</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJLinkUpdateBreakpoints</name>\r
+          <state>_call_main</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJLinkInterfaceRadio</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>OCJLinkAttachSlave</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJLinkResetList</name>\r
+          <version>5</version>\r
+          <state>7</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJLinkInterfaceCmdLine</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCCatchCORERESET</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCCatchMMERR</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCCatchNOCPERR</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCCatchCHRERR</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCCatchSTATERR</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCCatchBUSERR</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCCatchINTERR</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCCatchHARDERR</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCCatchDummy</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OCJLinkScriptFile</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJLinkUsbSerialNo</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>CCTcpIpAlt</name>\r
+          <version>0</version>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJLinkTcpIpSerialNo</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>CCCpuClockEdit</name>\r
+          <state>72.0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCSwoClockAuto</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCSwoClockEdit</name>\r
+          <state>2000</state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>LMIFTDI_ID</name>\r
+      <archiveVersion>2</archiveVersion>\r
+      <data>\r
+        <version>2</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>OCDriverInfo</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>LmiftdiSpeed</name>\r
+          <state>500</state>\r
+        </option>\r
+        <option>\r
+          <name>CCLmiftdiDoLogfile</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCLmiftdiLogFile</name>\r
+          <state>$PROJ_DIR$\cspycomm.log</state>\r
+        </option>\r
+        <option>\r
+          <name>CCLmiFtdiInterfaceRadio</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCLmiFtdiInterfaceCmdLine</name>\r
+          <state>0</state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>MACRAIGOR_ID</name>\r
+      <archiveVersion>2</archiveVersion>\r
+      <data>\r
+        <version>3</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>jtag</name>\r
+          <version>0</version>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>EmuSpeed</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>TCPIP</name>\r
+          <state>aaa.bbb.ccc.ddd</state>\r
+        </option>\r
+        <option>\r
+          <name>DoLogfile</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>LogFile</name>\r
+          <state>$PROJ_DIR$\cspycomm.log</state>\r
+        </option>\r
+        <option>\r
+          <name>DoEmuMultiTarget</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>EmuMultiTarget</name>\r
+          <state>0@ARM7TDMI</state>\r
+        </option>\r
+        <option>\r
+          <name>EmuHWReset</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CEmuCommBaud</name>\r
+          <version>0</version>\r
+          <state>4</state>\r
+        </option>\r
+        <option>\r
+          <name>CEmuCommPort</name>\r
+          <version>0</version>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>jtago</name>\r
+          <version>0</version>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OCDriverInfo</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>UnusedAddr</name>\r
+          <state>0x00800000</state>\r
+        </option>\r
+        <option>\r
+          <name>CCMacraigorHWResetDelay</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>CCJTagBreakpointRadio</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJTagDoUpdateBreakpoints</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJTagUpdateBreakpoints</name>\r
+          <state>_call_main</state>\r
+        </option>\r
+        <option>\r
+          <name>CCMacraigorInterfaceRadio</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCMacraigorInterfaceCmdLine</name>\r
+          <state>0</state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>PEMICRO_ID</name>\r
+      <archiveVersion>2</archiveVersion>\r
+      <data>\r
+        <version>0</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>OCDriverInfo</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>OCPEMicroAttachSlave</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CCPEMicroInterfaceList</name>\r
+          <version>0</version>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCPEMicroResetDelay</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>CCPEMicroJtagSpeed</name>\r
+          <state>1000</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJPEMicroShowSettings</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>DoLogfile</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>LogFile</name>\r
+          <state>$PROJ_DIR$\cspycomm.log</state>\r
+        </option>\r
+        <option>\r
+          <name>CCPEMicroUSBDevice</name>\r
+          <version>0</version>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCPEMicroSerialPort</name>\r
+          <version>0</version>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJPEMicroTCPIPAutoScanNetwork</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CCPEMicroTCPIP</name>\r
+          <state>10.0.0.1</state>\r
+        </option>\r
+        <option>\r
+          <name>CCPEMicroCommCmdLineProducer</name>\r
+          <state>0</state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>RDI_ID</name>\r
+      <archiveVersion>2</archiveVersion>\r
+      <data>\r
+        <version>2</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>CRDIDriverDll</name>\r
+          <state>###Uninitialized###</state>\r
+        </option>\r
+        <option>\r
+          <name>CRDILogFileCheck</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CRDILogFileEdit</name>\r
+          <state>$PROJ_DIR$\cspycomm.log</state>\r
+        </option>\r
+        <option>\r
+          <name>CCRDIHWReset</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCRDICatchReset</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCRDICatchUndef</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCRDICatchSWI</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCRDICatchData</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCRDICatchPrefetch</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCRDICatchIRQ</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCRDICatchFIQ</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OCDriverInfo</name>\r
+          <state>1</state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>STLINK_ID</name>\r
+      <archiveVersion>2</archiveVersion>\r
+      <data>\r
+        <version>2</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>OCDriverInfo</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CCSTLinkInterfaceRadio</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCSTLinkInterfaceCmdLine</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCSTLinkResetList</name>\r
+          <version>1</version>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCCpuClockEdit</name>\r
+          <state>72.0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCSwoClockAuto</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCSwoClockEdit</name>\r
+          <state>2000</state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>THIRDPARTY_ID</name>\r
+      <archiveVersion>2</archiveVersion>\r
+      <data>\r
+        <version>0</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>CThirdPartyDriverDll</name>\r
+          <state>###Uninitialized###</state>\r
+        </option>\r
+        <option>\r
+          <name>CThirdPartyLogFileCheck</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CThirdPartyLogFileEditB</name>\r
+          <state>$PROJ_DIR$\cspycomm.log</state>\r
+        </option>\r
+        <option>\r
+          <name>OCDriverInfo</name>\r
+          <state>1</state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>XDS100_ID</name>\r
+      <archiveVersion>2</archiveVersion>\r
+      <data>\r
+        <version>0</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>OCDriverInfo</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>OCXDS100AttachSlave</name>\r
+          <state>1</state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <debuggerPlugins>\r
+      <plugin>\r
+        <file>$TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin</file>\r
+        <loadFlag>0</loadFlag>\r
+      </plugin>\r
+      <plugin>\r
+        <file>$TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin</file>\r
+        <loadFlag>0</loadFlag>\r
+      </plugin>\r
+      <plugin>\r
+        <file>$TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin</file>\r
+        <loadFlag>0</loadFlag>\r
+      </plugin>\r
+      <plugin>\r
+        <file>$TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin</file>\r
+        <loadFlag>0</loadFlag>\r
+      </plugin>\r
+      <plugin>\r
+        <file>$TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin</file>\r
+        <loadFlag>0</loadFlag>\r
+      </plugin>\r
+      <plugin>\r
+        <file>$TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin</file>\r
+        <loadFlag>0</loadFlag>\r
+      </plugin>\r
+      <plugin>\r
+        <file>$TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB6_Plugin.ewplugin</file>\r
+        <loadFlag>0</loadFlag>\r
+      </plugin>\r
+      <plugin>\r
+        <file>$TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin</file>\r
+        <loadFlag>0</loadFlag>\r
+      </plugin>\r
+      <plugin>\r
+        <file>$TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin</file>\r
+        <loadFlag>0</loadFlag>\r
+      </plugin>\r
+      <plugin>\r
+        <file>$TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin</file>\r
+        <loadFlag>0</loadFlag>\r
+      </plugin>\r
+      <plugin>\r
+        <file>$TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin</file>\r
+        <loadFlag>0</loadFlag>\r
+      </plugin>\r
+      <plugin>\r
+        <file>$EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin</file>\r
+        <loadFlag>1</loadFlag>\r
+      </plugin>\r
+      <plugin>\r
+        <file>$EW_DIR$\common\plugins\FreeRTOS\FreeRTOSPlugin.ewplugin</file>\r
+        <loadFlag>0</loadFlag>\r
+      </plugin>\r
+      <plugin>\r
+        <file>$EW_DIR$\common\plugins\OpenRTOS\OpenRTOSPlugin.ewplugin</file>\r
+        <loadFlag>0</loadFlag>\r
+      </plugin>\r
+      <plugin>\r
+        <file>$EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin</file>\r
+        <loadFlag>0</loadFlag>\r
+      </plugin>\r
+      <plugin>\r
+        <file>$EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin</file>\r
+        <loadFlag>1</loadFlag>\r
+      </plugin>\r
+      <plugin>\r
+        <file>$EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin</file>\r
+        <loadFlag>1</loadFlag>\r
+      </plugin>\r
+    </debuggerPlugins>\r
+  </configuration>\r
 </project>\r
 \r
 \r
index 4495524d40ae217bf1fac5ac0d1ecdd462dda791..6ed187b1d388364608c339f214725a4e6fbe6a10 100644 (file)
@@ -3,7 +3,7 @@
 <project>\r
   <fileVersion>2</fileVersion>\r
   <configuration>\r
-    <name>RTOSDemo</name>\r
+    <name>Full</name>\r
     <toolchain>\r
       <name>ARM</name>\r
     </toolchain>\r
         <debug>1</debug>\r
         <option>\r
           <name>ExePath</name>\r
-          <state>RTOSDemo\Exe</state>\r
+          <state>Full\Exe</state>\r
         </option>\r
         <option>\r
           <name>ObjPath</name>\r
-          <state>RTOSDemo\Obj</state>\r
+          <state>Full\Obj</state>\r
         </option>\r
         <option>\r
           <name>ListPath</name>\r
-          <state>RTOSDemo\List</state>\r
+          <state>Full\List</state>\r
         </option>\r
         <option>\r
           <name>Variant</name>\r
         <option>\r
           <name>Input variant</name>\r
           <version>3</version>\r
+          <state>7</state>\r
+        </option>\r
+        <option>\r
+          <name>Input description</name>\r
+          <state>No specifier n, no float nor long long, no scan set, no assignment suppressing, without multibyte support.</state>\r
+        </option>\r
+        <option>\r
+          <name>Output variant</name>\r
+          <version>2</version>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>Output description</name>\r
+          <state>Automatic choice of formatter.</state>\r
+        </option>\r
+        <option>\r
+          <name>GOutputBinary</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>FPU</name>\r
+          <version>2</version>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OGCoreOrChip</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>GRuntimeLibSelect</name>\r
+          <version>0</version>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>GRuntimeLibSelectSlave</name>\r
+          <version>0</version>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>RTDescription</name>\r
+          <state>Use the normal configuration of the C/C++ runtime library. No locale interface, C locale, no file descriptor support, no multibytes in printf and scanf, and no hex floats in strtod.</state>\r
+        </option>\r
+        <option>\r
+          <name>OGProductVersion</name>\r
+          <state>5.41.0.51757</state>\r
+        </option>\r
+        <option>\r
+          <name>OGLastSavedByProductVersion</name>\r
+          <state>6.21.1.52845</state>\r
+        </option>\r
+        <option>\r
+          <name>GeneralEnableMisra</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>GeneralMisraVerbose</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OGChipSelectEditMenu</name>\r
+          <state>K60Xxxx       Freescale K60Xxxx</state>\r
+        </option>\r
+        <option>\r
+          <name>GenLowLevelInterface</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>GEndianModeBE</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>OGBufferedTerminalOutput</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>GenStdoutInterface</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>GeneralMisraRules98</name>\r
+          <version>0</version>\r
+          <state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>\r
+        </option>\r
+        <option>\r
+          <name>GeneralMisraVer</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>GeneralMisraRules04</name>\r
+          <version>0</version>\r
+          <state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>\r
+        </option>\r
+        <option>\r
+          <name>RTConfigPath2</name>\r
+          <state>$TOOLKIT_DIR$\INC\c\DLib_Config_Normal.h</state>\r
+        </option>\r
+        <option>\r
+          <name>GFPUCoreSlave</name>\r
+          <version>19</version>\r
+          <state>38</state>\r
+        </option>\r
+        <option>\r
+          <name>GBECoreSlave</name>\r
+          <version>19</version>\r
+          <state>38</state>\r
+        </option>\r
+        <option>\r
+          <name>OGUseCmsis</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OGUseCmsisDspLib</name>\r
+          <state>0</state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>ICCARM</name>\r
+      <archiveVersion>2</archiveVersion>\r
+      <data>\r
+        <version>28</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>CCDefines</name>\r
+          <state>IAR</state>\r
+          <state>TWR_K60N512</state>\r
+        </option>\r
+        <option>\r
+          <name>CCPreprocFile</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCPreprocComments</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCPreprocLine</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCListCFile</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCListCMnemonics</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCListCMessages</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCListAssFile</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCListAssSource</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCEnableRemarks</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCDiagSuppress</name>\r
+          <state>Pa082</state>\r
+        </option>\r
+        <option>\r
+          <name>CCDiagRemark</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>CCDiagWarning</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>CCDiagError</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>CCObjPrefix</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CCAllowList</name>\r
+          <version>1</version>\r
+          <state>0000000</state>\r
+        </option>\r
+        <option>\r
+          <name>CCDebugInfo</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IEndianMode</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IProcessor</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IExtraOptionsCheck</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IExtraOptions</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>CCLangConformance</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCSignedPlainChar</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CCRequirePrototypes</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCMultibyteSupport</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCDiagWarnAreErr</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCCompilerRuntimeInfo</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IFpuProcessor</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>OutputFile</name>\r
+          <state>$FILE_BNAME$.o</state>\r
+        </option>\r
+        <option>\r
+          <name>CCLibConfigHeader</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>PreInclude</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>CompilerMisraOverride</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCIncludePath2</name>\r
+          <state>$PROJ_DIR$</state>\r
+          <state>$PROJ_DIR$\..\..\Source\include</state>\r
+          <state>$PROJ_DIR$\..\..\Source\portable\IAR\ARM_CM3</state>\r
+          <state>$PROJ_DIR$\..\Common\include</state>\r
+          <state>$PROJ_DIR$\Freescale_Code\common</state>\r
+          <state>$PROJ_DIR$\Freescale_Code\cpu</state>\r
+          <state>$PROJ_DIR$\Freescale_Code\drivers\uart</state>\r
+          <state>$PROJ_DIR$\Freescale_Code\drivers\mcg</state>\r
+          <state>$PROJ_DIR$\Freescale_Code\drivers\wdog</state>\r
+          <state>$PROJ_DIR$\Freescale_Code\drivers\adc16</state>\r
+        </option>\r
+        <option>\r
+          <name>CCStdIncCheck</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCCodeSection</name>\r
+          <state>.text</state>\r
+        </option>\r
+        <option>\r
+          <name>IInterwork2</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IProcessorMode2</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CCOptLevel</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CCOptStrategy</name>\r
+          <version>0</version>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCOptLevelSlave</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CompilerMisraRules98</name>\r
+          <version>0</version>\r
+          <state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>\r
+        </option>\r
+        <option>\r
+          <name>CompilerMisraRules04</name>\r
+          <version>0</version>\r
+          <state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>\r
+        </option>\r
+        <option>\r
+          <name>CCPosIndRopi</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCPosIndRwpi</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCPosIndNoDynInit</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IccLang</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IccCDialect</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IccAllowVLA</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IccCppDialect</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IccExceptions</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IccRTTI</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IccStaticDestr</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IccCppInlineSemantics</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IccCmsis</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IccFloatSemantics</name>\r
+          <state>0</state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>AARM</name>\r
+      <archiveVersion>2</archiveVersion>\r
+      <data>\r
+        <version>8</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>AObjPrefix</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>AEndian</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>ACaseSensitivity</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>MacroChars</name>\r
+          <version>0</version>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>AWarnEnable</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>AWarnWhat</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>AWarnOne</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>AWarnRange1</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>AWarnRange2</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>ADebug</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>AltRegisterNames</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>ADefines</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>AList</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>AListHeader</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>AListing</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>Includes</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>MacDefs</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>MacExps</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>MacExec</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OnlyAssed</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>MultiLine</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>PageLengthCheck</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>PageLength</name>\r
+          <state>80</state>\r
+        </option>\r
+        <option>\r
+          <name>TabSpacing</name>\r
+          <state>8</state>\r
+        </option>\r
+        <option>\r
+          <name>AXRef</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>AXRefDefines</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>AXRefInternal</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>AXRefDual</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>AProcessor</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>AFpuProcessor</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>AOutputFile</name>\r
+          <state>$FILE_BNAME$.o</state>\r
+        </option>\r
+        <option>\r
+          <name>AMultibyteSupport</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>ALimitErrorsCheck</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>ALimitErrorsEdit</name>\r
+          <state>100</state>\r
+        </option>\r
+        <option>\r
+          <name>AIgnoreStdInclude</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>AUserIncludes</name>\r
+          <state>$PROJ_DIR$</state>\r
+        </option>\r
+        <option>\r
+          <name>AExtraOptionsCheckV2</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>AExtraOptionsV2</name>\r
+          <state></state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>OBJCOPY</name>\r
+      <archiveVersion>0</archiveVersion>\r
+      <data>\r
+        <version>1</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>OOCOutputFormat</name>\r
+          <version>2</version>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OCOutputOverride</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OOCOutputFile</name>\r
+          <state>RTOSDemo.srec</state>\r
+        </option>\r
+        <option>\r
+          <name>OOCCommandLineProducer</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>OOCObjCopyEnable</name>\r
+          <state>1</state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>CUSTOM</name>\r
+      <archiveVersion>3</archiveVersion>\r
+      <data>\r
+        <extensions></extensions>\r
+        <cmdline></cmdline>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>BICOMP</name>\r
+      <archiveVersion>0</archiveVersion>\r
+      <data/>\r
+    </settings>\r
+    <settings>\r
+      <name>BUILDACTION</name>\r
+      <archiveVersion>1</archiveVersion>\r
+      <data>\r
+        <prebuild></prebuild>\r
+        <postbuild></postbuild>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>ILINK</name>\r
+      <archiveVersion>0</archiveVersion>\r
+      <data>\r
+        <version>13</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>IlinkLibIOConfig</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>XLinkMisraHandler</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkInputFileSlave</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkOutputFile</name>\r
+          <state>$PROJ_FNAME$.out</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkDebugInfoEnable</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkKeepSymbols</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkRawBinaryFile</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkRawBinarySymbol</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkRawBinarySegment</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkRawBinaryAlign</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkDefines</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkConfigDefines</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkMapFile</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkLogFile</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkLogInitialization</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkLogModule</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkLogSection</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkLogVeneer</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkIcfOverride</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkIcfFile</name>\r
+          <state>$PROJ_DIR$\Freescale_Code\common\512KB_Pflash.icf</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkIcfFileSlave</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkEnableRemarks</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkSuppressDiags</name>\r
+          <state>Lp012</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkTreatAsRem</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkTreatAsWarn</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkTreatAsErr</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkWarningsAreErrors</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkUseExtraOptions</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkExtraOptions</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkLowLevelInterfaceSlave</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkAutoLibEnable</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkAdditionalLibs</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkOverrideProgramEntryLabel</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkProgramEntryLabelSelect</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkProgramEntryLabel</name>\r
+          <state>__iar_program_start</state>\r
+        </option>\r
+        <option>\r
+          <name>DoFill</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>FillerByte</name>\r
+          <state>0xFF</state>\r
+        </option>\r
+        <option>\r
+          <name>FillerStart</name>\r
+          <state>0x0</state>\r
+        </option>\r
+        <option>\r
+          <name>FillerEnd</name>\r
+          <state>0x0</state>\r
+        </option>\r
+        <option>\r
+          <name>CrcSize</name>\r
+          <version>0</version>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CrcAlign</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CrcAlgo</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CrcPoly</name>\r
+          <state>0x11021</state>\r
+        </option>\r
+        <option>\r
+          <name>CrcCompl</name>\r
+          <version>0</version>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CrcBitOrder</name>\r
+          <version>0</version>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CrcInitialValue</name>\r
+          <state>0x0</state>\r
+        </option>\r
+        <option>\r
+          <name>DoCrc</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkBE8Slave</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkBufferedTerminalOutput</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkStdoutInterfaceSlave</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CrcFullSize</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkIElfToolPostProcess</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkLogAutoLibSelect</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkLogRedirSymbols</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkLogUnusedFragments</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkCrcReverseByteOrder</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkCrcUseAsInput</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkOptInline</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkOptExceptionsAllow</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkOptExceptionsForce</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkCmsis</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkOptMergeDuplSections</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkOptUseVfe</name>\r
           <state>1</state>\r
         </option>\r
+        <option>\r
+          <name>IlinkOptForceVfe</name>\r
+          <state>0</state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>IARCHIVE</name>\r
+      <archiveVersion>0</archiveVersion>\r
+      <data>\r
+        <version>0</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>IarchiveInputs</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>IarchiveOverride</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IarchiveOutput</name>\r
+          <state>###Unitialized###</state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>BILINK</name>\r
+      <archiveVersion>0</archiveVersion>\r
+      <data/>\r
+    </settings>\r
+  </configuration>\r
+  <configuration>\r
+    <name>Blinky</name>\r
+    <toolchain>\r
+      <name>ARM</name>\r
+    </toolchain>\r
+    <debug>1</debug>\r
+    <settings>\r
+      <name>General</name>\r
+      <archiveVersion>3</archiveVersion>\r
+      <data>\r
+        <version>21</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>ExePath</name>\r
+          <state>Blinky\Exe</state>\r
+        </option>\r
+        <option>\r
+          <name>ObjPath</name>\r
+          <state>Blinky\Obj</state>\r
+        </option>\r
+        <option>\r
+          <name>ListPath</name>\r
+          <state>Blinky\List</state>\r
+        </option>\r
+        <option>\r
+          <name>Variant</name>\r
+          <version>19</version>\r
+          <state>38</state>\r
+        </option>\r
+        <option>\r
+          <name>GEndianMode</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>Input variant</name>\r
+          <version>3</version>\r
+          <state>7</state>\r
+        </option>\r
         <option>\r
           <name>Input description</name>\r
-          <state>Full formatting.</state>\r
+          <state>No specifier n, no float nor long long, no scan set, no assignment suppressing, without multibyte support.</state>\r
         </option>\r
         <option>\r
           <name>Output variant</name>\r
           <version>2</version>\r
-          <state>1</state>\r
+          <state>0</state>\r
         </option>\r
         <option>\r
           <name>Output description</name>\r
-          <state>Full formatting.</state>\r
+          <state>Automatic choice of formatter.</state>\r
         </option>\r
         <option>\r
           <name>GOutputBinary</name>\r
         </option>\r
         <option>\r
           <name>OGBufferedTerminalOutput</name>\r
-          <state>0</state>\r
+          <state>1</state>\r
         </option>\r
         <option>\r
           <name>GenStdoutInterface</name>\r
       <data/>\r
     </settings>\r
   </configuration>\r
+  <group>\r
+    <name>Common_Demo_Files</name>\r
+    <excluded>\r
+      <configuration>Blinky</configuration>\r
+    </excluded>\r
+    <file>\r
+      <name>$PROJ_DIR$\..\Common\Minimal\BlockQ.c</name>\r
+    </file>\r
+    <file>\r
+      <name>$PROJ_DIR$\..\Common\Minimal\blocktim.c</name>\r
+    </file>\r
+    <file>\r
+      <name>$PROJ_DIR$\..\Common\Minimal\comtest.c</name>\r
+      <excluded>\r
+        <configuration>Full</configuration>\r
+      </excluded>\r
+    </file>\r
+    <file>\r
+      <name>$PROJ_DIR$\..\Common\Minimal\countsem.c</name>\r
+    </file>\r
+    <file>\r
+      <name>$PROJ_DIR$\..\Common\Minimal\death.c</name>\r
+    </file>\r
+    <file>\r
+      <name>$PROJ_DIR$\..\Common\Minimal\dynamic.c</name>\r
+    </file>\r
+    <file>\r
+      <name>$PROJ_DIR$\..\Common\Minimal\GenQTest.c</name>\r
+    </file>\r
+    <file>\r
+      <name>$PROJ_DIR$\..\Common\Minimal\PollQ.c</name>\r
+    </file>\r
+    <file>\r
+      <name>$PROJ_DIR$\..\Common\Minimal\QPeek.c</name>\r
+    </file>\r
+    <file>\r
+      <name>$PROJ_DIR$\..\Common\Minimal\recmutex.c</name>\r
+    </file>\r
+    <file>\r
+      <name>$PROJ_DIR$\..\Common\Minimal\semtest.c</name>\r
+    </file>\r
+    <file>\r
+      <name>$PROJ_DIR$\..\Common\Minimal\TimerDemo.c</name>\r
+    </file>\r
+  </group>\r
   <group>\r
     <name>FreeRTOS_Source</name>\r
     <group>\r
       </group>\r
     </group>\r
   </group>\r
+  <file>\r
+    <name>$PROJ_DIR$\FreeRTOSConfig.h</name>\r
+  </file>\r
+  <file>\r
+    <name>$PROJ_DIR$\main-full.c</name>\r
+    <excluded>\r
+      <configuration>Blinky</configuration>\r
+    </excluded>\r
+  </file>\r
   <file>\r
     <name>$PROJ_DIR$\main_blinky.c</name>\r
+    <excluded>\r
+      <configuration>Full</configuration>\r
+    </excluded>\r
+  </file>\r
+  <file>\r
+    <name>$PROJ_DIR$\ParTest.c</name>\r
+    <excluded>\r
+      <configuration>Blinky</configuration>\r
+    </excluded>\r
   </file>\r
 </project>\r
 \r
diff --git a/Demo/CORTEX_Kinetis_K60_Tower_IAR/main-full.c b/Demo/CORTEX_Kinetis_K60_Tower_IAR/main-full.c
new file mode 100644 (file)
index 0000000..eea1b4c
--- /dev/null
@@ -0,0 +1,584 @@
+/*\r
+    FreeRTOS V7.0.1 - Copyright (C) 2011 Real Time Engineers Ltd.\r
+\r
+\r
+       FreeRTOS supports many tools and architectures. V7.0.0 is sponsored by:\r
+       Atollic AB - Atollic provides professional embedded systems development\r
+       tools for C/C++ development, code analysis and test automation.\r
+       See http://www.atollic.com\r
+\r
+\r
+    ***************************************************************************\r
+     *                                                                       *\r
+     *    FreeRTOS tutorial books are available in pdf and paperback.        *\r
+     *    Complete, revised, and edited pdf reference manuals are also       *\r
+     *    available.                                                         *\r
+     *                                                                       *\r
+     *    Purchasing FreeRTOS documentation will not only help you, by       *\r
+     *    ensuring you get running as quickly as possible and with an        *\r
+     *    in-depth knowledge of how to use FreeRTOS, it will also help       *\r
+     *    the FreeRTOS project to continue with its mission of providing     *\r
+     *    professional grade, cross platform, de facto standard solutions    *\r
+     *    for microcontrollers - completely free of charge!                  *\r
+     *                                                                       *\r
+     *    >>> See http://www.FreeRTOS.org/Documentation for details. <<<     *\r
+     *                                                                       *\r
+     *    Thank you for using FreeRTOS, and thank you for your support!      *\r
+     *                                                                       *\r
+    ***************************************************************************\r
+\r
+\r
+    This file is part of the FreeRTOS distribution.\r
+\r
+    FreeRTOS is free software; you can redistribute it and/or modify it under\r
+    the terms of the GNU General Public License (version 2) as published by the\r
+    Free Software Foundation AND MODIFIED BY the FreeRTOS exception.\r
+    >>>NOTE<<< The modification to the GPL is included to allow you to\r
+    distribute a combined work that includes FreeRTOS without being obliged to\r
+    provide the source code for proprietary components outside of the FreeRTOS\r
+    kernel.  FreeRTOS is distributed in the hope that it will be useful, but\r
+    WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\r
+    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for\r
+    more details. You should have received a copy of the GNU General Public\r
+    License and the FreeRTOS license exception along with FreeRTOS; if not it\r
+    can be viewed here: http://www.freertos.org/a00114.html and also obtained\r
+    by writing to Richard Barry, contact details for whom are available on the\r
+    FreeRTOS WEB site.\r
+\r
+    1 tab == 4 spaces!\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
+/*\r
+ * main-blinky.c is included when the "Blinky" build configuration is used.\r
+ * main-full.c is included when the "Full" build configuration is used.\r
+ *\r
+ * main-full.c (this file) defines a comprehensive demo that creates many\r
+ * tasks, queues, semaphores and timers.  It also demonstrates how Cortex-M3\r
+ * interrupts can interact with FreeRTOS tasks/timers.\r
+ *\r
+ * This project runs on the SK-FM3-100PMC evaluation board, which is populated\r
+ * with an MB9BF5006N Cortex-M3 based microcontroller.\r
+ *\r
+ * The main() Function:\r
+ * main() creates three demo specific software timers, one demo specific queue,\r
+ * and two demo specific tasks.  It then creates a whole host of 'standard\r
+ * demo' tasks/queues/semaphores, before starting the scheduler.  The demo\r
+ * specific tasks and timers are described in the comments here.  The standard\r
+ * demo tasks are described on the FreeRTOS.org web site.\r
+ *\r
+ * The standard demo tasks provide no specific functionality.  They are\r
+ * included to both test the FreeRTOS port, and provide examples of how the\r
+ * various FreeRTOS API functions can be used.\r
+ *\r
+ * This demo creates 43 tasks in total.  If you want a simpler demo, use the\r
+ * Blinky build configuration.\r
+ *\r
+ * The Demo Specific LED Software Timer and the Button Interrupt:\r
+ * The user button SW2 is configured to generate an interrupt each time it is\r
+ * pressed.  The interrupt service routine switches an LED on, and resets the\r
+ * LED software timer.  The LED timer has a 5000 millisecond (5 second) period,\r
+ * and uses a callback function that is defined to just turn the LED off again.\r
+ * Therefore, pressing the user button will turn the LED on, and the LED will\r
+ * remain on until a full five seconds pass without the button being pressed.\r
+ * See the documentation page for this demo on the FreeRTOS.org web site to see\r
+ * which LED is used.\r
+ *\r
+ * The Demo Specific "Check" Callback Function:\r
+ * This is called each time the 'check' timer expires.  The check timer\r
+ * callback function inspects all the standard demo tasks to see if they are\r
+ * all executing as expected.  The check timer is initially configured to\r
+ * expire every three seconds, but will shorted this to every 500ms if an error\r
+ * is ever discovered.  The check timer callback toggles the LED defined by\r
+ * the mainCHECK_LED definition each time it executes.  Therefore, if LED\r
+ * mainCHECK_LED is toggling every three seconds, then no error have been found.\r
+ * If LED mainCHECK_LED is toggling every 500ms, then at least one errors has\r
+ * been found.  The variable pcStatusMessage is set to a string that indicates\r
+ * which task reported an error.  See the documentation page for this demo on\r
+ * the FreeRTOS.org web site to see which LED in the 7 segment display is used.\r
+ *\r
+ * The Demo Specific Idle Hook Function:\r
+ * The idle hook function demonstrates how to query the amount of FreeRTOS heap\r
+ * space that is remaining (see vApplicationIdleHook() defined in this file).\r
+ *\r
+ * The Demo Specific Tick Hook Function:\r
+ * The tick hook function is used to test the interrupt safe software timer\r
+ * functionality.\r
+ */\r
+\r
+/* Kernel includes. */\r
+#include "FreeRTOS.h"\r
+#include "task.h"\r
+#include "queue.h"\r
+#include "timers.h"\r
+\r
+/* Freescale includes. */\r
+#include "common.h"\r
+\r
+/* Common demo includes. */\r
+#include "partest.h"\r
+#include "flash.h"\r
+#include "BlockQ.h"\r
+#include "death.h"\r
+#include "blocktim.h"\r
+#include "semtest.h"\r
+#include "GenQTest.h"\r
+#include "QPeek.h"\r
+#include "recmutex.h"\r
+#include "TimerDemo.h"\r
+#include "comtest2.h"\r
+#include "PollQ.h"\r
+#include "countsem.h"\r
+#include "dynamic.h"\r
+\r
+/* The rate at which data is sent to the queue, specified in milliseconds, and\r
+converted to ticks using the portTICK_RATE_MS constant. */\r
+#define mainQUEUE_SEND_FREQUENCY_MS    ( 200 / portTICK_RATE_MS )\r
+\r
+/* The number of items the queue can hold.  This is 1 as the receive task\r
+will remove items as they are added, meaning the send task should always find\r
+the queue empty. */\r
+#define mainQUEUE_LENGTH                       ( 1 )\r
+\r
+/* The LED toggled by the check timer callback function.  */\r
+#define mainCHECK_LED                          3UL\r
+\r
+/* The LED turned on by the button interrupt, and turned off by the LED timer. */\r
+#define mainTIMER_CONTROLLED_LED       2UL\r
+\r
+/* The LEDs toggled by the two simple flash LED timers. */\r
+#define mainLED0                                       0UL\r
+#define mainLED1                                       1UL\r
+\r
+/* The LED used by the comtest tasks. See the comtest.c file for more\r
+information.  In this case, the LED is deliberatly out of the valid range as\r
+all the available LEDs are already used by other tasks and timers. */\r
+#define mainCOM_TEST_LED                       ( 4 )\r
+\r
+/* Constant used by the standard timer test functions. */\r
+#define mainTIMER_TEST_PERIOD          ( 50 )\r
+\r
+/* Priorities used by the various different standard demo tasks. */\r
+#define mainCHECK_TASK_PRIORITY                ( configMAX_PRIORITIES - 1 )\r
+#define mainQUEUE_POLL_PRIORITY                ( tskIDLE_PRIORITY + 1 )\r
+#define mainSEM_TEST_PRIORITY          ( tskIDLE_PRIORITY + 1 )\r
+#define mainBLOCK_Q_PRIORITY           ( tskIDLE_PRIORITY + 2 )\r
+#define mainCREATOR_TASK_PRIORITY   ( tskIDLE_PRIORITY + 3 )\r
+#define mainINTEGER_TASK_PRIORITY   ( tskIDLE_PRIORITY )\r
+#define mainGEN_QUEUE_TASK_PRIORITY    ( tskIDLE_PRIORITY )\r
+#define mainCOM_TEST_PRIORITY          ( tskIDLE_PRIORITY + 2 )\r
+\r
+/* Priorities defined in this main-full.c file. */\r
+#define mainQUEUE_RECEIVE_TASK_PRIORITY                ( tskIDLE_PRIORITY + 2 )\r
+#define        mainQUEUE_SEND_TASK_PRIORITY            ( tskIDLE_PRIORITY + 1 )\r
+\r
+/* The period at which the check timer will expire, in ms, provided no errors\r
+have been reported by any of the standard demo tasks.  ms are converted to the\r
+equivalent in ticks using the portTICK_RATE_MS constant. */\r
+#define mainCHECK_TIMER_PERIOD_MS                      ( 3000UL / portTICK_RATE_MS )\r
+\r
+/* The period at which the check timer will expire, in ms, if an error has been\r
+reported in one of the standard demo tasks.  ms are converted to the equivalent\r
+in ticks using the portTICK_RATE_MS constant. */\r
+#define mainERROR_CHECK_TIMER_PERIOD_MS        ( 500UL / portTICK_RATE_MS )\r
+\r
+/* The LED will remain on until the button has not been pushed for a full\r
+5000ms. */\r
+#define mainBUTTON_LED_TIMER_PERIOD_MS         ( 5000UL / portTICK_RATE_MS )\r
+\r
+/* The period at which the two simple LED flash timers will execute their\r
+callback functions. */\r
+#define mainLED1_TIMER_PERIOD_MS                       ( 200 / portTICK_RATE_MS )\r
+#define mainLED2_TIMER_PERIOD_MS                       ( 600 / portTICK_RATE_MS )\r
+\r
+/* A block time of zero simply means "don't block". */\r
+#define mainDONT_BLOCK                                         ( 0UL )\r
+\r
+/* Baud rate used by the comtest tasks. */\r
+#define mainCOM_TEST_BAUD_RATE                         ( 115200UL )\r
+\r
+/* The vector used by the GPIO port E.  Button SW2 is configured to generate\r
+an interrput on this port. */\r
+#define mainGPIO_E_VECTOR                                      ( 107 - 16 )\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+/*\r
+ * Setup the NVIC, LED outputs, and button inputs.\r
+ */\r
+static void prvSetupHardware( void );\r
+\r
+/*\r
+ * Creates the timers that are specific to this demo - namely, the check timer\r
+ * the button LED timer, and the two simple LED flash timers.\r
+ */\r
+static void prvCreateDemoSpecificTimers( void );\r
+\r
+/*\r
+ * The LED timer callback function.  This does nothing but switch an LED off.\r
+ */\r
+static void prvButtonLEDTimerCallback( xTimerHandle xTimer );\r
+\r
+/*\r
+ * The callback function used by both simple LED flash timers.  Both timers use\r
+ * the same callback, so the function parameter is used to determine which LED\r
+ * should be flashed (effectively to determine which timer has expired.\r
+ */\r
+static void prvLEDTimerCallback( xTimerHandle xTimer );\r
+\r
+/*\r
+ * The check timer callback function, as described at the top of this file.\r
+ */\r
+static void prvCheckTimerCallback( xTimerHandle xTimer );\r
+\r
+/*\r
+ * This is not a 'standard' partest function, so the prototype is not in\r
+ * partest.h, and is instead included here.\r
+ */\r
+void vParTestSetLEDFromISR( unsigned portBASE_TYPE uxLED, signed portBASE_TYPE xValue );\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+/* The queue used by both application specific demo tasks defined in this file. */\r
+static xQueueHandle xQueue = NULL;\r
+\r
+/* The LED software timer.  This uses prvButtonLEDTimerCallback() as it's callback\r
+function. */\r
+static xTimerHandle xLEDTimer = NULL;\r
+\r
+/* The check timer.  This uses prvCheckTimerCallback() as its callback\r
+function. */\r
+static xTimerHandle xCheckTimer = NULL;\r
+\r
+/* LED timers - these simply flash LEDs, each using a different frequency. */\r
+static xTimerHandle xLED1Timer = NULL, xLED2Timer = NULL;\r
+\r
+/* If an error is detected in a standard demo task, then pcStatusMessage will\r
+be set to point to a string that identifies the offending task.  This is just\r
+to make debugging easier. */\r
+static const char *pcStatusMessage = NULL;\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+void main( void )\r
+{\r
+       /* Configure the NVIC, LED outputs and button inputs. */\r
+       prvSetupHardware();\r
+\r
+       /* Create the queue. */\r
+       xQueue = xQueueCreate( mainQUEUE_LENGTH, sizeof( unsigned long ) );\r
+\r
+       if( xQueue != NULL )\r
+       {\r
+               /* Create the timers that are specific to this demo - other timers are\r
+               created as part of the standard demo within vStartTimerDemoTask. */\r
+               prvCreateDemoSpecificTimers();\r
+\r
+               /* Create a lot of 'standard demo' tasks.  Over 40 tasks are created in\r
+               this demo.  For a much simpler demo, select the 'blinky' build\r
+               configuration. */\r
+               vStartBlockingQueueTasks( mainBLOCK_Q_PRIORITY );\r
+               vCreateBlockTimeTasks();\r
+               vStartSemaphoreTasks( mainSEM_TEST_PRIORITY );\r
+               vStartGenericQueueTasks( mainGEN_QUEUE_TASK_PRIORITY );\r
+               vStartQueuePeekTasks();\r
+               vStartRecursiveMutexTasks();\r
+               vStartTimerDemoTask( mainTIMER_TEST_PERIOD );\r
+//_RB_         vAltStartComTestTasks( mainCOM_TEST_PRIORITY, mainCOM_TEST_BAUD_RATE, mainCOM_TEST_LED );\r
+               vStartPolledQueueTasks( mainQUEUE_POLL_PRIORITY );\r
+               vStartCountingSemaphoreTasks();\r
+               vStartDynamicPriorityTasks();\r
+               \r
+               /* The suicide tasks must be created last, as they need to know how many\r
+               tasks were running prior to their creation in order to ascertain whether\r
+               or not the correct/expected number of tasks are running at any given\r
+               time. */\r
+               vCreateSuicidalTasks( mainCREATOR_TASK_PRIORITY );\r
+\r
+               /* Start the tasks and timer running. */\r
+               vTaskStartScheduler();\r
+       }\r
+\r
+       /* If all is well, the scheduler will now be running, and the following line\r
+       will never be reached.  If the following line does execute, then there was\r
+       insufficient FreeRTOS heap memory available for the idle and/or timer tasks\r
+       to be created.  See the memory management section on the FreeRTOS web site\r
+       for more details. */\r
+       for( ;; );\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static void prvCheckTimerCallback( xTimerHandle xTimer )\r
+{\r
+static long lChangedTimerPeriodAlready = pdFALSE;\r
+\r
+       /* Check the standard demo tasks are running without error.   Latch the\r
+       latest reported error in the pcStatusMessage character pointer. */\r
+       if( xAreGenericQueueTasksStillRunning() != pdTRUE )\r
+       {\r
+               pcStatusMessage = "Error: GenQueue";\r
+       }\r
+\r
+       if( xAreQueuePeekTasksStillRunning() != pdTRUE )\r
+       {\r
+               pcStatusMessage = "Error: QueuePeek\n";\r
+       }\r
+\r
+       if( xAreBlockingQueuesStillRunning() != pdTRUE )\r
+       {\r
+               pcStatusMessage = "Error: BlockQueue\n";\r
+       }\r
+\r
+       if( xAreBlockTimeTestTasksStillRunning() != pdTRUE )\r
+       {\r
+               pcStatusMessage = "Error: BlockTime\n";\r
+       }\r
+\r
+       if( xAreSemaphoreTasksStillRunning() != pdTRUE )\r
+       {\r
+               pcStatusMessage = "Error: SemTest\n";\r
+       }\r
+\r
+       if( xIsCreateTaskStillRunning() != pdTRUE )\r
+       {\r
+               pcStatusMessage = "Error: Death\n";\r
+       }\r
+\r
+       if( xAreRecursiveMutexTasksStillRunning() != pdTRUE )\r
+       {\r
+               pcStatusMessage = "Error: RecMutex\n";\r
+       }\r
+\r
+if( 0 )//_RB_  if( xAreComTestTasksStillRunning() != pdPASS )\r
+       {\r
+               pcStatusMessage = "Error: ComTest\n";\r
+       }\r
+       \r
+       if( xAreTimerDemoTasksStillRunning( ( mainCHECK_TIMER_PERIOD_MS ) ) != pdTRUE )\r
+       {\r
+               pcStatusMessage = "Error: TimerDemo\n";\r
+       }\r
+\r
+       if( xArePollingQueuesStillRunning() != pdTRUE )\r
+       {\r
+               pcStatusMessage = "Error: PollQueue\n";\r
+       }\r
+\r
+       if( xAreCountingSemaphoreTasksStillRunning() != pdTRUE )\r
+       {\r
+               pcStatusMessage = "Error: CountSem\n";\r
+       }\r
+       \r
+       if( xAreDynamicPriorityTasksStillRunning() != pdTRUE )\r
+       {\r
+               pcStatusMessage = "Error: DynamicPriority\n";\r
+       }\r
+       \r
+       /* Toggle the check LED to give an indication of the system status.  If\r
+       the LED toggles every mainCHECK_TIMER_PERIOD_MS milliseconds then\r
+       everything is ok.  A faster toggle indicates an error. */\r
+       vParTestToggleLED( mainCHECK_LED );\r
+\r
+       /* Have any errors been latch in pcStatusMessage?  If so, shorten the\r
+       period of the check timer to mainERROR_CHECK_TIMER_PERIOD_MS milliseconds.\r
+       This will result in an increase in the rate at which mainCHECK_LED\r
+       toggles. */\r
+       if( pcStatusMessage != NULL )\r
+       {\r
+               if( lChangedTimerPeriodAlready == pdFALSE )\r
+               {\r
+                       lChangedTimerPeriodAlready = pdTRUE;\r
+                       printf( "%s", pcStatusMessage );\r
+                       \r
+                       /* This call to xTimerChangePeriod() uses a zero block time.  Functions\r
+                       called from inside of a timer callback function must *never* attempt\r
+                       to block. */\r
+                       xTimerChangePeriod( xCheckTimer, ( mainERROR_CHECK_TIMER_PERIOD_MS ), mainDONT_BLOCK );\r
+               }\r
+       }\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static void prvButtonLEDTimerCallback( xTimerHandle xTimer )\r
+{\r
+       /* The timer has expired - so no button pushes have occurred in the last\r
+       five seconds - turn the LED off. */\r
+       vParTestSetLED( mainTIMER_CONTROLLED_LED, pdFALSE );\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static void prvLEDTimerCallback( xTimerHandle xTimer )\r
+{\r
+unsigned long ulLED;\r
+\r
+       /* This callback is shared by two timers, so the parameter is used to\r
+       determine which LED to toggle.  The LED number is stored in the ID of the\r
+       timer. */\r
+       ulLED = ( unsigned long ) pvTimerGetTimerID( xTimer );\r
+       vParTestToggleLED( ulLED );\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+/* The ISR executed when the user button is pushed. */\r
+void vPort_E_ISRHandler( void )\r
+{\r
+portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;\r
+\r
+       /* The button was pushed, so ensure the LED is on before resetting the\r
+       LED timer.  The LED timer will turn the LED off if the button is not\r
+       pushed within 5000ms. */\r
+       vParTestToggleLED( mainTIMER_CONTROLLED_LED );\r
+\r
+       /* This interrupt safe FreeRTOS function can be called from this interrupt\r
+       because the interrupt priority is below the\r
+       configMAX_SYSCALL_INTERRUPT_PRIORITY setting in FreeRTOSConfig.h. */\r
+       xTimerResetFromISR( xLEDTimer, &xHigherPriorityTaskWoken );\r
+\r
+       /* Clear the interrupt before leaving.  This just clears all the interrupts\r
+       for simplicity, as only one is actually used in this simple demo anyway. */\r
+       PORTE_ISFR = 0xFFFFFFFFUL;\r
+\r
+       /* If calling xTimerResetFromISR() caused a task (in this case the timer\r
+       service/daemon task) to unblock, and the unblocked task has a priority\r
+       higher than or equal to the task that was interrupted, then\r
+       xHigherPriorityTaskWoken will now be set to pdTRUE, and calling\r
+       portEND_SWITCHING_ISR() will ensure the unblocked task runs next. */\r
+       portEND_SWITCHING_ISR( xHigherPriorityTaskWoken );\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static void prvSetupHardware( void )\r
+{\r
+       /* Enable the interrupt on SW1. */\r
+       taskDISABLE_INTERRUPTS();\r
+       PORTE_PCR26 = PORT_PCR_MUX( 1 ) | PORT_PCR_IRQC( 0xA ) | PORT_PCR_PE_MASK | PORT_PCR_PS_MASK;\r
+       enable_irq( mainGPIO_E_VECTOR );\r
+       \r
+       /* Configure the LED outputs. */\r
+       vParTestInitialise();\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static void prvCreateDemoSpecificTimers( void )\r
+{\r
+       /* This function creates the timers, but does not start them.  This is\r
+       because the standard demo timer test is started after this function is\r
+       called.  The standard demo timer test will deliberatly fill the timer\r
+       command queue - and will fail the test if the command queue already holds\r
+       start commands for the timers created here.  Instead, the timers created in\r
+       this function are started from the idle task, at which time, the timer\r
+       service/daemon task will be running, and will have drained the timer command\r
+       queue. */\r
+       \r
+       /* Create the software timer that is responsible for turning off the LED\r
+       if the button is not pushed within 5000ms, as described at the top of\r
+       this file. */\r
+       xLEDTimer = xTimerCreate(       ( const signed char * ) "ButtonLEDTimer",       /* A text name, purely to help debugging. */\r
+                                                               ( mainBUTTON_LED_TIMER_PERIOD_MS ),                     /* The timer period, in this case 5000ms (5s). */\r
+                                                               pdFALSE,                                                                        /* This is a one shot timer, so xAutoReload is set to pdFALSE. */\r
+                                                               ( void * ) 0,                                                           /* The ID is not used, so can be set to anything. */\r
+                                                               prvButtonLEDTimerCallback                                       /* The callback function that switches the LED off. */\r
+                                                       );\r
+\r
+       /* Create the software timer that performs the 'check' functionality,\r
+       as described at the top of this file. */\r
+       xCheckTimer = xTimerCreate( ( const signed char * ) "CheckTimer",/* A text name, purely to help debugging. */\r
+                                                               ( mainCHECK_TIMER_PERIOD_MS ),          /* The timer period, in this case 3000ms (3s). */\r
+                                                               pdTRUE,                                                         /* This is an auto-reload timer, so xAutoReload is set to pdTRUE. */\r
+                                                               ( void * ) 0,                                           /* The ID is not used, so can be set to anything. */\r
+                                                               prvCheckTimerCallback                           /* The callback function that inspects the status of all the other tasks. */\r
+                                                         );\r
+       \r
+       /* Create the software timers used to simply flash LEDs.  These two timers\r
+       share a callback function, so the callback parameter is used to pass in the\r
+       LED that should be toggled. */\r
+       xLED1Timer = xTimerCreate( ( const signed char * ) "LED1Timer",/* A text name, purely to help debugging. */\r
+                                                               ( mainLED1_TIMER_PERIOD_MS ),           /* The timer period, in this case 3000ms (3s). */\r
+                                                               pdTRUE,                                                         /* This is an auto-reload timer, so xAutoReload is set to pdTRUE. */\r
+                                                               ( void * ) mainLED0,                            /* The ID is used to pass in the number of the LED to be toggled. */\r
+                                                               prvLEDTimerCallback                                     /* The callback function simply toggles the LED specified by its parameter. */\r
+                                                         );\r
+\r
+       xLED2Timer = xTimerCreate( ( const signed char * ) "LED2Timer",/* A text name, purely to help debugging. */\r
+                                                               ( mainLED2_TIMER_PERIOD_MS ),           /* The timer period, in this case 3000ms (3s). */\r
+                                                               pdTRUE,                                                         /* This is an auto-reload timer, so xAutoReload is set to pdTRUE. */\r
+                                                               ( void * ) mainLED1,                            /* The ID is used to pass in the number of the LED to be toggled. */\r
+                                                               prvLEDTimerCallback                                     /* The callback function simply toggles the LED specified by its parameter. */\r
+                                                         );\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+void vApplicationMallocFailedHook( void )\r
+{\r
+       /* Called if a call to pvPortMalloc() fails because there is insufficient\r
+       free memory available in the FreeRTOS heap.  pvPortMalloc() is called\r
+       internally by FreeRTOS API functions that create tasks, queues, software\r
+       timers, and semaphores.  The size of the FreeRTOS heap is set by the\r
+       configTOTAL_HEAP_SIZE configuration constant in FreeRTOSConfig.h. */\r
+       taskDISABLE_INTERRUPTS();\r
+       for( ;; );\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+void vApplicationStackOverflowHook( xTaskHandle *pxTask, signed char *pcTaskName )\r
+{\r
+       ( void ) pcTaskName;\r
+       ( void ) pxTask;\r
+\r
+       /* Run time stack overflow checking is performed if\r
+       configconfigCHECK_FOR_STACK_OVERFLOW is defined to 1 or 2.  This hook\r
+       function is called if a stack overflow is detected. */\r
+       taskDISABLE_INTERRUPTS();\r
+       for( ;; );\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+void vApplicationIdleHook( void )\r
+{\r
+static long lPrintedOut = pdFALSE;\r
+volatile size_t xFreeHeapSpace;\r
+\r
+       if( lPrintedOut == pdFALSE )\r
+       {\r
+               lPrintedOut = pdTRUE;\r
+\r
+               /* The timer command queue will have been filled when the timer test\r
+               tasks were created in main() (this is part of the test they perform).\r
+               Therefore, while the check and LED timers can be created in main(), they\r
+               cannot be started from main().  Once the scheduler has started, the timer\r
+               service task will drain the command queue, and now the check and digit\r
+               counter timers can be started successfully. */\r
+               xTimerStart( xCheckTimer, portMAX_DELAY );\r
+               xTimerStart( xLED1Timer, portMAX_DELAY );\r
+               xTimerStart( xLED2Timer, portMAX_DELAY );\r
+               \r
+               xFreeHeapSpace = xPortGetFreeHeapSize();\r
+               printf( "%d bytes of FreeRTOS heap remain unused - configTOTAL_HEAP_SIZE can be reduced\n", xFreeHeapSpace );\r
+               \r
+               if( xFreeHeapSpace > 100 )\r
+               {\r
+                       /* By now, the kernel has allocated everything it is going to, so\r
+                       if there is a lot of heap remaining unallocated then\r
+                       the value of configTOTAL_HEAP_SIZE in FreeRTOSConfig.h can be\r
+                       reduced accordingly. */\r
+               }\r
+       }\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+void vApplicationTickHook( void )\r
+{\r
+       /* Call the periodic timer test, which tests the timer API functions that\r
+       can be called from an ISR. */\r
+       vTimerPeriodicISRTests();\r
+}      \r
+/*-----------------------------------------------------------*/\r
+\r
index 30adfece2813870a2db39b0662138283717e8865..7eb2d738b0053dff5af3ca6b7f6b5646e217c113 100644 (file)
 converted to ticks using the portTICK_RATE_MS constant. */\r
 #define mainQUEUE_SEND_FREQUENCY_MS                    ( 200 / portTICK_RATE_MS )\r
 \r
+/* The LED will remain on until the button has not been pushed for a full\r
+5000ms. */\r
+#define mainBUTTON_LED_TIMER_PERIOD_MS         ( 5000UL / portTICK_RATE_MS )\r
+\r
 /* The number of items the queue can hold.  This is 1 as the receive task\r
 will remove items as they are added, meaning the send task should always find\r
 the queue empty. */\r
 #define mainQUEUE_LENGTH                                       ( 1 )\r
 \r
 /* The LED toggle by the queue receive task (blue). */\r
-#define mainTASK_CONTROLLED_LED                                10\r
+#define mainTASK_CONTROLLED_LED                                ( 1UL << 10UL )\r
 \r
 /* The LED turned on by the button interrupt, and turned off by the LED timer. */\r
-#define mainTIMER_CONTROLLED_LED                       29\r
+#define mainTIMER_CONTROLLED_LED                       ( 1UL << 29UL )\r
 \r
+/* The vector used by the GPIO port E.  Button SW2 is configured to generate\r
+an interrput on this port. */\r
 #define mainGPIO_E_VECTOR                                      ( 107 - 16 )\r
 \r
-#define GPIO_PIN_MASK            0x1Fu\r
-#define GPIO_PIN( x )              ( ( ( 1 ) << ( x & GPIO_PIN_MASK ) ) )\r
+/* A block time of zero simply means "don't block". */\r
+#define mainDONT_BLOCK                                         ( 0UL )\r
 \r
 /*-----------------------------------------------------------*/\r
 \r
@@ -157,16 +163,16 @@ static void prvQueueSendTask( void *pvParameters );
  * The LED timer callback function.  This does nothing but switch off the\r
  * LED defined by the mainTIMER_CONTROLLED_LED constant.\r
  */\r
-static void vLEDTimerCallback( xTimerHandle xTimer );\r
+static void prvButtonLEDTimerCallback( xTimerHandle xTimer );\r
 \r
 /*-----------------------------------------------------------*/\r
 \r
 /* The queue used by both tasks. */\r
 static xQueueHandle xQueue = NULL;\r
 \r
-/* The LED software timer.  This uses vLEDTimerCallback() as its callback\r
+/* The LED software timer.  This uses prvButtonLEDTimerCallback() as its callback\r
 function. */\r
-static xTimerHandle xLEDTimer = NULL;\r
+static xTimerHandle xButtonLEDTimer = NULL;\r
 \r
 /*-----------------------------------------------------------*/\r
 \r
@@ -188,11 +194,11 @@ void main( void )
                /* Create the software timer that is responsible for turning off the LED\r
                if the button is not pushed within 5000ms, as described at the top of\r
                this file. */\r
-               xLEDTimer = xTimerCreate(       ( const signed char * ) "LEDTimer", /* A text name, purely to help debugging. */\r
-                                                                       ( 5000 / portTICK_RATE_MS ),            /* The timer period, in this case 5000ms (5s). */\r
-                                                                       pdFALSE,                                                        /* This is a one shot timer, so xAutoReload is set to pdFALSE. */\r
-                                                                       ( void * ) 0,                                           /* The ID is not used, so can be set to anything. */\r
-                                                                       vLEDTimerCallback                                       /* The callback function that switches the LED off. */\r
+               xButtonLEDTimer = xTimerCreate( ( const signed char * ) "ButtonLEDTimer", /* A text name, purely to help debugging. */\r
+                                                                       mainBUTTON_LED_TIMER_PERIOD_MS,                 /* The timer period, in this case 5000ms (5s). */\r
+                                                                       pdFALSE,                                                                /* This is a one shot timer, so xAutoReload is set to pdFALSE. */\r
+                                                                       ( void * ) 0,                                                   /* The ID is not used, so can be set to anything. */\r
+                                                                       prvButtonLEDTimerCallback                               /* The callback function that switches the LED off. */\r
                                                                );\r
 \r
                /* Start the tasks and timer running. */\r
@@ -208,14 +214,14 @@ void main( void )
 }\r
 /*-----------------------------------------------------------*/\r
 \r
-static void vLEDTimerCallback( xTimerHandle xTimer )\r
+static void prvButtonLEDTimerCallback( xTimerHandle xTimer )\r
 {\r
        /* The timer has expired - so no button pushes have occurred in the last\r
        five seconds - turn the LED off.  NOTE - accessing the LED port should use\r
        a critical section because it is accessed from multiple tasks, and the\r
        button interrupt - in this trivial case, for simplicity, the critical\r
        section is omitted. */\r
-       GPIOA_PDOR |= GPIO_PDOR_PDO( GPIO_PIN( mainTIMER_CONTROLLED_LED ) );\r
+       GPIOA_PDOR |= GPIO_PDOR_PDO( mainTIMER_CONTROLLED_LED );\r
 }\r
 /*-----------------------------------------------------------*/\r
 \r
@@ -227,12 +233,12 @@ portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
        /* The button was pushed, so ensure the LED is on before resetting the\r
        LED timer.  The LED timer will turn the LED off if the button is not\r
        pushed within 5000ms. */\r
-       GPIOA_PDOR &= ~GPIO_PDOR_PDO( GPIO_PIN( mainTIMER_CONTROLLED_LED ) );\r
+       GPIOA_PDOR &= ~GPIO_PDOR_PDO( mainTIMER_CONTROLLED_LED );\r
 \r
        /* This interrupt safe FreeRTOS function can be called from this interrupt\r
        because the interrupt priority is below the\r
        configMAX_SYSCALL_INTERRUPT_PRIORITY setting in FreeRTOSConfig.h. */\r
-       xTimerResetFromISR( xLEDTimer, &xHigherPriorityTaskWoken );\r
+       xTimerResetFromISR( xButtonLEDTimer, &xHigherPriorityTaskWoken );\r
 \r
        /* Clear the interrupt before leaving.  This just clears all the interrupts\r
        for simplicity, as only one is actually used in this simple demo anyway. */\r
@@ -267,7 +273,7 @@ const unsigned long ulValueToSend = 100UL;
                toggle an LED.  0 is used as the block time so the sending operation\r
                will not block - it shouldn't need to block as the queue should always\r
                be empty at this point in the code. */\r
-               xQueueSend( xQueue, &ulValueToSend, 0 );\r
+               xQueueSend( xQueue, &ulValueToSend, mainDONT_BLOCK );\r
        }\r
 }\r
 /*-----------------------------------------------------------*/\r
@@ -291,7 +297,7 @@ unsigned long ulReceivedValue;
                        because it is accessed from multiple tasks, and the button interrupt\r
                        - in this trivial case, for simplicity, the critical section is\r
                        omitted. */\r
-                   GPIOA_PTOR |= GPIO_PDOR_PDO( GPIO_PIN( mainTASK_CONTROLLED_LED ) );\r
+                   GPIOA_PTOR |= GPIO_PDOR_PDO( mainTASK_CONTROLLED_LED );\r
                }\r
        }\r
 }\r
@@ -299,13 +305,11 @@ unsigned long ulReceivedValue;
 \r
 static void prvSetupHardware( void )\r
 {\r
-       /* Turn on all port clocks */\r
-       SIM_SCGC5 = SIM_SCGC5_PORTA_MASK | SIM_SCGC5_PORTB_MASK | SIM_SCGC5_PORTC_MASK | SIM_SCGC5_PORTD_MASK | SIM_SCGC5_PORTE_MASK;\r
-\r
        /* Enable the interrupt on SW1. */\r
        PORTE_PCR26 = PORT_PCR_MUX( 1 ) | PORT_PCR_IRQC( 0xA ) | PORT_PCR_PE_MASK | PORT_PCR_PS_MASK;\r
 \r
        enable_irq( mainGPIO_E_VECTOR );\r
+       set_irq_priority( mainGPIO_E_VECTOR, configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY );\r
        \r
        /* Set PTA10, PTA11, PTA28, and PTA29 (connected to LED's) for GPIO\r
        functionality. */\r
@@ -314,8 +318,8 @@ static void prvSetupHardware( void )
        PORTA_PCR28 = ( 0 | PORT_PCR_MUX( 1 ) );\r
        PORTA_PCR29 = ( 0 | PORT_PCR_MUX( 1 ) );\r
        \r
-       /* Change PTA10, PTA11, PTA28, PTA29 to outputs. */\r
-       GPIOA_PDDR=GPIO_PDDR_PDD( GPIO_PIN( mainTASK_CONTROLLED_LED ) | GPIO_PIN( mainTIMER_CONTROLLED_LED ) ); \r
+       /* Change PTA10, PTA29 to outputs. */\r
+       GPIOA_PDDR=GPIO_PDDR_PDD( mainTASK_CONTROLLED_LED | mainTIMER_CONTROLLED_LED ); \r
 \r
        /* Start with LEDs off. */\r
        GPIOA_PTOR = ~0U;\r
@@ -329,6 +333,7 @@ void vApplicationMallocFailedHook( void )
        internally by FreeRTOS API functions that create tasks, queues, software\r
        timers, and semaphores.  The size of the FreeRTOS heap is set by the\r
        configTOTAL_HEAP_SIZE configuration constant in FreeRTOSConfig.h. */\r
+       taskDISABLE_INTERRUPTS();\r
        for( ;; );\r
 }\r
 /*-----------------------------------------------------------*/\r
@@ -341,6 +346,7 @@ void vApplicationStackOverflowHook( xTaskHandle *pxTask, signed char *pcTaskName
        /* Run time stack overflow checking is performed if\r
        configconfigCHECK_FOR_STACK_OVERFLOW is defined to 1 or 2.  This hook\r
        function is called if a stack overflow is detected. */\r
+       taskDISABLE_INTERRUPTS();\r
        for( ;; );\r
 }\r
 /*-----------------------------------------------------------*/\r