]> git.sur5r.net Git - freertos/commitdiff
Add STM32 Primer demo. Remove the .lock file from the Eclipse demos.
authorRichardBarry <RichardBarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Mon, 26 Nov 2007 15:43:24 +0000 (15:43 +0000)
committerRichardBarry <RichardBarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Mon, 26 Nov 2007 15:43:24 +0000 (15:43 +0000)
git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@118 1d2547de-c912-0410-9cb9-b8ca96c0e9e2

31 files changed:
Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.lock [deleted file]
Demo/ARM7_LPC2368_Eclipse/.metadata/.lock [deleted file]
Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/.lock [deleted file]
Demo/CORTEX_STM32F103_Primer_GCC/FreeRTOSConfig.h [new file with mode: 0644]
Demo/CORTEX_STM32F103_Primer_GCC/ParTest/ParTest.c [new file with mode: 0644]
Demo/CORTEX_STM32F103_Primer_GCC/RTOSDemo-globals.Standard.xml [new file with mode: 0644]
Demo/CORTEX_STM32F103_Primer_GCC/RTOSDemo.Standard.xml [new file with mode: 0644]
Demo/CORTEX_STM32F103_Primer_GCC/RTOSDemo.rapp [new file with mode: 0644]
Demo/CORTEX_STM32F103_Primer_GCC/RTOSDemo.rprj [new file with mode: 0644]
Demo/CORTEX_STM32F103_Primer_GCC/ST_Code/Util.c [new file with mode: 0644]
Demo/CORTEX_STM32F103_Primer_GCC/ST_Code/adc.h [new file with mode: 0644]
Demo/CORTEX_STM32F103_Primer_GCC/ST_Code/buzzer.c [new file with mode: 0644]
Demo/CORTEX_STM32F103_Primer_GCC/ST_Code/circle.h [new file with mode: 0644]
Demo/CORTEX_STM32F103_Primer_GCC/ST_Code/circle_api.h [new file with mode: 0644]
Demo/CORTEX_STM32F103_Primer_GCC/ST_Code/crt0_STM32x.c [new file with mode: 0644]
Demo/CORTEX_STM32F103_Primer_GCC/ST_Code/draw.c [new file with mode: 0644]
Demo/CORTEX_STM32F103_Primer_GCC/ST_Code/lcd.c [new file with mode: 0644]
Demo/CORTEX_STM32F103_Primer_GCC/ST_Code/lcd.h [new file with mode: 0644]
Demo/CORTEX_STM32F103_Primer_GCC/ST_Code/led.c [new file with mode: 0644]
Demo/CORTEX_STM32F103_Primer_GCC/ST_Code/mems.c [new file with mode: 0644]
Demo/CORTEX_STM32F103_Primer_GCC/ST_Code/pointer.c [new file with mode: 0644]
Demo/CORTEX_STM32F103_Primer_GCC/ST_Code/scheduler.h [new file with mode: 0644]
Demo/CORTEX_STM32F103_Primer_GCC/ST_Code/stm32f10x_circle_it.c [new file with mode: 0644]
Demo/CORTEX_STM32F103_Primer_GCC/ST_Code/stm32f10x_conf.h [new file with mode: 0644]
Demo/CORTEX_STM32F103_Primer_GCC/ST_Code/stm32f10x_it.h [new file with mode: 0644]
Demo/CORTEX_STM32F103_Primer_GCC/ST_Code/stm32f10x_tim.c [new file with mode: 0644]
Demo/CORTEX_STM32F103_Primer_GCC/bitmap.h [new file with mode: 0644]
Demo/CORTEX_STM32F103_Primer_GCC/main.c [new file with mode: 0644]
Demo/CORTEX_STM32F103_Primer_GCC/printf-stdarg.c [new file with mode: 0644]
Demo/CORTEX_STM32F103_Primer_GCC/timertest.c [new file with mode: 0644]
Source/include/portable.h

diff --git a/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.lock b/Demo/ARM7_AT91SAM7X256_Eclipse/.metadata/.lock
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/Demo/ARM7_LPC2368_Eclipse/.metadata/.lock b/Demo/ARM7_LPC2368_Eclipse/.metadata/.lock
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/.lock b/Demo/CORTEX_LM3Sxxxx_Eclipse/.metadata/.lock
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/Demo/CORTEX_STM32F103_Primer_GCC/FreeRTOSConfig.h b/Demo/CORTEX_STM32F103_Primer_GCC/FreeRTOSConfig.h
new file mode 100644 (file)
index 0000000..1f708f0
--- /dev/null
@@ -0,0 +1,93 @@
+/*\r
+       FreeRTOS.org V4.6.1 - Copyright (C) 2003-2007 Richard Barry.\r
+\r
+       This file is part of the FreeRTOS.org distribution.\r
+\r
+       FreeRTOS.org is free software; you can redistribute it and/or modify\r
+       it under the terms of the GNU General Public License as published by\r
+       the Free Software Foundation; either version 2 of the License, or\r
+       (at your option) any later version.\r
+\r
+       FreeRTOS.org is distributed in the hope that it will be useful,\r
+       but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+       GNU General Public License for more details.\r
+\r
+       You should have received a copy of the GNU General Public License\r
+       along with FreeRTOS.org; if not, write to the Free Software\r
+       Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\r
+\r
+       A special exception to the GPL can be applied should you wish to distribute\r
+       a combined work that includes FreeRTOS.org, without being obliged to provide\r
+       the source code for any proprietary components.  See the licensing section\r
+       of http://www.FreeRTOS.org for full details of how and when the exception\r
+       can be applied.\r
+\r
+       ***************************************************************************\r
+       See http://www.FreeRTOS.org for documentation, latest information, license\r
+       and contact details.  Please ensure to read the configuration and relevant\r
+       port sections of the online documentation.\r
+\r
+       Also see http://www.SafeRTOS.com a version that has been certified for use\r
+       in safety critical systems, plus commercial licensing, development and\r
+       support options.\r
+       ***************************************************************************\r
+*/\r
+\r
+#ifndef FREERTOS_CONFIG_H\r
+#define FREERTOS_CONFIG_H\r
+\r
+/* Library includes. */\r
+#include "stm32f10x_lib.h"\r
+\r
+/*-----------------------------------------------------------\r
+ * Application specific definitions.\r
+ *\r
+ * These definitions should be adjusted for your particular hardware and\r
+ * application requirements.\r
+ *\r
+ * THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
+ * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.\r
+ *----------------------------------------------------------*/\r
+\r
+#define configUSE_PREEMPTION           1\r
+#define configUSE_IDLE_HOOK                    0\r
+#define configUSE_TICK_HOOK                    1\r
+#define configCPU_CLOCK_HZ                     ( ( unsigned portLONG ) 72000000 )      \r
+#define configTICK_RATE_HZ                     ( ( portTickType ) 1000 )\r
+#define configMAX_PRIORITIES           ( ( unsigned portBASE_TYPE ) 5 )\r
+#define configMINIMAL_STACK_SIZE       ( ( unsigned portSHORT ) 128 )\r
+#define configTOTAL_HEAP_SIZE          ( ( size_t ) ( 17 * 1024 ) )\r
+#define configMAX_TASK_NAME_LEN                ( 16 )\r
+#define configUSE_TRACE_FACILITY       0\r
+#define configUSE_16_BIT_TICKS         0\r
+#define configIDLE_SHOULD_YIELD                1\r
+#define configUSE_MUTEXES                      1\r
+\r
+/* Co-routine definitions. */\r
+#define configUSE_CO_ROUTINES          0\r
+#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )\r
+\r
+/* Set the following definitions to 1 to include the API function, or zero\r
+to exclude the API function. */\r
+\r
+#define INCLUDE_vTaskPrioritySet               1\r
+#define INCLUDE_uxTaskPriorityGet              1\r
+#define INCLUDE_vTaskDelete                            1\r
+#define INCLUDE_vTaskCleanUpResources  0\r
+#define INCLUDE_vTaskSuspend                   1\r
+#define INCLUDE_vTaskDelayUntil                        1\r
+#define INCLUDE_vTaskDelay                             1\r
+\r
+/* This is the raw value as per the Cortex-M3 NVIC.  Values can be 255\r
+(lowest) to 0 (1?) (highest). */\r
+#define configKERNEL_INTERRUPT_PRIORITY                255\r
+\r
+/* This is the value being used as per the ST library which permits 16\r
+priority values, 0 to 15.  This must correspond to the\r
+configKERNEL_INTERRUPT_PRIORITY setting.  Here 15 corresponds to the lowest\r
+NVIC value of 255. */\r
+#define configLIBRARY_KERNEL_INTERRUPT_PRIORITY        15\r
+\r
+#endif /* FREERTOS_CONFIG_H */\r
+\r
diff --git a/Demo/CORTEX_STM32F103_Primer_GCC/ParTest/ParTest.c b/Demo/CORTEX_STM32F103_Primer_GCC/ParTest/ParTest.c
new file mode 100644 (file)
index 0000000..33cf1c2
--- /dev/null
@@ -0,0 +1,121 @@
+/*\r
+       FreeRTOS.org V4.6.1 - Copyright (C) 2003-2007 Richard Barry.\r
+\r
+       This file is part of the FreeRTOS.org distribution.\r
+\r
+       FreeRTOS.org is free software; you can redistribute it and/or modify\r
+       it under the terms of the GNU General Public License as published by\r
+       the Free Software Foundation; either version 2 of the License, or\r
+       (at your option) any later version.\r
+\r
+       FreeRTOS.org is distributed in the hope that it will be useful,\r
+       but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+       GNU General Public License for more details.\r
+\r
+       You should have received a copy of the GNU General Public License\r
+       along with FreeRTOS.org; if not, write to the Free Software\r
+       Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\r
+\r
+       A special exception to the GPL can be applied should you wish to distribute\r
+       a combined work that includes FreeRTOS.org, without being obliged to provide\r
+       the source code for any proprietary components.  See the licensing section\r
+       of http://www.FreeRTOS.org for full details of how and when the exception\r
+       can be applied.\r
+\r
+       ***************************************************************************\r
+       See http://www.FreeRTOS.org for documentation, latest information, license\r
+       and contact details.  Please ensure to read the configuration and relevant\r
+       port sections of the online documentation.\r
+\r
+       Also see http://www.SafeRTOS.com a version that has been certified for use\r
+       in safety critical systems, plus commercial licensing, development and\r
+       support options.\r
+       ***************************************************************************\r
+*/\r
+\r
+/*-----------------------------------------------------------\r
+ * Simple parallel port IO routines.\r
+ *-----------------------------------------------------------*/\r
+\r
+/* FreeRTOS.org includes. */\r
+#include "FreeRTOS.h"\r
+#include "task.h"\r
+#include "partest.h"\r
+\r
+#define partstMAX_OUTPUT_LED   ( 2 )\r
+#define partstFIRST_LED                        GPIO_Pin_8\r
+\r
+static unsigned portSHORT usOutputValue = 0;\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+void vParTestInitialise( void )\r
+{\r
+GPIO_InitTypeDef GPIO_InitStructure;\r
+\r
+       /* Enable LED GPIO clock. */\r
+       RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE );\r
+\r
+       /* Configure LED pins as output push-pull. */\r
+       GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 ;\r
+       GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;\r
+       GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;\r
+\r
+       GPIO_Init( GPIOB, &GPIO_InitStructure );\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+void vParTestSetLED( unsigned portBASE_TYPE uxLED, signed portBASE_TYPE xValue )\r
+{\r
+unsigned portSHORT usBit;\r
+\r
+       vTaskSuspendAll();\r
+       {\r
+               if( uxLED < partstMAX_OUTPUT_LED )\r
+               {\r
+                       usBit = partstFIRST_LED << uxLED;\r
+\r
+                       if( xValue == pdFALSE )\r
+                       {\r
+                               usBit ^= ( unsigned portSHORT ) 0xffff;\r
+                               usOutputValue &= usBit;\r
+                       }\r
+                       else\r
+                       {\r
+                               usOutputValue |= usBit;\r
+                       }\r
+\r
+                       GPIO_Write( GPIOB, usOutputValue );\r
+               }       \r
+       }\r
+       xTaskResumeAll();\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+void vParTestToggleLED( unsigned portBASE_TYPE uxLED )\r
+{\r
+unsigned portSHORT usBit;\r
+\r
+       vTaskSuspendAll();\r
+       {\r
+               if( uxLED < partstMAX_OUTPUT_LED )\r
+               {\r
+                       usBit = partstFIRST_LED << uxLED;\r
+\r
+                       if( usOutputValue & usBit )\r
+                       {\r
+                               usOutputValue &= ~usBit;\r
+                       }\r
+                       else\r
+                       {\r
+                               usOutputValue |= usBit;\r
+                       }\r
+\r
+                       GPIO_Write( GPIOB, usOutputValue );\r
+               }\r
+       }\r
+       xTaskResumeAll();\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
diff --git a/Demo/CORTEX_STM32F103_Primer_GCC/RTOSDemo-globals.Standard.xml b/Demo/CORTEX_STM32F103_Primer_GCC/RTOSDemo-globals.Standard.xml
new file mode 100644 (file)
index 0000000..1156f6f
--- /dev/null
@@ -0,0 +1,577 @@
+<!-- DWF2XML 0.01.29 - Raisonance Dwarf information extractor -->\r
+<aoffile Header="RTOSDemo" Path="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\RTOSDemo.elf">\r
+ <Def>\r
+  <Col Header="DeclFile" Desc="File"/>\r
+  <Col Header="Type" Desc="Type"/>\r
+  <Col Header="Header" Desc="Name"/>\r
+ </Def>\r
+ <type Header="u16" Icon="1" Type="type" Desc=": unsigned int" DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_type.h" DeclLine="37" Pointer="No"/>\r
+ <type Header="GPIOSpeed_TypeDef" Icon="1" Type="type" Desc=": unsigned char" DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_gpio.h" DeclLine="36" Pointer="No"/>\r
+ <type Header="GPIOMode_TypeDef" Icon="1" Type="type" Desc=": unsigned char" DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_gpio.h" DeclLine="51" Pointer="No"/>\r
+ <type Header="GPIO_InitTypeDef" Icon="1" Type="type" Desc=": struct " DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_gpio.h" DeclLine="64" Pointer="No"/>\r
+ <func Header="LED_Set" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\led.c" DeclLine="201"/>\r
+ <func Header="LED_Handler_hw" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\led.c" DeclLine="93"/>\r
+ <func Header="LED_Handler" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\led.c" DeclLine="73"/>\r
+ <func Header="LED_Init" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\led.c" DeclLine="46"/>\r
+ <variable Header="dummy_var" Icon="2" Type="variable" Desc=":   unsigned char" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\circle.h" DeclLine="77" Pointer="No"/>\r
+ <variable Header="Application_Pointer_Mgr" Icon="2" Type="variable" Desc=":    " DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\circle.h" DeclLine="429" Pointer="No"/>\r
+ <variable Header="GreenLED_Counter" Icon="2" Type="variable" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\led.c" DeclLine="19" Pointer="No"/>\r
+ <variable Header="RedLED_Counter" Icon="2" Type="variable" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\led.c" DeclLine="20" Pointer="No"/>\r
+ <variable Header="GreenLED_mode" Icon="2" Type="variable" Desc=":   unsigned char" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\led.c" DeclLine="21" Pointer="No"/>\r
+ <variable Header="RedLED_mode" Icon="2" Type="variable" Desc=":   unsigned char" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\led.c" DeclLine="22" Pointer="No"/>\r
+ <variable Header="GreenLED_newmode" Icon="2" Type="variable" Desc=":   unsigned char" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\led.c" DeclLine="23" Pointer="No"/>\r
+ <variable Header="RedLED_newmode" Icon="2" Type="variable" Desc=":   unsigned char" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\led.c" DeclLine="24" Pointer="No"/>\r
+ <variable Header="HalfPeriod_LF" Icon="2" Type="variable" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\led.c" DeclLine="25" Pointer="No"/>\r
+ <variable Header="HalfPeriod_HF" Icon="2" Type="variable" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\led.c" DeclLine="26" Pointer="No"/>\r
+ <variable Header="Period_LF" Icon="2" Type="variable" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\led.c" DeclLine="27" Pointer="No"/>\r
+ <variable Header="Period_HF" Icon="2" Type="variable" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\led.c" DeclLine="28" Pointer="No"/>\r
+ <func Header="Reset_Handler" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\crt0_STM32x.c" DeclLine="188"/>\r
+ <variable Header="g_pfnVectors" Icon="2" Type="variable" Desc=":    " DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\crt0_STM32x.c" DeclLine="110" Pointer="No"/>\r
+ <type Header="s16" Icon="1" Type="type" Desc=": int" DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_type.h" DeclLine="29" Pointer="No"/>\r
+ <type Header="u32" Icon="1" Type="type" Desc=": unsigned long" DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_type.h" DeclLine="36" Pointer="No"/>\r
+ <type Header="u16" Icon="1" Type="type" Desc=": unsigned int" DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_type.h" DeclLine="37" Pointer="No"/>\r
+ <type Header="u8" Icon="1" Type="type" Desc=": unsigned char" DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_type.h" DeclLine="38" Pointer="No"/>\r
+ <type Header="GPIO_TypeDef" Icon="1" Type="type" Desc=": struct " DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_map.h" DeclLine="208" Pointer="No"/>\r
+ <type Header="GPIOSpeed_TypeDef" Icon="1" Type="type" Desc=": unsigned char" DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_gpio.h" DeclLine="36" Pointer="No"/>\r
+ <type Header="GPIOMode_TypeDef" Icon="1" Type="type" Desc=": unsigned char" DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_gpio.h" DeclLine="51" Pointer="No"/>\r
+ <type Header="GPIO_InitTypeDef" Icon="1" Type="type" Desc=": struct " DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_gpio.h" DeclLine="64" Pointer="No"/>\r
+ <type Header="BitAction" Icon="1" Type="type" Desc=": unsigned char" DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_gpio.h" DeclLine="70" Pointer="No"/>\r
+ <type Header="TIM_TimeBaseInitTypeDef" Icon="1" Type="type" Desc=": struct " DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_tim.h" DeclLine="38" Pointer="No"/>\r
+ <type Header="TIM_OCInitTypeDef" Icon="1" Type="type" Desc=": struct " DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_tim.h" DeclLine="47" Pointer="No"/>\r
+ <type Header="DataConfigMode_TypeDef" Icon="1" Type="type" Desc=": unsigned char" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.h" DeclLine="26" Pointer="No"/>\r
+ <type Header="Rotate_H12_V_Match_TypeDef" Icon="1" Type="type" Desc=": unsigned char" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\circle.h" DeclLine="101" Pointer="No"/>\r
+ <func Header="LCD_DataLinesWrite" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" DeclLine="202"/>\r
+ <func Header="LCD_SetBackLight" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" DeclLine="1053"/>\r
+ <func Header="LCD_SetBackLightOff" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" DeclLine="1076"/>\r
+ <func Header="LCD_SetBackLightOn" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" DeclLine="1092"/>\r
+ <func Header="LCD_GetBackLight" Icon="3" Type="func" Desc=":   unsigned long" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" DeclLine="1110"/>\r
+ <func Header="LCD_SetRotateScreen" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" DeclLine="1129"/>\r
+ <func Header="LCD_GetRotateScreen" Icon="3" Type="func" Desc=":   unsigned char" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" DeclLine="1148"/>\r
+ <func Header="LCD_GetScreenOrientation" Icon="3" Type="func" Desc=":   unsigned char" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" DeclLine="1186"/>\r
+ <func Header="LCD_CtrlLinesWrite" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" DeclLine="255"/>\r
+ <func Header="LCD_SendLCDData" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" DeclLine="707"/>\r
+ <func Header="LCD_SendLCDCmd" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" DeclLine="679"/>\r
+ <func Header="LCD_SetRect_For_Cmd" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" DeclLine="1028"/>\r
+ <func Header="LCD_DrawPixel" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" DeclLine="901"/>\r
+ <func Header="LCD_FillRect" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" DeclLine="777"/>\r
+ <func Header="LCD_DrawRect" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" DeclLine="873"/>\r
+ <func Header="LCD_SetScreenOrientation" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" DeclLine="1166"/>\r
+ <func Header="LCD_DisplayChar" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" DeclLine="1004"/>\r
+ <func Header="LCD_DataLinesConfig" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" DeclLine="167"/>\r
+ <func Header="LCD_ReadLCDData" Icon="3" Type="func" Desc=":   unsigned long" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" DeclLine="734"/>\r
+ <func Header="LCD_RectRead" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" DeclLine="934"/>\r
+ <func Header="LCD_GetPixel" Icon="3" Type="func" Desc=":   unsigned int" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" DeclLine="973"/>\r
+ <func Header="LCD_Handler" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" DeclLine="651"/>\r
+ <func Header="LCD_Init" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" DeclLine="613"/>\r
+ <variable Header="TIM_TimeBaseStructure" Icon="2" Type="variable" Desc=":   struct " DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" DeclLine="28" Pointer="No"/>\r
+ <variable Header="TIM_OCInitStructure" Icon="2" Type="variable" Desc=":   struct " DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" DeclLine="29" Pointer="No"/>\r
+ <variable Header="HandlerDivider" Icon="2" Type="variable" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" DeclLine="30" Pointer="No"/>\r
+ <variable Header="AsciiDotsTable" Icon="2" Type="variable" Desc=":   unsigned char[1330]" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" DeclLine="42" Pointer="No"/>\r
+ <variable Header="dummy_var" Icon="2" Type="variable" Desc=":   unsigned char" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\circle.h" DeclLine="77" Pointer="No"/>\r
+ <variable Header="Application_Pointer_Mgr" Icon="2" Type="variable" Desc=":    " DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\circle.h" DeclLine="429" Pointer="No"/>\r
+ <variable Header="Current_CCR_BackLightStart" Icon="2" Type="variable" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" DeclLine="32" Pointer="No"/>\r
+ <variable Header="OrientationOffsetX" Icon="2" Type="variable" Desc=":   long[4]" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" DeclLine="139" Pointer="No"/>\r
+ <variable Header="OrientationOffsetY" Icon="2" Type="variable" Desc=":   long[4]" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" DeclLine="140" Pointer="No"/>\r
+ <type Header="s32" Icon="1" Type="type" Desc=": long" DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_type.h" DeclLine="28" Pointer="No"/>\r
+ <type Header="s16" Icon="1" Type="type" Desc=": int" DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_type.h" DeclLine="29" Pointer="No"/>\r
+ <type Header="u32" Icon="1" Type="type" Desc=": unsigned long" DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_type.h" DeclLine="36" Pointer="No"/>\r
+ <type Header="u16" Icon="1" Type="type" Desc=": unsigned int" DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_type.h" DeclLine="37" Pointer="No"/>\r
+ <type Header="u8" Icon="1" Type="type" Desc=": unsigned char" DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_type.h" DeclLine="38" Pointer="No"/>\r
+ <type Header="GPIOSpeed_TypeDef" Icon="1" Type="type" Desc=": unsigned char" DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_gpio.h" DeclLine="36" Pointer="No"/>\r
+ <type Header="GPIOMode_TypeDef" Icon="1" Type="type" Desc=": unsigned char" DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_gpio.h" DeclLine="51" Pointer="No"/>\r
+ <type Header="GPIO_InitTypeDef" Icon="1" Type="type" Desc=": struct " DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_gpio.h" DeclLine="64" Pointer="No"/>\r
+ <type Header="RCC_ClocksTypeDef" Icon="1" Type="type" Desc=": struct " DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_rcc.h" DeclLine="37" Pointer="No"/>\r
+ <type Header="tHandler" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\scheduler.h" DeclLine="75" Pointer="No"/>\r
+ <func Header="_int2str" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" DeclLine="56"/>\r
+ <func Header="delay_unit" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" DeclLine="116"/>\r
+ <func Header="UTIL_GetBat" Icon="3" Type="func" Desc=":   unsigned int" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" DeclLine="138"/>\r
+ <func Header="UTIL_GetTemp" Icon="3" Type="func" Desc=":   unsigned int" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" DeclLine="167"/>\r
+ <func Header="UTIL_SetTempMode" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" DeclLine="202"/>\r
+ <func Header="UTIL_uint2str" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" DeclLine="251"/>\r
+ <func Header="UTIL_int2str" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" DeclLine="273"/>\r
+ <func Header="UTIL_GetPll" Icon="3" Type="func" Desc=":   unsigned char" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" DeclLine="372"/>\r
+ <func Header="UTIL_GetVersion" Icon="3" Type="func" Desc=":   unsigned char CODE*" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" DeclLine="390"/>\r
+ <func Header="UTIL_ReadBackupRegister" Icon="3" Type="func" Desc=":   unsigned int" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" DeclLine="410"/>\r
+ <func Header="UTIL_WriteBackupRegister" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" DeclLine="429"/>\r
+ <func Header="UTIL_SetIrqHandler" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" DeclLine="449"/>\r
+ <type Header="tHandler" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\scheduler.h" DeclLine="75" Pointer="No"/>\r
+ <type Header="tHandler" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\scheduler.h" DeclLine="75" Pointer="No"/>\r
+ <func Header="UTIL_GetIrqHandler" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" DeclLine="471"/>\r
+ <func Header="UTIL_SetSchHandler" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" DeclLine="499"/>\r
+ <type Header="tHandler" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\scheduler.h" DeclLine="75" Pointer="No"/>\r
+ <type Header="tHandler" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\scheduler.h" DeclLine="75" Pointer="No"/>\r
+ <func Header="UTIL_GetSchHandler" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" DeclLine="524"/>\r
+ <func Header="UTIL_SetPll" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" DeclLine="291"/>\r
+ <func Header="UTIL_GetUsb" Icon="3" Type="func" Desc=":   unsigned char" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" DeclLine="223"/>\r
+ <type Header="tHandler" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\scheduler.h" DeclLine="75" Pointer="No"/>\r
+ <type Header="tHandler" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\scheduler.h" DeclLine="75" Pointer="No"/>\r
+ <variable Header="CurrentSpeed" Icon="2" Type="variable" Desc=":   unsigned char" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" DeclLine="25" Pointer="No"/>\r
+ <variable Header="dummy_var" Icon="2" Type="variable" Desc=":   unsigned char" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\circle.h" DeclLine="77" Pointer="No"/>\r
+ <variable Header="RCC_ClockFreq" Icon="2" Type="variable" Desc=":   struct " DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" DeclLine="28" Pointer="No"/>\r
+ <variable Header="fTemperatureInFahrenheit" Icon="2" Type="variable" Desc=":   unsigned char" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" DeclLine="30" Pointer="No"/>\r
+ <variable Header="Application_Pointer_Mgr" Icon="2" Type="variable" Desc=":    " DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\circle.h" DeclLine="429" Pointer="No"/>\r
+ <variable Header="dummycounter" Icon="2" Type="variable" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" DeclLine="29" Pointer="No"/>\r
+ <type Header="s16" Icon="1" Type="type" Desc=": int" DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_type.h" DeclLine="29" Pointer="No"/>\r
+ <type Header="u32" Icon="1" Type="type" Desc=": unsigned long" DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_type.h" DeclLine="36" Pointer="No"/>\r
+ <type Header="u16" Icon="1" Type="type" Desc=": unsigned int" DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_type.h" DeclLine="37" Pointer="No"/>\r
+ <type Header="u8" Icon="1" Type="type" Desc=": unsigned char" DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_type.h" DeclLine="38" Pointer="No"/>\r
+ <type Header="Rotate_H12_V_Match_TypeDef" Icon="1" Type="type" Desc=": unsigned char" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\circle.h" DeclLine="101" Pointer="No"/>\r
+ <func Header="DRAW_SetCharMagniCoeff" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" DeclLine="218"/>\r
+ <func Header="DRAW_GetCharMagniCoeff" Icon="3" Type="func" Desc=":   unsigned int" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" DeclLine="236"/>\r
+ <func Header="DRAW_GetTextColor" Icon="3" Type="func" Desc=":   unsigned int" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" DeclLine="254"/>\r
+ <func Header="DRAW_SetTextColor" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" DeclLine="272"/>\r
+ <func Header="DRAW_GetBGndColor" Icon="3" Type="func" Desc=":   unsigned int" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" DeclLine="290"/>\r
+ <func Header="DRAW_SetBGndColor" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" DeclLine="308"/>\r
+ <func Header="DRAW_SetDefaultColor" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" DeclLine="414"/>\r
+ <func Header="DRAW_Line" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" DeclLine="476"/>\r
+ <func Header="DRAW_DisplayStringWithMode" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" DeclLine="129"/>\r
+ <func Header="DRAW_DisplayStringInverted" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" DeclLine="397"/>\r
+ <func Header="DRAW_DisplayString" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" DeclLine="373"/>\r
+ <func Header="DRAW_DisplayTemp" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" DeclLine="437"/>\r
+ <func Header="DRAW_SetImage" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" DeclLine="335"/>\r
+ <func Header="DRAW_Init" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" DeclLine="178"/>\r
+ <variable Header="CharMagniCoeff" Icon="2" Type="variable" Desc=":   unsigned int" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" DeclLine="28" Pointer="No"/>\r
+ <variable Header="BGndColor" Icon="2" Type="variable" Desc=":   unsigned int" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" DeclLine="29" Pointer="No"/>\r
+ <variable Header="TextColor" Icon="2" Type="variable" Desc=":   unsigned int" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" DeclLine="30" Pointer="No"/>\r
+ <variable Header="dummy_var" Icon="2" Type="variable" Desc=":   unsigned char" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\circle.h" DeclLine="77" Pointer="No"/>\r
+ <variable Header="fDisplayTime" Icon="2" Type="variable" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" DeclLine="32" Pointer="No"/>\r
+ <variable Header="Application_Pointer_Mgr" Icon="2" Type="variable" Desc=":    " DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\circle.h" DeclLine="429" Pointer="No"/>\r
+ <variable Header="BatState" Icon="2" Type="variable" Desc=":   unsigned int" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" DeclLine="33" Pointer="No"/>\r
+ <variable Header="OldBatState" Icon="2" Type="variable" Desc=":   unsigned int" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" DeclLine="34" Pointer="No"/>\r
+ <variable Header="OldTHH" Icon="2" Type="variable" Desc=":   unsigned long" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" DeclLine="35" Pointer="No"/>\r
+ <variable Header="OldTMM" Icon="2" Type="variable" Desc=":   unsigned long" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" DeclLine="36" Pointer="No"/>\r
+ <variable Header="OldTSS" Icon="2" Type="variable" Desc=":   unsigned long" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" DeclLine="37" Pointer="No"/>\r
+ <variable Header="OldTemp" Icon="2" Type="variable" Desc=":   unsigned long" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" DeclLine="38" Pointer="No"/>\r
+ <variable Header="xBat" Icon="2" Type="variable" Desc=":   unsigned int" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" DeclLine="39" Pointer="No"/>\r
+ <variable Header="yBat" Icon="2" Type="variable" Desc=":   unsigned int" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" DeclLine="40" Pointer="No"/>\r
+ <variable Header="widthBat" Icon="2" Type="variable" Desc=":   unsigned int" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" DeclLine="41" Pointer="No"/>\r
+ <variable Header="heightBat" Icon="2" Type="variable" Desc=":   unsigned int" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" DeclLine="42" Pointer="No"/>\r
+ <variable Header="UsbState" Icon="2" Type="variable" Desc=":   unsigned char" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" DeclLine="43" Pointer="No"/>\r
+ <variable Header="OldUsbState" Icon="2" Type="variable" Desc=":   unsigned char" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" DeclLine="43" Pointer="No"/>\r
+ <variable Header="rotate_counter" Icon="2" Type="variable" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" DeclLine="47" Pointer="No"/>\r
+ <variable Header="previous_H12" Icon="2" Type="variable" Desc=":   unsigned char" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" DeclLine="48" Pointer="No"/>\r
+ <variable Header="previous_previous_H12" Icon="2" Type="variable" Desc=":   unsigned char" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" DeclLine="49" Pointer="No"/>\r
+ <variable Header="H12" Icon="2" Type="variable" Desc=":   unsigned char" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" DeclLine="50" Pointer="No"/>\r
+ <variable Header="CurrentScreenOrientation" Icon="2" Type="variable" Desc=":   unsigned char" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" DeclLine="51" Pointer="No"/>\r
+ <variable Header="CurrentRotateScreen" Icon="2" Type="variable" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" DeclLine="52" Pointer="No"/>\r
+ <type Header="s32" Icon="1" Type="type" Desc=": long" DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_type.h" DeclLine="28" Pointer="No"/>\r
+ <type Header="s16" Icon="1" Type="type" Desc=": int" DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_type.h" DeclLine="29" Pointer="No"/>\r
+ <type Header="u32" Icon="1" Type="type" Desc=": unsigned long" DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_type.h" DeclLine="36" Pointer="No"/>\r
+ <type Header="u16" Icon="1" Type="type" Desc=": unsigned int" DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_type.h" DeclLine="37" Pointer="No"/>\r
+ <type Header="u8" Icon="1" Type="type" Desc=": unsigned char" DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_type.h" DeclLine="38" Pointer="No"/>\r
+ <type Header="GPIOSpeed_TypeDef" Icon="1" Type="type" Desc=": unsigned char" DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_gpio.h" DeclLine="36" Pointer="No"/>\r
+ <type Header="GPIOMode_TypeDef" Icon="1" Type="type" Desc=": unsigned char" DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_gpio.h" DeclLine="51" Pointer="No"/>\r
+ <type Header="GPIO_InitTypeDef" Icon="1" Type="type" Desc=": struct " DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_gpio.h" DeclLine="64" Pointer="No"/>\r
+ <type Header="SPI_InitTypeDef" Icon="1" Type="type" Desc=": struct " DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_spi.h" DeclLine="42" Pointer="No"/>\r
+ <type Header="Rotate_H12_V_Match_TypeDef" Icon="1" Type="type" Desc=": unsigned char" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\circle.h" DeclLine="101" Pointer="No"/>\r
+ <type Header="tMEMS_Info" Icon="1" Type="type" Desc=": struct " DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\circle.h" DeclLine="124" Pointer="No"/>\r
+ <func Header="MEMS_GetPosition" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" DeclLine="523"/>\r
+ <func Header="MEMS_GetRotation" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" DeclLine="542"/>\r
+ <func Header="MEMS_SetNeutral" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" DeclLine="584"/>\r
+ <func Header="MEMS_GetInfo" Icon="3" Type="func" Desc=":   struct  CODE*" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" DeclLine="603"/>\r
+ <func Header="MEMS_SendByte" Icon="3" Type="func" Desc=":   unsigned char" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" DeclLine="236"/>\r
+ <func Header="MEMS_ChipSelect" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" DeclLine="215"/>\r
+ <func Header="MEMS_ReadID" Icon="3" Type="func" Desc=":   unsigned char" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" DeclLine="482"/>\r
+ <func Header="MEMS_ReadOutXY" Icon="3" Type="func" Desc=":   unsigned long" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" DeclLine="138"/>\r
+ <func Header="MEMS_Handler" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" DeclLine="381"/>\r
+ <func Header="MEMS_Init" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" DeclLine="266"/>\r
+ <variable Header="dummy_var" Icon="2" Type="variable" Desc=":   unsigned char" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\circle.h" DeclLine="77" Pointer="No"/>\r
+ <variable Header="MEMS_Info" Icon="2" Type="variable" Desc=":   struct " DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" DeclLine="37" Pointer="No"/>\r
+ <variable Header="Application_Pointer_Mgr" Icon="2" Type="variable" Desc=":    " DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\circle.h" DeclLine="429" Pointer="No"/>\r
+ <variable Header="TestingActive" Icon="2" Type="variable" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" DeclLine="38" Pointer="No"/>\r
+ <variable Header="StartingFromResetOrShockCounter" Icon="2" Type="variable" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" DeclLine="39" Pointer="No"/>\r
+ <variable Header="TimeCounterForDoubleClick" Icon="2" Type="variable" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" DeclLine="40" Pointer="No"/>\r
+ <variable Header="TimeLastShock" Icon="2" Type="variable" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" DeclLine="41" Pointer="No"/>\r
+ <variable Header="Gradient2" Icon="2" Type="variable" Desc=":   unsigned long" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" DeclLine="44" Pointer="No"/>\r
+ <variable Header="N_filtering" Icon="2" Type="variable" Desc=":   unsigned long" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" DeclLine="47" Pointer="No"/>\r
+ <variable Header="GradX" Icon="2" Type="variable" Desc=":   int" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" DeclLine="50" Pointer="No"/>\r
+ <variable Header="GradY" Icon="2" Type="variable" Desc=":   int" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" DeclLine="51" Pointer="No"/>\r
+ <variable Header="GradZ" Icon="2" Type="variable" Desc=":   int" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" DeclLine="52" Pointer="No"/>\r
+ <variable Header="fMovePtrX" Icon="2" Type="variable" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" DeclLine="59" Pointer="No"/>\r
+ <variable Header="iMovePtrX" Icon="2" Type="variable" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" DeclLine="60" Pointer="No"/>\r
+ <variable Header="tMovePtrX" Icon="2" Type="variable" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" DeclLine="61" Pointer="No"/>\r
+ <variable Header="fMovePtrY" Icon="2" Type="variable" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" DeclLine="62" Pointer="No"/>\r
+ <variable Header="iMovePtrY" Icon="2" Type="variable" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" DeclLine="63" Pointer="No"/>\r
+ <variable Header="tMovePtrY" Icon="2" Type="variable" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" DeclLine="64" Pointer="No"/>\r
+ <variable Header="fMovePtrZ" Icon="2" Type="variable" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" DeclLine="65" Pointer="No"/>\r
+ <variable Header="iMovePtrZ" Icon="2" Type="variable" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" DeclLine="66" Pointer="No"/>\r
+ <variable Header="tMovePtrZ" Icon="2" Type="variable" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" DeclLine="67" Pointer="No"/>\r
+ <variable Header="XInit" Icon="2" Type="variable" Desc=":   int" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" DeclLine="69" Pointer="No"/>\r
+ <variable Header="YInit" Icon="2" Type="variable" Desc=":   int" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" DeclLine="70" Pointer="No"/>\r
+ <variable Header="ZInit" Icon="2" Type="variable" Desc=":   int" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" DeclLine="71" Pointer="No"/>\r
+ <type Header="u32" Icon="1" Type="type" Desc=": unsigned long" DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_type.h" DeclLine="36" Pointer="No"/>\r
+ <type Header="u16" Icon="1" Type="type" Desc=": unsigned int" DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_type.h" DeclLine="37" Pointer="No"/>\r
+ <type Header="u8" Icon="1" Type="type" Desc=": unsigned char" DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_type.h" DeclLine="38" Pointer="No"/>\r
+ <type Header="GPIOSpeed_TypeDef" Icon="1" Type="type" Desc=": unsigned char" DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_gpio.h" DeclLine="36" Pointer="No"/>\r
+ <type Header="GPIOMode_TypeDef" Icon="1" Type="type" Desc=": unsigned char" DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_gpio.h" DeclLine="51" Pointer="No"/>\r
+ <type Header="GPIO_InitTypeDef" Icon="1" Type="type" Desc=": struct " DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_gpio.h" DeclLine="64" Pointer="No"/>\r
+ <type Header="RCC_ClocksTypeDef" Icon="1" Type="type" Desc=": struct " DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_rcc.h" DeclLine="37" Pointer="No"/>\r
+ <type Header="TIM_TimeBaseInitTypeDef" Icon="1" Type="type" Desc=": struct " DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_tim.h" DeclLine="38" Pointer="No"/>\r
+ <type Header="TIM_OCInitTypeDef" Icon="1" Type="type" Desc=": struct " DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_tim.h" DeclLine="47" Pointer="No"/>\r
+ <func Header="BUZZER_GetMode" Icon="3" Type="func" Desc=":   unsigned char" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\buzzer.c" DeclLine="358"/>\r
+ <func Header="BUZZER_SetFrequency" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\buzzer.c" DeclLine="195"/>\r
+ <func Header="PlayMusic" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\buzzer.c" DeclLine="104"/>\r
+ <func Header="BUZZER_SetMode" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\buzzer.c" DeclLine="376"/>\r
+ <func Header="BUZZER_PlayMusic" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\buzzer.c" DeclLine="464"/>\r
+ <func Header="BUZZER_Handler" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\buzzer.c" DeclLine="291"/>\r
+ <func Header="BUZZER_Init" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\buzzer.c" DeclLine="231"/>\r
+ <variable Header="TIM_TimeBaseStructure" Icon="2" Type="variable" Desc=":   struct " DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\buzzer.c" DeclLine="54" Pointer="No"/>\r
+ <variable Header="TIM_OCInitStructure" Icon="2" Type="variable" Desc=":   struct " DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\buzzer.c" DeclLine="55" Pointer="No"/>\r
+ <variable Header="dummy_var" Icon="2" Type="variable" Desc=":   unsigned char" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\circle.h" DeclLine="77" Pointer="No"/>\r
+ <variable Header="Application_Pointer_Mgr" Icon="2" Type="variable" Desc=":    " DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\circle.h" DeclLine="429" Pointer="No"/>\r
+ <variable Header="octave" Icon="2" Type="variable" Desc=":   unsigned char" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\buzzer.c" DeclLine="26" Pointer="No"/>\r
+ <variable Header="note" Icon="2" Type="variable" Desc=":   unsigned char" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\buzzer.c" DeclLine="43" Pointer="No"/>\r
+ <variable Header="buzz_counter" Icon="2" Type="variable" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\buzzer.c" DeclLine="52" Pointer="No"/>\r
+ <variable Header="buzz_in_progress" Icon="2" Type="variable" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\buzzer.c" DeclLine="53" Pointer="No"/>\r
+ <variable Header="CCR_Val" Icon="2" Type="variable" Desc=":   unsigned int" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\buzzer.c" DeclLine="56" Pointer="No"/>\r
+ <variable Header="Buzzer_Mode" Icon="2" Type="variable" Desc=":   unsigned char" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\buzzer.c" DeclLine="57" Pointer="No"/>\r
+ <variable Header="Buzzer_Counter" Icon="2" Type="variable" Desc=":   unsigned long" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\buzzer.c" DeclLine="58" Pointer="No"/>\r
+ <variable Header="CurrentMelody" Icon="2" Type="variable" Desc=":   unsigned char CODE*" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\buzzer.c" DeclLine="61" Pointer="Yes"/>\r
+ <variable Header="CurrentMelodySTART" Icon="2" Type="variable" Desc=":   unsigned char CODE*" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\buzzer.c" DeclLine="62" Pointer="Yes"/>\r
+ <variable Header="DefaultOctave" Icon="2" Type="variable" Desc=":   unsigned char" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\buzzer.c" DeclLine="63" Pointer="No"/>\r
+ <variable Header="DefaultDuration" Icon="2" Type="variable" Desc=":   unsigned char" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\buzzer.c" DeclLine="64" Pointer="No"/>\r
+ <variable Header="DefaultBeats" Icon="2" Type="variable" Desc=":   unsigned int" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\buzzer.c" DeclLine="65" Pointer="No"/>\r
+ <variable Header="Note_Freq" Icon="2" Type="variable" Desc=":   unsigned int[16]" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\buzzer.c" DeclLine="67" Pointer="No"/>\r
+ <type Header="s32" Icon="1" Type="type" Desc=": long" DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_type.h" DeclLine="28" Pointer="No"/>\r
+ <type Header="s16" Icon="1" Type="type" Desc=": int" DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_type.h" DeclLine="29" Pointer="No"/>\r
+ <type Header="u32" Icon="1" Type="type" Desc=": unsigned long" DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_type.h" DeclLine="36" Pointer="No"/>\r
+ <type Header="u16" Icon="1" Type="type" Desc=": unsigned int" DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_type.h" DeclLine="37" Pointer="No"/>\r
+ <type Header="u8" Icon="1" Type="type" Desc=": unsigned char" DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_type.h" DeclLine="38" Pointer="No"/>\r
+ <type Header="tMEMS_Info" Icon="1" Type="type" Desc=": struct " DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\circle.h" DeclLine="124" Pointer="No"/>\r
+ <type Header="tPointer_Info" Icon="1" Type="type" Desc=": struct " DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\circle.h" DeclLine="194" Pointer="No"/>\r
+ <type Header="tAppPtrMgr" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\circle.h" DeclLine="226" Pointer="No"/>\r
+ <func Header="POINTER_SetCurrentPointer" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" DeclLine="351"/>\r
+ <func Header="POINTER_GetCurrentAngleStart" Icon="3" Type="func" Desc=":   unsigned int" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" DeclLine="376"/>\r
+ <func Header="POINTER_SetCurrentAngleStart" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" DeclLine="394"/>\r
+ <func Header="POINTER_GetCurrentSpeedOnAngle" Icon="3" Type="func" Desc=":   unsigned int" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" DeclLine="412"/>\r
+ <func Header="POINTER_SetCurrentSpeedOnAngle" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" DeclLine="430"/>\r
+ <func Header="POINTER_SetCurrentAreaStore" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" DeclLine="453"/>\r
+ <func Header="POINTER_GetMode" Icon="3" Type="func" Desc=":   unsigned char" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" DeclLine="532"/>\r
+ <func Header="POINTER_GetState" Icon="3" Type="func" Desc=":   unsigned char" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" DeclLine="550"/>\r
+ <func Header="POINTER_SetRect" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" DeclLine="573"/>\r
+ <func Header="POINTER_SetRectScreen" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" DeclLine="615"/>\r
+ <func Header="POINTER_GetPos" Icon="3" Type="func" Desc=":   unsigned int" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" DeclLine="634"/>\r
+ <func Header="POINTER_SetPos" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" DeclLine="655"/>\r
+ <func Header="POINTER_SetApplication_Pointer_Mgr" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" DeclLine="845"/>\r
+ <type Header="tAppPtrMgr" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\circle.h" DeclLine="226" Pointer="No"/>\r
+ <func Header="POINTER_SetColor" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" DeclLine="863"/>\r
+ <func Header="POINTER_GetColor" Icon="3" Type="func" Desc=":   unsigned int" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" DeclLine="881"/>\r
+ <func Header="POINTER_GetInfo" Icon="3" Type="func" Desc=":   struct  CODE*" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" DeclLine="899"/>\r
+ <func Header="POINTER_Restore" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" DeclLine="806"/>\r
+ <func Header="POINTER_Draw" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" DeclLine="682"/>\r
+ <func Header="POINTER_Save" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" DeclLine="759"/>\r
+ <func Header="POINTER_SetMode" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" DeclLine="473"/>\r
+ <func Header="POINTER_Init" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" DeclLine="289"/>\r
+ <func Header="POINTER_Handler" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" DeclLine="315"/>\r
+ <variable Header="dummy_var" Icon="2" Type="variable" Desc=":   unsigned char" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\circle.h" DeclLine="77" Pointer="No"/>\r
+ <variable Header="POINTER_Info" Icon="2" Type="variable" Desc=":   struct " DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" DeclLine="58" Pointer="No"/>\r
+ <variable Header="BallPointerBmp" Icon="2" Type="variable" Desc=":   unsigned char[7]" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" DeclLine="39" Pointer="No"/>\r
+ <variable Header="CurrentPointerBmp" Icon="2" Type="variable" Desc=":   unsigned char CODE*" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" DeclLine="44" Pointer="Yes"/>\r
+ <variable Header="CurrentPointerColor" Icon="2" Type="variable" Desc=":   unsigned int" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" DeclLine="50" Pointer="No"/>\r
+ <variable Header="Application_Pointer_Mgr" Icon="2" Type="variable" Desc=":    " DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\circle.h" DeclLine="429" Pointer="No"/>\r
+ <variable Header="locbuf" Icon="2" Type="variable" Desc=":   unsigned char[7]" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" DeclLine="40" Pointer="No"/>\r
+ <variable Header="DefaultAreaStore" Icon="2" Type="variable" Desc=":   unsigned char[98]" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" DeclLine="41" Pointer="No"/>\r
+ <variable Header="CurrentPointerWidth" Icon="2" Type="variable" Desc=":   unsigned char" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" DeclLine="45" Pointer="No"/>\r
+ <variable Header="CurrentPointerHeight" Icon="2" Type="variable" Desc=":   unsigned char" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" DeclLine="46" Pointer="No"/>\r
+ <variable Header="CurrentSpeedOnAngle" Icon="2" Type="variable" Desc=":   unsigned int" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" DeclLine="47" Pointer="No"/>\r
+ <variable Header="CurrentAngleStart" Icon="2" Type="variable" Desc=":   unsigned long" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" DeclLine="48" Pointer="No"/>\r
+ <variable Header="ptrAreaStore" Icon="2" Type="variable" Desc=":   unsigned char CODE*" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" DeclLine="49" Pointer="Yes"/>\r
+ <variable Header="Pointer_Mode" Icon="2" Type="variable" Desc=":   unsigned char" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" DeclLine="51" Pointer="No"/>\r
+ <variable Header="Pointer_State" Icon="2" Type="variable" Desc=":   unsigned char" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" DeclLine="52" Pointer="No"/>\r
+ <variable Header="OUT_X" Icon="2" Type="variable" Desc=":   int" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" DeclLine="54" Pointer="No"/>\r
+ <variable Header="OUT_Y" Icon="2" Type="variable" Desc=":   int" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" DeclLine="55" Pointer="No"/>\r
+ <type Header="portTickType" Icon="1" Type="type" Desc=": unsigned long" DeclFile="C:\E\Dev\FreeRTOS\Source\portable\GCC\ARM_CM3\portmacro.h" DeclLine="74" Pointer="No"/>\r
+ <type Header="xQueueHandle" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Source\include\Queue.h" DeclLine="43" Pointer="No"/>\r
+ <type Header="xLCDMessage" Icon="1" Type="type" Desc=": struct " DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\main.c" DeclLine="158" Pointer="No"/>\r
+ <func Header="starting_delay" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\main.c" DeclLine="460"/>\r
+ <func Header="vApplicationTickHook" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\main.c" DeclLine="358"/>\r
+ <func Header="main" Icon="3" Type="func" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\main.c" DeclLine="215"/>\r
+ <func Header="prvFlashTask" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\main.c" DeclLine="443"/>\r
+ <func Header="prvLCDTask" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\main.c" DeclLine="251"/>\r
+ <func Header="prvCheckTask" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\main.c" DeclLine="301"/>\r
+ <variable Header="dummy_var" Icon="2" Type="variable" Desc=":   unsigned char" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\circle.h" DeclLine="77" Pointer="No"/>\r
+ <variable Header="Application_Pointer_Mgr" Icon="2" Type="variable" Desc=":    " DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\circle.h" DeclLine="429" Pointer="No"/>\r
+ <variable Header="pucImage" Icon="2" Type="variable" Desc=":   unsigned int[3312]" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\bitmap.h" DeclLine="42" Pointer="No"/>\r
+ <type Header="xQueueHandle" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Source\include\Queue.h" DeclLine="43" Pointer="No"/>\r
+ <variable Header="xLCDQueue" Icon="2" Type="variable" Desc=":    " DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\main.c" DeclLine="210" Pointer="No"/>\r
+ <type Header="u16" Icon="1" Type="type" Desc=": unsigned int" DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_type.h" DeclLine="37" Pointer="No"/>\r
+ <type Header="GPIOSpeed_TypeDef" Icon="1" Type="type" Desc=": unsigned char" DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_gpio.h" DeclLine="36" Pointer="No"/>\r
+ <type Header="GPIOMode_TypeDef" Icon="1" Type="type" Desc=": unsigned char" DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_gpio.h" DeclLine="51" Pointer="No"/>\r
+ <type Header="GPIO_InitTypeDef" Icon="1" Type="type" Desc=": struct " DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_gpio.h" DeclLine="64" Pointer="No"/>\r
+ <func Header="vParTestToggleLED" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ParTest\ParTest.c" DeclLine="97"/>\r
+ <func Header="vParTestSetLED" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ParTest\ParTest.c" DeclLine="70"/>\r
+ <func Header="vParTestInitialise" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ParTest\ParTest.c" DeclLine="54"/>\r
+ <variable Header="usOutputValue" Icon="2" Type="variable" Desc=":   unsigned int" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ParTest\ParTest.c" DeclLine="49" Pointer="No"/>\r
+ <type Header="u16" Icon="1" Type="type" Desc=": unsigned int" DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_type.h" DeclLine="37" Pointer="No"/>\r
+ <type Header="u8" Icon="1" Type="type" Desc=": unsigned char" DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_type.h" DeclLine="38" Pointer="No"/>\r
+ <type Header="FunctionalState" Icon="1" Type="type" Desc=": unsigned char" DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_type.h" DeclLine="56" Pointer="No"/>\r
+ <type Header="NVIC_InitTypeDef" Icon="1" Type="type" Desc=": struct " DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_nvic.h" DeclLine="37" Pointer="No"/>\r
+ <type Header="TIM_TimeBaseInitTypeDef" Icon="1" Type="type" Desc=": struct " DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stm32f10x_tim.h" DeclLine="38" Pointer="No"/>\r
+ <func Header="vTimer2IntHandler" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\timertest.c" DeclLine="127"/>\r
+ <func Header="vSetupTimerTest" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\timertest.c" DeclLine="81"/>\r
+ <variable Header="usMaxJitter" Icon="2" Type="variable" Desc=":   unsigned int" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\timertest.c" DeclLine="76" Pointer="No"/>\r
+ <type Header="__gnuc_va_list" Icon="1" Type="type" Desc=":  " DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stdarg.h" DeclLine="43" Pointer="No"/>\r
+ <type Header="__gnuc_va_list" Icon="1" Type="type" Desc=":  " DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stdarg.h" DeclLine="43" Pointer="No"/>\r
+ <type Header="va_list" Icon="1" Type="type" Desc=":  " DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stdarg.h" DeclLine="110" Pointer="No"/>\r
+ <func Header="printchar" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\printf-stdarg.c" DeclLine="32"/>\r
+ <func Header="prints" Icon="3" Type="func" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\printf-stdarg.c" DeclLine="46"/>\r
+ <func Header="printi" Icon="3" Type="func" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\printf-stdarg.c" DeclLine="79"/>\r
+ <func Header="print" Icon="3" Type="func" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\printf-stdarg.c" DeclLine="122"/>\r
+ <type Header="__gnuc_va_list" Icon="1" Type="type" Desc=":  " DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stdarg.h" DeclLine="43" Pointer="No"/>\r
+ <type Header="va_list" Icon="1" Type="type" Desc=":  " DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stdarg.h" DeclLine="110" Pointer="No"/>\r
+ <func Header="snprintf" Icon="3" Type="func" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\printf-stdarg.c" DeclLine="203"/>\r
+ <type Header="__gnuc_va_list" Icon="1" Type="type" Desc=":  " DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stdarg.h" DeclLine="43" Pointer="No"/>\r
+ <type Header="va_list" Icon="1" Type="type" Desc=":  " DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stdarg.h" DeclLine="110" Pointer="No"/>\r
+ <func Header="sprintf" Icon="3" Type="func" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\printf-stdarg.c" DeclLine="194"/>\r
+ <type Header="__gnuc_va_list" Icon="1" Type="type" Desc=":  " DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stdarg.h" DeclLine="43" Pointer="No"/>\r
+ <type Header="va_list" Icon="1" Type="type" Desc=":  " DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stdarg.h" DeclLine="110" Pointer="No"/>\r
+ <func Header="printf" Icon="3" Type="func" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\printf-stdarg.c" DeclLine="186"/>\r
+ <type Header="__gnuc_va_list" Icon="1" Type="type" Desc=":  " DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stdarg.h" DeclLine="43" Pointer="No"/>\r
+ <type Header="va_list" Icon="1" Type="type" Desc=":  " DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stdarg.h" DeclLine="110" Pointer="No"/>\r
+ <type Header="xTaskHandle" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Source\include\task.h" DeclLine="68" Pointer="No"/>\r
+ <type Header="xQueueHandle" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Source\include\queue.h" DeclLine="43" Pointer="No"/>\r
+ <type Header="xQueueHandle" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Source\include\queue.h" DeclLine="43" Pointer="No"/>\r
+ <type Header="xSemaphoreHandle" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Source\include\semphr.h" DeclLine="42" Pointer="No"/>\r
+ <func Header="xAreGenericQueueTasksStillRunning" Icon="3" Type="func" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\GenQTest.c" DeclLine="513"/>\r
+ <func Header="vStartGenericQueueTasks" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\GenQTest.c" DeclLine="116"/>\r
+ <type Header="xQueueHandle" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Source\include\queue.h" DeclLine="43" Pointer="No"/>\r
+ <type Header="xQueueHandle" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Source\include\queue.h" DeclLine="43" Pointer="No"/>\r
+ <type Header="xSemaphoreHandle" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Source\include\semphr.h" DeclLine="42" Pointer="No"/>\r
+ <func Header="prvMediumPriorityMutexTask" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\GenQTest.c" DeclLine="468"/>\r
+ <func Header="prvHighPriorityMutexTask" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\GenQTest.c" DeclLine="484"/>\r
+ <type Header="xQueueHandle" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Source\include\queue.h" DeclLine="43" Pointer="No"/>\r
+ <type Header="xSemaphoreHandle" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Source\include\semphr.h" DeclLine="42" Pointer="No"/>\r
+ <func Header="prvLowPriorityMutexTask" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\GenQTest.c" DeclLine="370"/>\r
+ <type Header="xQueueHandle" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Source\include\queue.h" DeclLine="43" Pointer="No"/>\r
+ <type Header="xSemaphoreHandle" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Source\include\semphr.h" DeclLine="42" Pointer="No"/>\r
+ <func Header="prvSendFrontAndBackTest" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\GenQTest.c" DeclLine="142"/>\r
+ <type Header="xQueueHandle" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Source\include\queue.h" DeclLine="43" Pointer="No"/>\r
+ <variable Header="xErrorDetected" Icon="2" Type="variable" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\GenQTest.c" DeclLine="99" Pointer="No"/>\r
+ <variable Header="ulLoopCounter" Icon="2" Type="variable" Desc=":   unsigned long" DeclFile="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\GenQTest.c" DeclLine="103" Pointer="No"/>\r
+ <variable Header="ulLoopCounter2" Icon="2" Type="variable" Desc=":   unsigned long" DeclFile="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\GenQTest.c" DeclLine="104" Pointer="No"/>\r
+ <variable Header="ulGuardedVariable" Icon="2" Type="variable" Desc=":   unsigned long" DeclFile="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\GenQTest.c" DeclLine="107" Pointer="No"/>\r
+ <type Header="xTaskHandle" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Source\include\task.h" DeclLine="68" Pointer="No"/>\r
+ <variable Header="xHighPriorityMutexTask" Icon="2" Type="variable" Desc=":    " DeclFile="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\GenQTest.c" DeclLine="111" Pointer="No"/>\r
+ <type Header="xTaskHandle" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Source\include\task.h" DeclLine="68" Pointer="No"/>\r
+ <variable Header="xMediumPriorityMutexTask" Icon="2" Type="variable" Desc=":    " DeclFile="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\GenQTest.c" DeclLine="111" Pointer="No"/>\r
+ <type Header="portTickType" Icon="1" Type="type" Desc=": unsigned long" DeclFile="C:\E\Dev\FreeRTOS\Source\portable\GCC\ARM_CM3\portmacro.h" DeclLine="74" Pointer="No"/>\r
+ <type Header="xQueueHandle" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Source\include\queue.h" DeclLine="43" Pointer="No"/>\r
+ <type Header="xQueueHandle" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Source\include\queue.h" DeclLine="43" Pointer="No"/>\r
+ <type Header="xBlockingQueueParameters" Icon="1" Type="type" Desc=": struct BLOCKING_QUEUE_PARAMETERS" DeclFile="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\BlockQ.c" DeclLine="89" Pointer="No"/>\r
+ <func Header="xAreBlockingQueuesStillRunning" Icon="3" Type="func" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\BlockQ.c" DeclLine="261"/>\r
+ <func Header="vStartBlockingQueueTasks" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\BlockQ.c" DeclLine="110"/>\r
+ <func Header="vBlockingQueueProducer" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\BlockQ.c" DeclLine="192"/>\r
+ <func Header="vBlockingQueueConsumer" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\BlockQ.c" DeclLine="223"/>\r
+ <variable Header="sBlockingConsumerCount" Icon="2" Type="variable" Desc=":   int[3]" DeclFile="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\BlockQ.c" DeclLine="101" Pointer="No"/>\r
+ <variable Header="sBlockingProducerCount" Icon="2" Type="variable" Desc=":   int[3]" DeclFile="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\BlockQ.c" DeclLine="105" Pointer="No"/>\r
+ <type Header="portTickType" Icon="1" Type="type" Desc=": unsigned long" DeclFile="C:\E\Dev\FreeRTOS\Source\portable\GCC\ARM_CM3\portmacro.h" DeclLine="74" Pointer="No"/>\r
+ <type Header="xTaskHandle" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Source\include\task.h" DeclLine="68" Pointer="No"/>\r
+ <type Header="xQueueHandle" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Source\include\queue.h" DeclLine="43" Pointer="No"/>\r
+ <func Header="xAreBlockTimeTestTasksStillRunning" Icon="3" Type="func" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\blocktim.c" DeclLine="449"/>\r
+ <func Header="vCreateBlockTimeTasks" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\blocktim.c" DeclLine="86"/>\r
+ <func Header="vSecondaryBlockTimeTestTask" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\blocktim.c" DeclLine="353"/>\r
+ <func Header="vPrimaryBlockTimeTestTask" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\blocktim.c" DeclLine="97"/>\r
+ <type Header="xQueueHandle" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Source\include\queue.h" DeclLine="43" Pointer="No"/>\r
+ <variable Header="xTestQueue" Icon="2" Type="variable" Desc=":    " DeclFile="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\blocktim.c" DeclLine="65" Pointer="No"/>\r
+ <type Header="xTaskHandle" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Source\include\task.h" DeclLine="68" Pointer="No"/>\r
+ <variable Header="xSecondary" Icon="2" Type="variable" Desc=":    " DeclFile="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\blocktim.c" DeclLine="69" Pointer="No"/>\r
+ <variable Header="xPrimaryCycles" Icon="2" Type="variable" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\blocktim.c" DeclLine="72" Pointer="No"/>\r
+ <variable Header="xSecondaryCycles" Icon="2" Type="variable" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\blocktim.c" DeclLine="72" Pointer="No"/>\r
+ <variable Header="xErrorOccurred" Icon="2" Type="variable" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\blocktim.c" DeclLine="73" Pointer="No"/>\r
+ <variable Header="xRunIndicator" Icon="2" Type="variable" Desc=":   unsigned long" DeclFile="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\blocktim.c" DeclLine="77" Pointer="No"/>\r
+ <type Header="xTaskHandle" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Source\include\task.h" DeclLine="68" Pointer="No"/>\r
+ <type Header="xQueueHandle" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Source\include\queue.h" DeclLine="43" Pointer="No"/>\r
+ <func Header="xAreQueuePeekTasksStillRunning" Icon="3" Type="func" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\QPeek.c" DeclLine="404"/>\r
+ <func Header="vStartQueuePeekTasks" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\QPeek.c" DeclLine="91"/>\r
+ <type Header="xQueueHandle" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Source\include\queue.h" DeclLine="43" Pointer="No"/>\r
+ <func Header="prvMediumPriorityPeekTask" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\QPeek.c" DeclLine="272"/>\r
+ <type Header="xQueueHandle" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Source\include\queue.h" DeclLine="43" Pointer="No"/>\r
+ <func Header="prvHighPriorityPeekTask" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\QPeek.c" DeclLine="217"/>\r
+ <type Header="xQueueHandle" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Source\include\queue.h" DeclLine="43" Pointer="No"/>\r
+ <func Header="prvHighestPriorityPeekTask" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\QPeek.c" DeclLine="108"/>\r
+ <type Header="xQueueHandle" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Source\include\queue.h" DeclLine="43" Pointer="No"/>\r
+ <func Header="prvLowPriorityPeekTask" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\QPeek.c" DeclLine="313"/>\r
+ <type Header="xQueueHandle" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Source\include\queue.h" DeclLine="43" Pointer="No"/>\r
+ <variable Header="xErrorDetected" Icon="2" Type="variable" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\QPeek.c" DeclLine="80" Pointer="No"/>\r
+ <variable Header="ulLoopCounter" Icon="2" Type="variable" Desc=":   unsigned long" DeclFile="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\QPeek.c" DeclLine="84" Pointer="No"/>\r
+ <type Header="xTaskHandle" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Source\include\task.h" DeclLine="68" Pointer="No"/>\r
+ <variable Header="xMediumPriorityTask" Icon="2" Type="variable" Desc=":    " DeclFile="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\QPeek.c" DeclLine="87" Pointer="No"/>\r
+ <type Header="xTaskHandle" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Source\include\task.h" DeclLine="68" Pointer="No"/>\r
+ <variable Header="xHighPriorityTask" Icon="2" Type="variable" Desc=":    " DeclFile="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\QPeek.c" DeclLine="87" Pointer="No"/>\r
+ <type Header="xTaskHandle" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Source\include\task.h" DeclLine="68" Pointer="No"/>\r
+ <variable Header="xHighestPriorityTask" Icon="2" Type="variable" Desc=":    " DeclFile="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\QPeek.c" DeclLine="87" Pointer="No"/>\r
+ <type Header="xQueueHandle" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Source\include\queue.h" DeclLine="43" Pointer="No"/>\r
+ <func Header="xArePollingQueuesStillRunning" Icon="3" Type="func" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\PollQ.c" DeclLine="197"/>\r
+ <func Header="vStartPolledQueueTasks" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\PollQ.c" DeclLine="98"/>\r
+ <type Header="xQueueHandle" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Source\include\queue.h" DeclLine="43" Pointer="No"/>\r
+ <func Header="vPolledQueueProducer" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\PollQ.c" DeclLine="111"/>\r
+ <func Header="vPolledQueueConsumer" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\PollQ.c" DeclLine="150"/>\r
+ <variable Header="xPollingConsumerCount" Icon="2" Type="variable" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\PollQ.c" DeclLine="93" Pointer="No"/>\r
+ <variable Header="xPollingProducerCount" Icon="2" Type="variable" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\PollQ.c" DeclLine="93" Pointer="No"/>\r
+ <type Header="pdTASK_CODE" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Source\include\projdefs.h" DeclLine="41" Pointer="No"/>\r
+ <type Header="portTickType" Icon="1" Type="type" Desc=": unsigned long" DeclFile="C:\E\Dev\FreeRTOS\Source\portable\GCC\ARM_CM3\portmacro.h" DeclLine="74" Pointer="No"/>\r
+ <type Header="xListItem" Icon="1" Type="type" Desc=": struct xLIST_ITEM" DeclFile="C:\E\Dev\FreeRTOS\Source\include\list.h" DeclLine="89" Pointer="No"/>\r
+ <type Header="xMiniListItem" Icon="1" Type="type" Desc=": struct xMINI_LIST_ITEM" DeclFile="C:\E\Dev\FreeRTOS\Source\include\list.h" DeclLine="97" Pointer="No"/>\r
+ <type Header="xList" Icon="1" Type="type" Desc=": struct xLIST" DeclFile="C:\E\Dev\FreeRTOS\Source\include\list.h" DeclLine="107" Pointer="No"/>\r
+ <type Header="xTaskHandle" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Source\include\task.h" DeclLine="68" Pointer="No"/>\r
+ <type Header="xTimeOutType" Icon="1" Type="type" Desc=": struct xTIME_OUT" DeclFile="C:\E\Dev\FreeRTOS\Source\include\task.h" DeclLine="77" Pointer="No"/>\r
+ <type Header="tskTCB" Icon="1" Type="type" Desc=": struct tskTaskControlBlock" DeclFile="C:\E\Dev\FreeRTOS\Source\tasks.c" DeclLine="271" Pointer="No"/>\r
+ <func Header="prvIsTaskSuspended" Icon="3" Type="func" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Source\tasks.c" DeclLine="1004"/>\r
+ <func Header="vTaskSwitchContext" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Source\tasks.c" DeclLine="1476"/>\r
+ <func Header="vTaskSetTimeOutState" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Source\tasks.c" DeclLine="1616"/>\r
+ <func Header="xTaskCheckForTimeOut" Icon="3" Type="func" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Source\tasks.c" DeclLine="1623"/>\r
+ <func Header="vTaskMissedYield" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Source\tasks.c" DeclLine="1662"/>\r
+ <func Header="vTaskPriorityDisinherit" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Source\tasks.c" DeclLine="2011"/>\r
+ <type Header="xTaskHandle" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Source\include\task.h" DeclLine="68" Pointer="No"/>\r
+ <type Header="xTaskHandle" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Source\include\task.h" DeclLine="68" Pointer="No"/>\r
+ <type Header="xTaskHandle" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Source\include\task.h" DeclLine="68" Pointer="No"/>\r
+ <func Header="vTaskPriorityInherit" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Source\tasks.c" DeclLine="1980"/>\r
+ <type Header="xTaskHandle" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Source\include\task.h" DeclLine="68" Pointer="No"/>\r
+ <func Header="xTaskRemoveFromEventList" Icon="3" Type="func" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Source\tasks.c" DeclLine="1569"/>\r
+ <func Header="xTaskResumeFromISR" Icon="3" Type="func" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Source\tasks.c" DeclLine="1074"/>\r
+ <type Header="xTaskHandle" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Source\include\task.h" DeclLine="68" Pointer="No"/>\r
+ <type Header="xTaskHandle" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Source\include\task.h" DeclLine="68" Pointer="No"/>\r
+ <func Header="xTaskGetCurrentTaskHandle" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Source\tasks.c" DeclLine="1934"/>\r
+ <type Header="xTaskHandle" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Source\include\task.h" DeclLine="68" Pointer="No"/>\r
+ <func Header="uxTaskGetNumberOfTasks" Icon="3" Type="func" Desc=":   unsigned long" DeclFile="C:\E\Dev\FreeRTOS\Source\tasks.c" DeclLine="1260"/>\r
+ <func Header="xTaskGetTickCount" Icon="3" Type="func" Desc=":   unsigned long" DeclFile="C:\E\Dev\FreeRTOS\Source\tasks.c" DeclLine="1245"/>\r
+ <func Header="vTaskSuspendAll" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Source\tasks.c" DeclLine="1159"/>\r
+ <func Header="uxTaskPriorityGet" Icon="3" Type="func" Desc=":   unsigned long" DeclFile="C:\E\Dev\FreeRTOS\Source\tasks.c" DeclLine="843"/>\r
+ <type Header="xTaskHandle" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Source\include\task.h" DeclLine="68" Pointer="No"/>\r
+ <func Header="vTaskPlaceOnEventList" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Source\tasks.c" DeclLine="1499"/>\r
+ <func Header="vTaskIncrementTick" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Source\tasks.c" DeclLine="1369"/>\r
+ <func Header="xTaskResumeAll" Icon="3" Type="func" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Source\tasks.c" DeclLine="1167"/>\r
+ <func Header="vTaskResume" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Source\tasks.c" DeclLine="1034"/>\r
+ <type Header="xTaskHandle" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Source\include\task.h" DeclLine="68" Pointer="No"/>\r
+ <func Header="vTaskSuspend" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Source\tasks.c" DeclLine="963"/>\r
+ <type Header="xTaskHandle" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Source\include\task.h" DeclLine="68" Pointer="No"/>\r
+ <func Header="vTaskPrioritySet" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Source\tasks.c" DeclLine="865"/>\r
+ <type Header="xTaskHandle" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Source\include\task.h" DeclLine="68" Pointer="No"/>\r
+ <func Header="vTaskDelay" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Source\tasks.c" DeclLine="784"/>\r
+ <func Header="vTaskDelayUntil" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Source\tasks.c" DeclLine="709"/>\r
+ <func Header="vTaskDelete" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Source\tasks.c" DeclLine="649"/>\r
+ <type Header="xTaskHandle" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Source\include\task.h" DeclLine="68" Pointer="No"/>\r
+ <func Header="vTaskEndScheduler" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Source\tasks.c" DeclLine="1148"/>\r
+ <func Header="prvIdleTask" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Source\tasks.c" DeclLine="1678"/>\r
+ <func Header="xTaskCreate" Icon="3" Type="func" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Source\tasks.c" DeclLine="528"/>\r
+ <type Header="pdTASK_CODE" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Source\include\projdefs.h" DeclLine="41" Pointer="No"/>\r
+ <type Header="xTaskHandle" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Source\include\task.h" DeclLine="68" Pointer="No"/>\r
+ <func Header="vTaskStartScheduler" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Source\tasks.c" DeclLine="1111"/>\r
+ <variable Header="pxReadyTasksLists" Icon="2" Type="variable" Desc=":   struct xLIST[5]" DeclFile="C:\E\Dev\FreeRTOS\Source\tasks.c" DeclLine="279" Pointer="No"/>\r
+ <variable Header="xDelayedTaskList1" Icon="2" Type="variable" Desc=":   struct xLIST" DeclFile="C:\E\Dev\FreeRTOS\Source\tasks.c" DeclLine="280" Pointer="No"/>\r
+ <variable Header="xDelayedTaskList2" Icon="2" Type="variable" Desc=":   struct xLIST" DeclFile="C:\E\Dev\FreeRTOS\Source\tasks.c" DeclLine="281" Pointer="No"/>\r
+ <variable Header="pxDelayedTaskList" Icon="2" Type="variable" Desc=":   struct xLIST CODE*" DeclFile="C:\E\Dev\FreeRTOS\Source\tasks.c" DeclLine="282" Pointer="Yes"/>\r
+ <variable Header="pxOverflowDelayedTaskList" Icon="2" Type="variable" Desc=":   struct xLIST CODE*" DeclFile="C:\E\Dev\FreeRTOS\Source\tasks.c" DeclLine="283" Pointer="Yes"/>\r
+ <variable Header="xPendingReadyList" Icon="2" Type="variable" Desc=":   struct xLIST" DeclFile="C:\E\Dev\FreeRTOS\Source\tasks.c" DeclLine="284" Pointer="No"/>\r
+ <variable Header="xTasksWaitingTermination" Icon="2" Type="variable" Desc=":   struct xLIST" DeclFile="C:\E\Dev\FreeRTOS\Source\tasks.c" DeclLine="288" Pointer="No"/>\r
+ <variable Header="uxTasksDeleted" Icon="2" Type="variable" Desc=":   unsigned long" DeclFile="C:\E\Dev\FreeRTOS\Source\tasks.c" DeclLine="289" Pointer="No"/>\r
+ <variable Header="xSuspendedTaskList" Icon="2" Type="variable" Desc=":   struct xLIST" DeclFile="C:\E\Dev\FreeRTOS\Source\tasks.c" DeclLine="295" Pointer="No"/>\r
+ <variable Header="uxCurrentNumberOfTasks" Icon="2" Type="variable" Desc=":   unsigned long" DeclFile="C:\E\Dev\FreeRTOS\Source\tasks.c" DeclLine="300" Pointer="No"/>\r
+ <variable Header="xTickCount" Icon="2" Type="variable" Desc=":   unsigned long" DeclFile="C:\E\Dev\FreeRTOS\Source\tasks.c" DeclLine="301" Pointer="No"/>\r
+ <variable Header="uxTopUsedPriority" Icon="2" Type="variable" Desc=":   unsigned long" DeclFile="C:\E\Dev\FreeRTOS\Source\tasks.c" DeclLine="302" Pointer="No"/>\r
+ <variable Header="uxTopReadyPriority" Icon="2" Type="variable" Desc=":   unsigned long" DeclFile="C:\E\Dev\FreeRTOS\Source\tasks.c" DeclLine="303" Pointer="No"/>\r
+ <variable Header="xSchedulerRunning" Icon="2" Type="variable" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Source\tasks.c" DeclLine="304" Pointer="No"/>\r
+ <variable Header="uxSchedulerSuspended" Icon="2" Type="variable" Desc=":   unsigned long" DeclFile="C:\E\Dev\FreeRTOS\Source\tasks.c" DeclLine="305" Pointer="No"/>\r
+ <variable Header="uxMissedTicks" Icon="2" Type="variable" Desc=":   unsigned long" DeclFile="C:\E\Dev\FreeRTOS\Source\tasks.c" DeclLine="306" Pointer="No"/>\r
+ <variable Header="xMissedYield" Icon="2" Type="variable" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Source\tasks.c" DeclLine="307" Pointer="No"/>\r
+ <variable Header="xNumOfOverflows" Icon="2" Type="variable" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Source\tasks.c" DeclLine="308" Pointer="No"/>\r
+ <variable Header="pxCurrentTCB" Icon="2" Type="variable" Desc=":   struct tskTaskControlBlock CODE*" DeclFile="C:\E\Dev\FreeRTOS\Source\tasks.c" DeclLine="275" Pointer="Yes"/>\r
+ <type Header="portTickType" Icon="1" Type="type" Desc=": unsigned long" DeclFile="C:\E\Dev\FreeRTOS\Source\portable\GCC\ARM_CM3\portmacro.h" DeclLine="74" Pointer="No"/>\r
+ <type Header="xListItem" Icon="1" Type="type" Desc=": struct xLIST_ITEM" DeclFile="C:\E\Dev\FreeRTOS\Source\include\list.h" DeclLine="89" Pointer="No"/>\r
+ <type Header="xMiniListItem" Icon="1" Type="type" Desc=": struct xMINI_LIST_ITEM" DeclFile="C:\E\Dev\FreeRTOS\Source\include\list.h" DeclLine="97" Pointer="No"/>\r
+ <type Header="xList" Icon="1" Type="type" Desc=": struct xLIST" DeclFile="C:\E\Dev\FreeRTOS\Source\include\list.h" DeclLine="107" Pointer="No"/>\r
+ <func Header="vListInitialise" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Source\list.c" DeclLine="94"/>\r
+ <func Header="vListInitialiseItem" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Source\list.c" DeclLine="114"/>\r
+ <func Header="vListInsertEnd" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Source\list.c" DeclLine="121"/>\r
+ <func Header="vListInsert" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Source\list.c" DeclLine="144"/>\r
+ <func Header="vListRemove" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Source\list.c" DeclLine="185"/>\r
+ <type Header="size_t" Icon="1" Type="type" Desc=": unsigned long" DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stddef.h" DeclLine="213" Pointer="No"/>\r
+ <type Header="portTickType" Icon="1" Type="type" Desc=": unsigned long" DeclFile="C:\E\Dev\FreeRTOS\Source\portable\GCC\ARM_CM3\portmacro.h" DeclLine="74" Pointer="No"/>\r
+ <type Header="xListItem" Icon="1" Type="type" Desc=": struct xLIST_ITEM" DeclFile="C:\E\Dev\FreeRTOS\Source\include\list.h" DeclLine="89" Pointer="No"/>\r
+ <type Header="xMiniListItem" Icon="1" Type="type" Desc=": struct xMINI_LIST_ITEM" DeclFile="C:\E\Dev\FreeRTOS\Source\include\list.h" DeclLine="97" Pointer="No"/>\r
+ <type Header="xList" Icon="1" Type="type" Desc=": struct xLIST" DeclFile="C:\E\Dev\FreeRTOS\Source\include\list.h" DeclLine="107" Pointer="No"/>\r
+ <type Header="xTimeOutType" Icon="1" Type="type" Desc=": struct xTIME_OUT" DeclFile="C:\E\Dev\FreeRTOS\Source\include\task.h" DeclLine="77" Pointer="No"/>\r
+ <type Header="xQUEUE" Icon="1" Type="type" Desc=": struct QueueDefinition" DeclFile="C:\E\Dev\FreeRTOS\Source\queue.c" DeclLine="124" Pointer="No"/>\r
+ <type Header="xQueueHandle" Icon="1" Type="type" Desc=": struct QueueDefinition CODE*" DeclFile="C:\E\Dev\FreeRTOS\Source\queue.c" DeclLine="132" Pointer="Yes"/>\r
+ <func Header="vQueueDelete" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Source\queue.c" DeclLine="713"/>\r
+ <func Header="uxQueueMessagesWaiting" Icon="3" Type="func" Desc=":   unsigned long" DeclFile="C:\E\Dev\FreeRTOS\Source\queue.c" DeclLine="701"/>\r
+ <func Header="prvCopyDataFromQueue" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Source\queue.c" DeclLine="757"/>\r
+ <func Header="xQueueReceiveFromISR" Icon="3" Type="func" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Source\queue.c" DeclLine="653"/>\r
+ <func Header="prvUnlockQueue" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Source\queue.c" DeclLine="771"/>\r
+ <func Header="xQueueGenericReceive" Icon="3" Type="func" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Source\queue.c" DeclLine="519"/>\r
+ <func Header="prvCopyDataToQueue" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Source\queue.c" DeclLine="720"/>\r
+ <func Header="xQueueGenericSendFromISR" Icon="3" Type="func" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Source\queue.c" DeclLine="477"/>\r
+ <func Header="xQueueGenericSend" Icon="3" Type="func" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Source\queue.c" DeclLine="300"/>\r
+ <func Header="xQueueCreateMutex" Icon="3" Type="func" Desc=":   struct QueueDefinition CODE*" DeclFile="C:\E\Dev\FreeRTOS\Source\queue.c" DeclLine="260"/>\r
+ <func Header="xQueueCreate" Icon="3" Type="func" Desc=":   struct QueueDefinition CODE*" DeclFile="C:\E\Dev\FreeRTOS\Source\queue.c" DeclLine="210"/>\r
+ <type Header="pdTASK_CODE" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Source\include\projdefs.h" DeclLine="41" Pointer="No"/>\r
+ <func Header="pxPortInitialiseStack" Icon="3" Type="func" Desc=":   unsigned long CODE*" DeclFile="C:\E\Dev\FreeRTOS\Source\portable\GCC\ARM_CM3\port.c" DeclLine="111"/>\r
+ <type Header="pdTASK_CODE" Icon="1" Type="type" Desc=":  " DeclFile="C:\E\Dev\FreeRTOS\Source\include\projdefs.h" DeclLine="41" Pointer="No"/>\r
+ <func Header="prvSetPSP" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Source\portable\GCC\ARM_CM3\port.c" DeclLine="129"/>\r
+ <func Header="prvSetMSP" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Source\portable\GCC\ARM_CM3\port.c" DeclLine="136"/>\r
+ <func Header="vPortEndScheduler" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Source\portable\GCC\ARM_CM3\port.c" DeclLine="169"/>\r
+ <func Header="vPortYieldFromISR" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Source\portable\GCC\ARM_CM3\port.c" DeclLine="176"/>\r
+ <func Header="vPortEnterCritical" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Source\portable\GCC\ARM_CM3\port.c" DeclLine="187"/>\r
+ <func Header="vPortExitCritical" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Source\portable\GCC\ARM_CM3\port.c" DeclLine="194"/>\r
+ <func Header="xPortPendSVHandler" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Source\portable\GCC\ARM_CM3\port.c" DeclLine="204"/>\r
+ <func Header="xPortSysTickHandler" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Source\portable\GCC\ARM_CM3\port.c" DeclLine="251"/>\r
+ <func Header="xPortStartScheduler" Icon="3" Type="func" Desc=":   long" DeclFile="C:\E\Dev\FreeRTOS\Source\portable\GCC\ARM_CM3\port.c" DeclLine="146"/>\r
+ <func Header="vPortIncrementTick" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Source\portable\GCC\ARM_CM3\port.c" DeclLine="317"/>\r
+ <func Header="vPortSwitchContext" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Source\portable\GCC\ARM_CM3\port.c" DeclLine="309"/>\r
+ <variable Header="ulKernelPriority" Icon="2" Type="variable" Desc=":   unsigned long" DeclFile="C:\E\Dev\FreeRTOS\Source\portable\GCC\ARM_CM3\port.c" DeclLine="82" Pointer="No"/>\r
+ <variable Header="uxCriticalNesting" Icon="2" Type="variable" Desc=":   unsigned long" DeclFile="C:\E\Dev\FreeRTOS\Source\portable\GCC\ARM_CM3\port.c" DeclLine="86" Pointer="No"/>\r
+ <type Header="size_t" Icon="1" Type="type" Desc=": unsigned long" DeclFile="C:\devtools\Raisonance\Ride\Lib\ARM\include\stddef.h" DeclLine="213" Pointer="No"/>\r
+ <type Header="xBlockLink" Icon="1" Type="type" Desc=": struct A_BLOCK_LINK" DeclFile="C:\E\Dev\FreeRTOS\Source\portable\MemMang\heap_2.c" DeclLine="86" Pointer="No"/>\r
+ <func Header="vPortFree" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Source\portable\MemMang\heap_2.c" DeclLine="223"/>\r
+ <func Header="pvPortMalloc" Icon="3" Type="func" Desc=":   void" DeclFile="C:\E\Dev\FreeRTOS\Source\portable\MemMang\heap_2.c" DeclLine="145"/>\r
+ <variable Header="xHeap" Icon="2" Type="variable" Desc=":   struct xRTOS_HEAP" DeclFile="C:\E\Dev\FreeRTOS\Source\portable\MemMang\heap_2.c" DeclLine="78" Pointer="No"/>\r
+ <variable Header="xStart" Icon="2" Type="variable" Desc=":   struct A_BLOCK_LINK" DeclFile="C:\E\Dev\FreeRTOS\Source\portable\MemMang\heap_2.c" DeclLine="93" Pointer="No"/>\r
+ <variable Header="xEnd" Icon="2" Type="variable" Desc=":   struct A_BLOCK_LINK" DeclFile="C:\E\Dev\FreeRTOS\Source\portable\MemMang\heap_2.c" DeclLine="93" Pointer="No"/>\r
+ <type Header="clock_t" Icon="1" Type="type" Desc=": unsigned long" DeclFile="c:\program files\raisonance\ride\arm-gcc\arm-none-eabi\include\sys\types.h" DeclLine="104" Pointer="No"/>\r
+ <type Header="time_t" Icon="1" Type="type" Desc=": long" DeclFile="c:\program files\raisonance\ride\arm-gcc\arm-none-eabi\include\sys\types.h" DeclLine="109" Pointer="No"/>\r
+ <type Header="caddr_t" Icon="1" Type="type" Desc=": unsigned char CODE*" DeclFile="c:\program files\raisonance\ride\arm-gcc\arm-none-eabi\include\sys\types.h" DeclLine="126" Pointer="Yes"/>\r
+ <type Header="ino_t" Icon="1" Type="type" Desc=": unsigned int" DeclFile="c:\program files\raisonance\ride\arm-gcc\arm-none-eabi\include\sys\types.h" DeclLine="133" Pointer="No"/>\r
+ <type Header="dev_t" Icon="1" Type="type" Desc=": int" DeclFile="c:\program files\raisonance\ride\arm-gcc\arm-none-eabi\include\sys\types.h" DeclLine="166" Pointer="No"/>\r
+ <type Header="off_t" Icon="1" Type="type" Desc=": long" DeclFile="c:\program files\raisonance\ride\arm-gcc\arm-none-eabi\include\sys\types.h" DeclLine="171" Pointer="No"/>\r
+ <type Header="uid_t" Icon="1" Type="type" Desc=": unsigned int" DeclFile="c:\program files\raisonance\ride\arm-gcc\arm-none-eabi\include\sys\types.h" DeclLine="173" Pointer="No"/>\r
+ <type Header="gid_t" Icon="1" Type="type" Desc=": unsigned int" DeclFile="c:\program files\raisonance\ride\arm-gcc\arm-none-eabi\include\sys\types.h" DeclLine="174" Pointer="No"/>\r
+ <type Header="mode_t" Icon="1" Type="type" Desc=": unsigned long" DeclFile="c:\program files\raisonance\ride\arm-gcc\arm-none-eabi\include\sys\types.h" DeclLine="195" Pointer="No"/>\r
+ <type Header="nlink_t" Icon="1" Type="type" Desc=": unsigned int" DeclFile="c:\program files\raisonance\ride\arm-gcc\arm-none-eabi\include\sys\types.h" DeclLine="200" Pointer="No"/>\r
+ <type Header="suseconds_t" Icon="1" Type="type" Desc=": long" DeclFile="c:\program files\raisonance\ride\arm-gcc\arm-none-eabi\include\sys\types.h" DeclLine="263" Pointer="No"/>\r
+ <type Header="poslog" Icon="1" Type="type" Desc=": struct " DeclFile="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" DeclLine="83" Pointer="No"/>\r
+ <func Header="_read" Icon="3" Type="func" Desc=":   long" DeclFile="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" DeclLine="173"/>\r
+ <func Header="_lseek" Icon="3" Type="func" Desc=":   long" DeclFile="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" DeclLine="180"/>\r
+ <func Header="_open" Icon="3" Type="func" Desc=":   long" DeclFile="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" DeclLine="203"/>\r
+ <func Header="_close" Icon="3" Type="func" Desc=":   long" DeclFile="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" DeclLine="208"/>\r
+ <func Header="_exit" Icon="3" Type="func" Desc=":   void" DeclFile="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" DeclLine="213"/>\r
+ <func Header="_kill" Icon="3" Type="func" Desc=":   long" DeclFile="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" DeclLine="219"/>\r
+ <func Header="_fstat" Icon="3" Type="func" Desc=":   long" DeclFile="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" DeclLine="247"/>\r
+ <func Header="_stat" Icon="3" Type="func" Desc=":   long" DeclFile="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" DeclLine="253"/>\r
+ <func Header="_link" Icon="3" Type="func" Desc=":   long" DeclFile="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" DeclLine="259"/>\r
+ <func Header="_unlink" Icon="3" Type="func" Desc=":   long" DeclFile="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" DeclLine="264"/>\r
+ <func Header="_raise" Icon="3" Type="func" Desc=":   void" DeclFile="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" DeclLine="269"/>\r
+ <func Header="_getpid" Icon="3" Type="func" Desc=":   long" DeclFile="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" DeclLine="274"/>\r
+ <func Header="_gettimeofday" Icon="3" Type="func" Desc=":   long" DeclFile="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" DeclLine="279"/>\r
+ <func Header="_times" Icon="3" Type="func" Desc=":   unsigned long" DeclFile="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" DeclLine="304"/>\r
+ <func Header="isatty" Icon="3" Type="func" Desc=":   long" DeclFile="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" DeclLine="322"/>\r
+ <func Header="_rename" Icon="3" Type="func" Desc=":   long" DeclFile="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" DeclLine="336"/>\r
+ <func Header="_system" Icon="3" Type="func" Desc=":   long" DeclFile="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" DeclLine="328"/>\r
+ <func Header="_write" Icon="3" Type="func" Desc=":   long" DeclFile="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" DeclLine="189"/>\r
+ <func Header="_sbrk" Icon="3" Type="func" Desc=":   unsigned char CODE*" DeclFile="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" DeclLine="224"/>\r
+ <variable Header="stack_ptr" Icon="2" Type="variable" Desc=":   unsigned char CODE*" DeclFile="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" DeclLine="53" Pointer="Yes"/>\r
+ <type Header="u32" Icon="1" Type="type" Desc=": unsigned long" DeclFile="C:\Program Files\Raisonance\Ride\Lib\ARM\include\stm32f10x_type.h" DeclLine="36" Pointer="No"/>\r
+ <type Header="u16" Icon="1" Type="type" Desc=": unsigned int" DeclFile="C:\Program Files\Raisonance\Ride\Lib\ARM\include\stm32f10x_type.h" DeclLine="37" Pointer="No"/>\r
+ <type Header="GPIOSpeed_TypeDef" Icon="1" Type="type" Desc=": unsigned char" DeclFile="C:\Program Files\Raisonance\Ride\Lib\ARM\include\stm32f10x_gpio.h" DeclLine="36" Pointer="No"/>\r
+ <type Header="GPIOMode_TypeDef" Icon="1" Type="type" Desc=": unsigned char" DeclFile="C:\Program Files\Raisonance\Ride\Lib\ARM\include\stm32f10x_gpio.h" DeclLine="51" Pointer="No"/>\r
+ <type Header="GPIO_InitTypeDef" Icon="1" Type="type" Desc=": struct " DeclFile="C:\Program Files\Raisonance\Ride\Lib\ARM\include\stm32f10x_gpio.h" DeclLine="64" Pointer="No"/>\r
+ <type Header="USART_InitTypeDef" Icon="1" Type="type" Desc=": struct " DeclFile="C:\Program Files\Raisonance\Ride\Lib\ARM\include\stm32f10x_usart.h" DeclLine="43" Pointer="No"/>\r
+ <func Header="__io_SetMainOscFreq" Icon="3" Type="func" Desc=":   void" DeclFile="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\STM32F10X_IO_putchar.c" DeclLine="29"/>\r
+ <func Header="__io_init" Icon="3" Type="func" Desc=":   void" DeclFile="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\STM32F10X_IO_putchar.c" DeclLine="35"/>\r
+ <func Header="__io_getchar" Icon="3" Type="func" Desc=":   long" DeclFile="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\STM32F10X_IO_putchar.c" DeclLine="122"/>\r
+ <func Header="getchar" Icon="3" Type="func" Desc=":   long" DeclFile="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\STM32F10X_IO_putchar.c" DeclLine="142"/>\r
+ <func Header="__io_putchar" Icon="3" Type="func" Desc=":   void" DeclFile="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\STM32F10X_IO_putchar.c" DeclLine="94"/>\r
+ <func Header="putchar" Icon="3" Type="func" Desc=":   long" DeclFile="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\STM32F10X_IO_putchar.c" DeclLine="116"/>\r
+ <variable Header="__io_init_done" Icon="2" Type="variable" Desc=":   unsigned char" DeclFile="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\STM32F10X_IO_putchar.c" DeclLine="23" Pointer="No"/>\r
+ <variable Header="__io_Main_Osc" Icon="2" Type="variable" Desc=":   unsigned long" DeclFile="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\STM32F10X_IO_putchar.c" DeclLine="25" Pointer="No"/>\r
+</aoffile>\r
+\r
diff --git a/Demo/CORTEX_STM32F103_Primer_GCC/RTOSDemo.Standard.xml b/Demo/CORTEX_STM32F103_Primer_GCC/RTOSDemo.Standard.xml
new file mode 100644 (file)
index 0000000..e4bb7e6
--- /dev/null
@@ -0,0 +1,2278 @@
+<!-- DWF2XML 0.01.29 - Raisonance Dwarf information extractor -->\r
+<aoffile Filename="RTOSDemo" dwarf="1">\r
+ <modulelist>\r
+  <module Name="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\led.c" >\r
+   <type Family="Base" Name="long int" ID="29"/>\r
+   <type Family="Base" Name="short int" ID="36"/>\r
+   <type Family="Base" Name="signed char" ID="43"/>\r
+   <type Family="Base" Name="long unsigned int" ID="50"/>\r
+   <type Family="Base" Name="short unsigned int" ID="68"/>\r
+   <type Family="typedef" Name="u16" Line="37" ID="57" toTI="68"/>\r
+   <type Family="Base" Name="unsigned char" ID="75"/>\r
+   <type Family="ComponentList" Line="200" ID="111">\r
+    <Component Name="CRL" TI="119" Line="201" Offs="0"/>\r
+    <Component Name="CRH" TI="133" Line="202" Offs="4"/>\r
+    <Component Name="IDR" TI="147" Line="203" Offs="8"/>\r
+    <Component Name="ODR" TI="161" Line="204" Offs="12"/>\r
+    <Component Name="BSRR" TI="175" Line="205" Offs="16"/>\r
+    <Component Name="BRR" TI="189" Line="206" Offs="20"/>\r
+    <Component Name="LCKR" TI="203" Line="207" Offs="24"/>\r
+   </type>\r
+   <type Family="typedef" Name="GPIOSpeed_TypeDef" Line="36" ID="245" toTI="218"/>\r
+   <type Family="typedef" Name="GPIOMode_TypeDef" Line="51" ID="314" toTI="256"/>\r
+   <type Family="ComponentList" Line="60" ID="325">\r
+    <Component Name="GPIO_Pin" TI="333" Line="61" Offs="0"/>\r
+    <Component Name="GPIO_Speed" TI="347" Line="62" Offs="2"/>\r
+    <Component Name="GPIO_Mode" TI="361" Line="63" Offs="3"/>\r
+   </type>\r
+   <type Family="typedef" Name="GPIO_InitTypeDef" Line="64" ID="376" toTI="325"/>\r
+   <type Family="Pointer" TI="585" toTI="591"/>\r
+   <type Family="Base" Name="int" ID="608"/>\r
+   <type Family="Base" Name="char" ID="615"/>\r
+   <type Family="Base" Name="unsigned int" ID="622"/>\r
+   <function Name="LED_Set" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\led.c" Line="201">\r
+    <parameter Name="id" TI="560" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\led.c" Line="201" Addr="0x0" Param="Yes"/>\r
+    <parameter Name="mode" TI="517" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\led.c" Line="201" Addr="0x1" Param="Yes"/>\r
+   </function >\r
+   <function Name="LED_Handler_hw" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\led.c" Line="93">\r
+    <parameter Name="id" TI="560" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\led.c" Line="93" Addr="0x0" Param="Yes"/>\r
+    <variable Name="counter" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\led.c" Line="94" Addr="0x4" TI="608"/>\r
+    <variable Name="mode" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\led.c" Line="95" Addr="0x6" TI="517"/>\r
+   </function >\r
+   <function Name="LED_Handler" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\led.c" Line="73">\r
+   </function >\r
+   <function Name="LED_Init" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\led.c" Line="46">\r
+    <variable Name="GPIO_InitStructure" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\led.c" Line="47" Addr="0x340FFFF4" TI="376"/>\r
+   </function >\r
+   <variable Name="dummy_var" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\circle.h" Line="77" Addr="0x200046E4" TI="408"/>\r
+   <type Family="Pointer" TI="585" toTI="591"/>\r
+   <variable Name="Application_Pointer_Mgr" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\circle.h" Line="429" Addr="0x200046E0" TI="585"/>\r
+   <variable Name="GreenLED_Counter" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\led.c" Line="19" Addr="0x0" TI="608"/>\r
+   <variable Name="RedLED_Counter" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\led.c" Line="20" Addr="0x0" TI="608"/>\r
+   <variable Name="GreenLED_mode" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\led.c" Line="21" Addr="0x0" TI="517"/>\r
+   <variable Name="RedLED_mode" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\led.c" Line="22" Addr="0x0" TI="517"/>\r
+   <variable Name="GreenLED_newmode" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\led.c" Line="23" Addr="0x0" TI="517"/>\r
+   <variable Name="RedLED_newmode" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\led.c" Line="24" Addr="0x0" TI="517"/>\r
+   <variable Name="HalfPeriod_LF" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\led.c" Line="25" Addr="0x0" TI="972"/>\r
+   <variable Name="HalfPeriod_HF" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\led.c" Line="26" Addr="0x0" TI="972"/>\r
+   <variable Name="Period_LF" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\led.c" Line="27" Addr="0x0" TI="972"/>\r
+   <variable Name="Period_HF" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\led.c" Line="28" Addr="0x0" TI="972"/>\r
+  </module>\r
+  <module Name="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\crt0_STM32x.c" >\r
+   <function Name="Reset_Handler" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\crt0_STM32x.c" Line="188">\r
+   <type Family="Base" Name="long unsigned int" ID="1119"/>\r
+   <type Family="Pointer" TI="1113" toTI="1119"/>\r
+    <variable Name="pulDest" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\crt0_STM32x.c" Line="189" Addr="0x2" TI="1113"/>\r
+   </function >\r
+   <type Family="Pointer" TI="1221" toTI="1219"/>\r
+   <type Family="array" ID="1200" toTI="1221"/>\r
+   <type Family="Pointer" TI="1221" toTI="1219"/>\r
+   <type Family="Pointer" TI="1221" toTI="1219"/>\r
+   <type Family="array" ID="1200" toTI="1221"/>\r
+   <variable Name="g_pfnVectors" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\crt0_STM32x.c" Line="110" Addr="0x8000000" TI="1245"/>\r
+   <type Family="Pointer" TI="1221" toTI="1219"/>\r
+   <type Family="array" ID="1200" toTI="1221"/>\r
+  </module>\r
+  <module Name="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" >\r
+   <type Family="Base" Name="long int" ID="1280"/>\r
+   <type Family="Base" Name="short int" ID="1298"/>\r
+   <type Family="typedef" Name="s16" Line="29" ID="1287" toTI="1298"/>\r
+   <type Family="Base" Name="signed char" ID="1305"/>\r
+   <type Family="Base" Name="long unsigned int" ID="1323"/>\r
+   <type Family="typedef" Name="u32" Line="36" ID="1312" toTI="1323"/>\r
+   <type Family="Base" Name="short unsigned int" ID="1341"/>\r
+   <type Family="typedef" Name="u16" Line="37" ID="1330" toTI="1341"/>\r
+   <type Family="Base" Name="unsigned char" ID="1358"/>\r
+   <type Family="typedef" Name="u8" Line="38" ID="1348" toTI="1358"/>\r
+   <type Family="ComponentList" Line="200" ID="1399">\r
+    <Component Name="CRL" TI="1407" Line="201" Offs="0"/>\r
+    <Component Name="CRH" TI="1421" Line="202" Offs="4"/>\r
+    <Component Name="IDR" TI="1435" Line="203" Offs="8"/>\r
+    <Component Name="ODR" TI="1449" Line="204" Offs="12"/>\r
+    <Component Name="BSRR" TI="1463" Line="205" Offs="16"/>\r
+    <Component Name="BRR" TI="1477" Line="206" Offs="20"/>\r
+    <Component Name="LCKR" TI="1491" Line="207" Offs="24"/>\r
+   </type>\r
+   <type Family="typedef" Name="GPIO_TypeDef" Line="208" ID="1506" toTI="1399"/>\r
+   <type Family="ComponentList" Line="404" ID="1517">\r
+    <Component Name="CR1" TI="1526" Line="405" Offs="0"/>\r
+    <Component Name="RESERVED0" TI="1541" Line="406" Offs="2"/>\r
+    <Component Name="CR2" TI="1556" Line="407" Offs="4"/>\r
+    <Component Name="RESERVED1" TI="1571" Line="408" Offs="6"/>\r
+    <Component Name="SMCR" TI="1586" Line="409" Offs="8"/>\r
+    <Component Name="RESERVED2" TI="1601" Line="410" Offs="10"/>\r
+    <Component Name="DIER" TI="1616" Line="411" Offs="12"/>\r
+    <Component Name="RESERVED3" TI="1631" Line="412" Offs="14"/>\r
+    <Component Name="SR" TI="1646" Line="413" Offs="16"/>\r
+    <Component Name="RESERVED4" TI="1660" Line="414" Offs="18"/>\r
+    <Component Name="EGR" TI="1675" Line="415" Offs="20"/>\r
+    <Component Name="RESERVED5" TI="1690" Line="416" Offs="22"/>\r
+    <Component Name="CCMR1" TI="1705" Line="417" Offs="24"/>\r
+    <Component Name="RESERVED6" TI="1720" Line="418" Offs="26"/>\r
+    <Component Name="CCMR2" TI="1735" Line="419" Offs="28"/>\r
+    <Component Name="RESERVED7" TI="1750" Line="420" Offs="30"/>\r
+    <Component Name="CCER" TI="1765" Line="421" Offs="32"/>\r
+    <Component Name="RESERVED8" TI="1780" Line="422" Offs="34"/>\r
+    <Component Name="CNT" TI="1795" Line="423" Offs="36"/>\r
+    <Component Name="RESERVED9" TI="1810" Line="424" Offs="38"/>\r
+    <Component Name="PSC" TI="1825" Line="425" Offs="40"/>\r
+    <Component Name="RESERVED10" TI="1840" Line="426" Offs="42"/>\r
+    <Component Name="ARR" TI="1855" Line="427" Offs="44"/>\r
+   <type Family="array" ID="2066" toTI="1330"/>\r
+    <Component Name="RESERVED11" TI="1870" Line="428" Offs="46"/>\r
+    <Component Name="CCR1" TI="1885" Line="429" Offs="52"/>\r
+    <Component Name="RESERVED12" TI="1900" Line="430" Offs="54"/>\r
+    <Component Name="CCR2" TI="1915" Line="431" Offs="56"/>\r
+    <Component Name="RESERVED13" TI="1930" Line="432" Offs="58"/>\r
+    <Component Name="CCR3" TI="1945" Line="433" Offs="60"/>\r
+    <Component Name="RESERVED14" TI="1960" Line="434" Offs="62"/>\r
+    <Component Name="CCR4" TI="1975" Line="435" Offs="64"/>\r
+    <Component Name="RESERVED15" TI="1990" Line="436" Offs="66"/>\r
+    <Component Name="DCR" TI="2005" Line="437" Offs="72"/>\r
+    <Component Name="RESERVED16" TI="2020" Line="438" Offs="74"/>\r
+    <Component Name="DMAR" TI="2035" Line="439" Offs="76"/>\r
+    <Component Name="RESERVED17" TI="2050" Line="440" Offs="78"/>\r
+   </type>\r
+   <type Family="typedef" Name="GPIOSpeed_TypeDef" Line="36" ID="2109" toTI="2082"/>\r
+   <type Family="typedef" Name="GPIOMode_TypeDef" Line="51" ID="2178" toTI="2120"/>\r
+   <type Family="ComponentList" Line="60" ID="2189">\r
+    <Component Name="GPIO_Pin" TI="2197" Line="61" Offs="0"/>\r
+    <Component Name="GPIO_Speed" TI="2211" Line="62" Offs="2"/>\r
+    <Component Name="GPIO_Mode" TI="2225" Line="63" Offs="3"/>\r
+   </type>\r
+   <type Family="typedef" Name="GPIO_InitTypeDef" Line="64" ID="2240" toTI="2189"/>\r
+   <type Family="typedef" Name="BitAction" Line="70" ID="2272" toTI="2251"/>\r
+   <type Family="ComponentList" Line="33" ID="2283">\r
+    <Component Name="TIM_Period" TI="2291" Line="34" Offs="0"/>\r
+    <Component Name="TIM_Prescaler" TI="2305" Line="35" Offs="2"/>\r
+    <Component Name="TIM_ClockDivision" TI="2319" Line="36" Offs="4"/>\r
+    <Component Name="TIM_CounterMode" TI="2333" Line="37" Offs="6"/>\r
+   </type>\r
+   <type Family="typedef" Name="TIM_TimeBaseInitTypeDef" Line="38" ID="2348" toTI="2283"/>\r
+   <type Family="ComponentList" Line="42" ID="2359">\r
+    <Component Name="TIM_OCMode" TI="2367" Line="43" Offs="0"/>\r
+    <Component Name="TIM_Channel" TI="2381" Line="44" Offs="2"/>\r
+    <Component Name="TIM_Pulse" TI="2395" Line="45" Offs="4"/>\r
+    <Component Name="TIM_OCPolarity" TI="2409" Line="46" Offs="6"/>\r
+   </type>\r
+   <type Family="typedef" Name="TIM_OCInitTypeDef" Line="47" ID="2424" toTI="2359"/>\r
+   <type Family="typedef" Name="DataConfigMode_TypeDef" Line="26" ID="2456" toTI="2435"/>\r
+   <type Family="typedef" Name="Rotate_H12_V_Match_TypeDef" Line="101" ID="2606" toTI="2576"/>\r
+   <type Family="Pointer" TI="2617" toTI="2623"/>\r
+   <type Family="Base" Name="int" ID="2640"/>\r
+   <type Family="Base" Name="char" ID="2647"/>\r
+   <type Family="Base" Name="unsigned int" ID="2654"/>\r
+   <function Name="LCD_DataLinesWrite" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="202">\r
+   <type Family="Pointer" TI="2712" toTI="1506"/>\r
+    <parameter Name="GPIOx" TI="2712" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="202" Addr="0x0" Param="Yes"/>\r
+    <parameter Name="PortVal" TI="1312" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="202" Addr="0x1" Param="Yes"/>\r
+   </function >\r
+   <function Name="LCD_SetBackLight" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="1053">\r
+    <parameter Name="newBacklightStart" TI="1312" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="1053" Addr="0x0" Param="Yes"/>\r
+   </function >\r
+   <function Name="LCD_SetBackLightOff" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="1076">\r
+   </function >\r
+   <function Name="LCD_SetBackLightOn" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="1092">\r
+   </function >\r
+   <function Name="LCD_GetBackLight" TI="1312" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="1110">\r
+   </function >\r
+   <function Name="LCD_SetRotateScreen" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="1129">\r
+    <parameter Name="RotateScreen" TI="1348" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="1129" Addr="0x0" Param="Yes"/>\r
+   </function >\r
+   <function Name="LCD_GetRotateScreen" TI="1348" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="1148">\r
+   </function >\r
+   <function Name="LCD_GetScreenOrientation" TI="2606" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="1186">\r
+   </function >\r
+   <function Name="LCD_CtrlLinesWrite" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="255">\r
+    <parameter Name="GPIOx" TI="2712" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="255" Addr="0x0" Param="Yes"/>\r
+    <parameter Name="CtrlPins" TI="1312" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="255" Addr="0x1" Param="Yes"/>\r
+    <parameter Name="BitVal" TI="2272" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="255" Addr="0x2" Param="Yes"/>\r
+   </function >\r
+   <function Name="LCD_SendLCDData" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="707">\r
+    <parameter Name="Data" TI="1348" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="707" Addr="0x0" Param="Yes"/>\r
+   </function >\r
+   <function Name="LCD_SendLCDCmd" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="679">\r
+    <parameter Name="Cmd" TI="1348" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="679" Addr="0x0" Param="Yes"/>\r
+   </function >\r
+   <function Name="LCD_SetRect_For_Cmd" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="1028">\r
+    <parameter Name="x" TI="1287" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="1028" Addr="0x0" Param="Yes"/>\r
+    <parameter Name="y" TI="1287" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="1028" Addr="0x1" Param="Yes"/>\r
+    <parameter Name="width" TI="1287" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="1028" Addr="0x2" Param="Yes"/>\r
+    <parameter Name="height" TI="1287" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="1028" Addr="0x3" Param="Yes"/>\r
+   </function >\r
+   <function Name="LCD_DrawPixel" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="901">\r
+    <parameter Name="XPos" TI="1348" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="901" Addr="0x0" Param="Yes"/>\r
+    <parameter Name="YPos" TI="1348" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="901" Addr="0x1" Param="Yes"/>\r
+    <parameter Name="Color" TI="1330" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="901" Addr="0x2" Param="Yes"/>\r
+   </function >\r
+   <function Name="LCD_FillRect" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="777">\r
+    <parameter Name="x" TI="1330" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="777" Addr="0x0" Param="Yes"/>\r
+    <parameter Name="y" TI="1330" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="777" Addr="0x1" Param="Yes"/>\r
+    <parameter Name="width" TI="1330" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="777" Addr="0x2" Param="Yes"/>\r
+    <parameter Name="height" TI="1330" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="777" Addr="0x3" Param="Yes"/>\r
+    <parameter Name="color" TI="1330" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="777" Addr="0x34000000" Param="Yes"/>\r
+    <variable Name="Line" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="778" Addr="0x8" TI="1348"/>\r
+    <variable Name="Column" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="779" Addr="0x4" TI="1348"/>\r
+   </function >\r
+   <function Name="LCD_DrawRect" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="873">\r
+    <parameter Name="x" TI="1330" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="873" Addr="0x0" Param="Yes"/>\r
+    <parameter Name="y" TI="1330" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="873" Addr="0x1" Param="Yes"/>\r
+    <parameter Name="width" TI="1330" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="873" Addr="0x2" Param="Yes"/>\r
+    <parameter Name="height" TI="1330" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="873" Addr="0x3" Param="Yes"/>\r
+    <parameter Name="color" TI="1330" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="873" Addr="0x34000000" Param="Yes"/>\r
+   </function >\r
+   <function Name="LCD_SetScreenOrientation" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="1166">\r
+    <parameter Name="ScreenOrientation" TI="2606" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="1166" Addr="0x0" Param="Yes"/>\r
+   </function >\r
+   <type Family="Pointer" TI="3693" toTI="3699"/>\r
+   <function Name="LCD_DisplayChar" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="1004">\r
+    <parameter Name="x" TI="1348" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="1004" Addr="0x0" Param="Yes"/>\r
+    <parameter Name="y" TI="1348" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="1004" Addr="0x1" Param="Yes"/>\r
+    <parameter Name="Ascii" TI="1348" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="1004" Addr="0x2" Param="Yes"/>\r
+    <parameter Name="TextColor" TI="1330" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="1004" Addr="0x3" Param="Yes"/>\r
+    <parameter Name="BGndColor" TI="1330" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="1004" Addr="0x34000000" Param="Yes"/>\r
+    <parameter Name="CharMagniCoeff" TI="1330" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="1004" Addr="0x34000004" Param="Yes"/>\r
+    <parameter Name="bmp" TI="3693" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="1004" Addr="0x340FFFF4" Param="Yes"/>\r
+    <variable Name="i" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="329" Addr="0x340FFFF8" TI="0"/>\r
+    <variable Name="j" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="330" Addr="0x5" TI="0"/>\r
+    <variable Name="k1" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="331" Addr="0xB" TI="0"/>\r
+    <variable Name="k2" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="332" Addr="0x4" TI="0"/>\r
+   </function >\r
+   <function Name="LCD_DataLinesConfig" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="167">\r
+    <parameter Name="Mode" TI="2456" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="167" Addr="0x0" Param="Yes"/>\r
+    <variable Name="GPIO_InitStructure" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="168" Addr="0x340FFFF4" TI="2240"/>\r
+   </function >\r
+   <function Name="LCD_ReadLCDData" TI="1312" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="734">\r
+   </function >\r
+   <function Name="LCD_RectRead" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="934">\r
+    <parameter Name="x" TI="1330" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="934" Addr="0x0" Param="Yes"/>\r
+    <parameter Name="y" TI="1330" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="934" Addr="0x1" Param="Yes"/>\r
+    <parameter Name="width" TI="1330" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="934" Addr="0x2" Param="Yes"/>\r
+    <parameter Name="height" TI="1330" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="934" Addr="0x3" Param="Yes"/>\r
+   <type Family="Pointer" TI="4143" toTI="1348"/>\r
+    <parameter Name="bmp" TI="4143" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="934" Addr="0x34000000" Param="Yes"/>\r
+    <variable Name="i" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="935" Addr="0x4" TI="2640"/>\r
+    <variable Name="bytesize" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="936" Addr="0x6" TI="2640"/>\r
+   </function >\r
+   <function Name="LCD_GetPixel" TI="1330" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="973">\r
+    <parameter Name="x" TI="1348" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="973" Addr="0x0" Param="Yes"/>\r
+    <parameter Name="y" TI="1348" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="973" Addr="0x1" Param="Yes"/>\r
+    <variable Name="val" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="974" Addr="0x340FFFFA" TI="1330"/>\r
+   </function >\r
+   <function Name="LCD_Handler" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="651">\r
+   </function >\r
+   <function Name="LCD_Init" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="613">\r
+    <variable Name="GPIO_InitStructure" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="532" Addr="0x340FFFD4" TI="0"/>\r
+    <variable Name="GPIO_InitStructure" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="219" Addr="0x340FFFD4" TI="0"/>\r
+   </function >\r
+   <variable Name="TIM_TimeBaseStructure" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="28" Addr="0x20000094" TI="2348"/>\r
+   <variable Name="TIM_OCInitStructure" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="29" Addr="0x2000008C" TI="2424"/>\r
+   <variable Name="HandlerDivider" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="30" Addr="0x20000088" TI="2640"/>\r
+   <type Family="array" ID="4613" toTI="1348"/>\r
+   <variable Name="AsciiDotsTable" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="42" Addr="0x8004EFC" TI="4647"/>\r
+   <variable Name="dummy_var" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\circle.h" Line="77" Addr="0x200046E4" TI="2467"/>\r
+   <type Family="Pointer" TI="2617" toTI="2623"/>\r
+   <variable Name="Application_Pointer_Mgr" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\circle.h" Line="429" Addr="0x200046E0" TI="2617"/>\r
+   <variable Name="Current_CCR_BackLightStart" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="32" Addr="0x20000000" TI="2640"/>\r
+   <type Family="array" ID="4733" toTI="2640"/>\r
+   <variable Name="OrientationOffsetX" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="139" Addr="0x20000004" TI="4733"/>\r
+   <type Family="array" ID="4767" toTI="2640"/>\r
+   <variable Name="OrientationOffsetY" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\lcd.c" Line="140" Addr="0x20000014" TI="4767"/>\r
+  </module>\r
+  <module Name="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" >\r
+   <type Family="Base" Name="long int" ID="4842"/>\r
+   <type Family="typedef" Name="s32" Line="28" ID="4831" toTI="4842"/>\r
+   <type Family="Base" Name="short int" ID="4860"/>\r
+   <type Family="typedef" Name="s16" Line="29" ID="4849" toTI="4860"/>\r
+   <type Family="Base" Name="signed char" ID="4867"/>\r
+   <type Family="Base" Name="long unsigned int" ID="4885"/>\r
+   <type Family="typedef" Name="u32" Line="36" ID="4874" toTI="4885"/>\r
+   <type Family="Base" Name="short unsigned int" ID="4903"/>\r
+   <type Family="typedef" Name="u16" Line="37" ID="4892" toTI="4903"/>\r
+   <type Family="Base" Name="unsigned char" ID="4920"/>\r
+   <type Family="typedef" Name="u8" Line="38" ID="4910" toTI="4920"/>\r
+   <type Family="ComponentList" Line="200" ID="4977">\r
+    <Component Name="CRL" TI="4985" Line="201" Offs="0"/>\r
+    <Component Name="CRH" TI="4999" Line="202" Offs="4"/>\r
+    <Component Name="IDR" TI="5013" Line="203" Offs="8"/>\r
+    <Component Name="ODR" TI="5027" Line="204" Offs="12"/>\r
+    <Component Name="BSRR" TI="5041" Line="205" Offs="16"/>\r
+    <Component Name="BRR" TI="5055" Line="206" Offs="20"/>\r
+    <Component Name="LCKR" TI="5069" Line="207" Offs="24"/>\r
+   </type>\r
+   <type Family="typedef" Name="GPIOSpeed_TypeDef" Line="36" ID="5111" toTI="5084"/>\r
+   <type Family="typedef" Name="GPIOMode_TypeDef" Line="51" ID="5180" toTI="5122"/>\r
+   <type Family="ComponentList" Line="60" ID="5191">\r
+    <Component Name="GPIO_Pin" TI="5199" Line="61" Offs="0"/>\r
+    <Component Name="GPIO_Speed" TI="5213" Line="62" Offs="2"/>\r
+    <Component Name="GPIO_Mode" TI="5227" Line="63" Offs="3"/>\r
+   </type>\r
+   <type Family="typedef" Name="GPIO_InitTypeDef" Line="64" ID="5242" toTI="5191"/>\r
+   <type Family="ComponentList" Line="31" ID="5274">\r
+    <Component Name="SYSCLK_Frequency" TI="5282" Line="32" Offs="0"/>\r
+    <Component Name="HCLK_Frequency" TI="5296" Line="33" Offs="4"/>\r
+    <Component Name="PCLK1_Frequency" TI="5310" Line="34" Offs="8"/>\r
+    <Component Name="PCLK2_Frequency" TI="5324" Line="35" Offs="12"/>\r
+    <Component Name="ADCCLK_Frequency" TI="5338" Line="36" Offs="16"/>\r
+   </type>\r
+   <type Family="typedef" Name="RCC_ClocksTypeDef" Line="37" ID="5353" toTI="5274"/>\r
+   <type Family="Pointer" TI="5375" toTI="5381"/>\r
+   <type Family="typedef" Name="tHandler" Line="75" ID="5364" toTI="5375"/>\r
+   <type Family="Pointer" TI="5375" toTI="5381"/>\r
+   <type Family="Pointer" TI="5535" toTI="5541"/>\r
+   <type Family="Base" Name="int" ID="5558"/>\r
+   <type Family="Base" Name="char" ID="5576"/>\r
+   <type Family="Pointer" TI="5565" toTI="5571"/>\r
+   <type Family="Base" Name="unsigned int" ID="5583"/>\r
+   <function Name="_int2str" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" Line="56">\r
+   <type Family="Pointer" TI="5760" toTI="5576"/>\r
+    <parameter Name="ptr" TI="5760" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" Line="56" Addr="0x0" Param="Yes"/>\r
+    <parameter Name="X" TI="4831" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" Line="56" Addr="0x1" Param="Yes"/>\r
+    <parameter Name="digit" TI="4892" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" Line="56" Addr="0x2" Param="Yes"/>\r
+    <parameter Name="flagunsigned" TI="5558" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" Line="56" Addr="0x3" Param="Yes"/>\r
+    <parameter Name="fillwithzero" TI="5558" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" Line="56" Addr="0x34000000" Param="Yes"/>\r
+    <variable Name="c" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" Line="57" Addr="0x2" TI="4910"/>\r
+    <variable Name="fFirst" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" Line="58" Addr="0xC" TI="4910"/>\r
+    <variable Name="fNeg" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" Line="59" Addr="0x8" TI="4910"/>\r
+    <variable Name="DIG" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" Line="60" Addr="0x4" TI="4874"/>\r
+    <variable Name="i" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" Line="61" Addr="0xC" TI="5558"/>\r
+    <variable Name="r" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" Line="74" Addr="0x1" TI="4874"/>\r
+   </function >\r
+   <function Name="delay_unit" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" Line="116">\r
+   </function >\r
+   <function Name="UTIL_GetBat" TI="4892" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" Line="138">\r
+   </function >\r
+   <function Name="UTIL_GetTemp" TI="4892" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" Line="167">\r
+    <variable Name="temp" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" Line="168" Addr="0x2" TI="4831"/>\r
+   <type Family="Pointer" TI="5862" toTI="4849"/>\r
+    <variable Name="p" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" Line="169" Addr="0x1" TI="5862"/>\r
+   </function >\r
+   <function Name="UTIL_SetTempMode" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" Line="202">\r
+    <parameter Name="mode" TI="5558" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" Line="202" Addr="0x0" Param="Yes"/>\r
+   </function >\r
+   <function Name="UTIL_uint2str" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" Line="251">\r
+    <parameter Name="ptr" TI="5760" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" Line="251" Addr="0x0" Param="Yes"/>\r
+    <parameter Name="X" TI="4874" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" Line="251" Addr="0x1" Param="Yes"/>\r
+    <parameter Name="digit" TI="4892" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" Line="251" Addr="0x2" Param="Yes"/>\r
+    <parameter Name="fillwithzero" TI="5558" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" Line="251" Addr="0x3" Param="Yes"/>\r
+   </function >\r
+   <function Name="UTIL_int2str" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" Line="273">\r
+    <parameter Name="ptr" TI="5760" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" Line="273" Addr="0x0" Param="Yes"/>\r
+    <parameter Name="X" TI="4831" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" Line="273" Addr="0x1" Param="Yes"/>\r
+    <parameter Name="digit" TI="4892" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" Line="273" Addr="0x2" Param="Yes"/>\r
+    <parameter Name="fillwithzero" TI="5558" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" Line="273" Addr="0x3" Param="Yes"/>\r
+   </function >\r
+   <function Name="UTIL_GetPll" TI="5383" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" Line="372">\r
+   </function >\r
+   <function Name="UTIL_GetVersion" TI="5565" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" Line="390">\r
+   </function >\r
+   <function Name="UTIL_ReadBackupRegister" TI="4892" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" Line="410">\r
+    <parameter Name="BKP_DR" TI="4892" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" Line="410" Addr="0x0" Param="Yes"/>\r
+   </function >\r
+   <function Name="UTIL_WriteBackupRegister" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" Line="429">\r
+    <parameter Name="BKP_DR" TI="4892" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" Line="429" Addr="0x0" Param="Yes"/>\r
+    <parameter Name="Data" TI="4892" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" Line="429" Addr="0x1" Param="Yes"/>\r
+   </function >\r
+   <function Name="UTIL_SetIrqHandler" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" Line="449">\r
+    <parameter Name="Offs" TI="5558" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" Line="449" Addr="0x0" Param="Yes"/>\r
+   <type Family="Pointer" TI="5375" toTI="5381"/>\r
+   <type Family="typedef" Name="tHandler" Line="75" ID="5364" toTI="5375"/>\r
+    <parameter Name="pHDL" TI="5364" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" Line="449" Addr="0x1" Param="Yes"/>\r
+   </function >\r
+   <type Family="Pointer" TI="5375" toTI="5381"/>\r
+   <type Family="typedef" Name="tHandler" Line="75" ID="5364" toTI="5375"/>\r
+   <function Name="UTIL_GetIrqHandler" TI="5364" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" Line="471">\r
+    <parameter Name="Offs" TI="5558" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" Line="471" Addr="0x0" Param="Yes"/>\r
+   </function >\r
+   <function Name="UTIL_SetSchHandler" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" Line="499">\r
+    <parameter Name="Ix" TI="5426" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" Line="499" Addr="0x0" Param="Yes"/>\r
+   <type Family="Pointer" TI="5375" toTI="5381"/>\r
+   <type Family="typedef" Name="tHandler" Line="75" ID="5364" toTI="5375"/>\r
+    <parameter Name="pHDL" TI="5364" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" Line="499" Addr="0x1" Param="Yes"/>\r
+   </function >\r
+   <type Family="Pointer" TI="5375" toTI="5381"/>\r
+   <type Family="typedef" Name="tHandler" Line="75" ID="5364" toTI="5375"/>\r
+   <function Name="UTIL_GetSchHandler" TI="5364" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" Line="524">\r
+    <parameter Name="Ix" TI="5426" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" Line="524" Addr="0x0" Param="Yes"/>\r
+   </function >\r
+   <function Name="UTIL_SetPll" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" Line="291">\r
+    <parameter Name="speed" TI="5383" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" Line="291" Addr="0x0" Param="Yes"/>\r
+   </function >\r
+   <function Name="UTIL_GetUsb" TI="4910" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" Line="223">\r
+   </function >\r
+   <type Family="Pointer" TI="5375" toTI="5381"/>\r
+   <type Family="typedef" Name="tHandler" Line="75" ID="5364" toTI="5375"/>\r
+   <type Family="array" ID="6488" toTI="5364"/>\r
+   <type Family="Pointer" TI="5375" toTI="5381"/>\r
+   <type Family="typedef" Name="tHandler" Line="75" ID="5364" toTI="5375"/>\r
+   <type Family="array" ID="6488" toTI="5364"/>\r
+   <type Family="array" ID="6530" toTI="4892"/>\r
+   <variable Name="CurrentSpeed" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" Line="25" Addr="0x200046E8" TI="5383"/>\r
+   <variable Name="dummy_var" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\circle.h" Line="77" Addr="0x200046E4" TI="5426"/>\r
+   <variable Name="RCC_ClockFreq" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" Line="28" Addr="0x200046EC" TI="5353"/>\r
+   <variable Name="fTemperatureInFahrenheit" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" Line="30" Addr="0x0" TI="4910"/>\r
+   <type Family="Pointer" TI="5535" toTI="5541"/>\r
+   <variable Name="Application_Pointer_Mgr" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\circle.h" Line="429" Addr="0x200046E0" TI="5535"/>\r
+   <variable Name="dummycounter" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\Util.c" Line="29" Addr="0x0" TI="5558"/>\r
+  </module>\r
+  <module Name="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" >\r
+   <type Family="Base" Name="long int" ID="6698"/>\r
+   <type Family="Base" Name="short int" ID="6716"/>\r
+   <type Family="typedef" Name="s16" Line="29" ID="6705" toTI="6716"/>\r
+   <type Family="Base" Name="signed char" ID="6723"/>\r
+   <type Family="Base" Name="long unsigned int" ID="6741"/>\r
+   <type Family="typedef" Name="u32" Line="36" ID="6730" toTI="6741"/>\r
+   <type Family="Base" Name="short unsigned int" ID="6759"/>\r
+   <type Family="typedef" Name="u16" Line="37" ID="6748" toTI="6759"/>\r
+   <type Family="Base" Name="unsigned char" ID="6776"/>\r
+   <type Family="typedef" Name="u8" Line="38" ID="6766" toTI="6776"/>\r
+   <type Family="typedef" Name="Rotate_H12_V_Match_TypeDef" Line="101" ID="6925" toTI="6895"/>\r
+   <type Family="Pointer" TI="6936" toTI="6942"/>\r
+   <type Family="Base" Name="int" ID="6959"/>\r
+   <type Family="Base" Name="char" ID="6966"/>\r
+   <type Family="Base" Name="unsigned int" ID="6973"/>\r
+   <function Name="DRAW_SetCharMagniCoeff" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="218">\r
+    <parameter Name="Coeff" TI="6748" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="218" Addr="0x0" Param="Yes"/>\r
+   </function >\r
+   <function Name="DRAW_GetCharMagniCoeff" TI="6748" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="236">\r
+   </function >\r
+   <function Name="DRAW_GetTextColor" TI="6748" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="254">\r
+   </function >\r
+   <function Name="DRAW_SetTextColor" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="272">\r
+    <parameter Name="Color" TI="6748" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="272" Addr="0x0" Param="Yes"/>\r
+   </function >\r
+   <function Name="DRAW_GetBGndColor" TI="6748" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="290">\r
+   </function >\r
+   <function Name="DRAW_SetBGndColor" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="308">\r
+    <parameter Name="Color" TI="6748" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="308" Addr="0x0" Param="Yes"/>\r
+   </function >\r
+   <function Name="DRAW_SetDefaultColor" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="414">\r
+   </function >\r
+   <function Name="DRAW_Line" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="476">\r
+    <parameter Name="x1" TI="6705" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="476" Addr="0x0" Param="Yes"/>\r
+    <parameter Name="y1" TI="6705" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="476" Addr="0x1" Param="Yes"/>\r
+    <parameter Name="x2" TI="6705" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="476" Addr="0x2" Param="Yes"/>\r
+    <parameter Name="y2" TI="6705" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="476" Addr="0x3" Param="Yes"/>\r
+    <parameter Name="color" TI="6748" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="476" Addr="0x34000000" Param="Yes"/>\r
+    <variable Name="i" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="477" Addr="0x8" TI="6959"/>\r
+    <variable Name="dx" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="477" Addr="0x2" TI="6959"/>\r
+    <variable Name="dy" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="477" Addr="0x3" TI="6959"/>\r
+    <variable Name="sdx" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="477" Addr="0x340FFFF4" TI="6959"/>\r
+    <variable Name="sdy" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="477" Addr="0x340FFFF8" TI="6959"/>\r
+    <variable Name="dxabs" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="477" Addr="0x7" TI="6959"/>\r
+    <variable Name="dyabs" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="477" Addr="0x6" TI="6959"/>\r
+    <variable Name="x" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="477" Addr="0x4" TI="6959"/>\r
+    <variable Name="y" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="477" Addr="0x4" TI="6959"/>\r
+    <variable Name="px" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="477" Addr="0x9" TI="6959"/>\r
+    <variable Name="py" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="477" Addr="0xA" TI="6959"/>\r
+   </function >\r
+   <function Name="DRAW_DisplayStringWithMode" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="129">\r
+    <parameter Name="x" TI="6766" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="129" Addr="0x0" Param="Yes"/>\r
+    <parameter Name="y" TI="6766" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="129" Addr="0x1" Param="Yes"/>\r
+   <type Family="Pointer" TI="7572" toTI="7578"/>\r
+    <parameter Name="ptr" TI="7572" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="129" Addr="0x2" Param="Yes"/>\r
+    <parameter Name="len" TI="6766" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="129" Addr="0x3" Param="Yes"/>\r
+    <parameter Name="mode" TI="6959" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="129" Addr="0x34000000" Param="Yes"/>\r
+    <variable Name="ref_x" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="130" Addr="0x5" TI="6766"/>\r
+    <variable Name="i" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="130" Addr="0x6" TI="6766"/>\r
+   </function >\r
+   <function Name="DRAW_DisplayStringInverted" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="397">\r
+    <parameter Name="x" TI="6766" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="397" Addr="0x0" Param="Yes"/>\r
+    <parameter Name="y" TI="6766" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="397" Addr="0x1" Param="Yes"/>\r
+    <parameter Name="ptr" TI="7572" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="397" Addr="0x2" Param="Yes"/>\r
+    <parameter Name="len" TI="6766" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="397" Addr="0x3" Param="Yes"/>\r
+   </function >\r
+   <function Name="DRAW_DisplayString" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="373">\r
+    <parameter Name="x" TI="6766" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="373" Addr="0x0" Param="Yes"/>\r
+    <parameter Name="y" TI="6766" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="373" Addr="0x1" Param="Yes"/>\r
+    <parameter Name="ptr" TI="7572" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="373" Addr="0x2" Param="Yes"/>\r
+    <parameter Name="len" TI="6766" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="373" Addr="0x3" Param="Yes"/>\r
+   </function >\r
+   <function Name="DRAW_DisplayTemp" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="437">\r
+    <parameter Name="x" TI="6766" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="437" Addr="0x0" Param="Yes"/>\r
+    <parameter Name="y" TI="6766" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="437" Addr="0x1" Param="Yes"/>\r
+    <variable Name="Temp" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="438" Addr="0x5" TI="6730"/>\r
+   <type Family="array" ID="7843" toTI="6766"/>\r
+    <variable Name="TextBuffer" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="439" Addr="0x340FFFE3" TI="7843"/>\r
+   </function >\r
+   <function Name="DRAW_SetImage" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="335">\r
+   <type Family="Pointer" TI="7974" toTI="7980"/>\r
+    <parameter Name="imageptr" TI="7974" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="335" Addr="0x0" Param="Yes"/>\r
+    <parameter Name="x" TI="6766" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="335" Addr="0x1" Param="Yes"/>\r
+    <parameter Name="y" TI="6766" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="335" Addr="0x2" Param="Yes"/>\r
+    <parameter Name="width" TI="6766" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="335" Addr="0x3" Param="Yes"/>\r
+    <parameter Name="height" TI="6766" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="335" Addr="0x34000000" Param="Yes"/>\r
+    <variable Name="i" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="336" Addr="0x5" TI="6959"/>\r
+   </function >\r
+   <function Name="DRAW_Init" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="178">\r
+   </function >\r
+   <variable Name="CharMagniCoeff" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="28" Addr="0x20000024" TI="6748"/>\r
+   <variable Name="BGndColor" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="29" Addr="0x2000009E" TI="6748"/>\r
+   <variable Name="TextColor" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="30" Addr="0x2000009C" TI="6748"/>\r
+   <variable Name="dummy_var" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\circle.h" Line="77" Addr="0x200046E4" TI="6786"/>\r
+   <variable Name="fDisplayTime" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="32" Addr="0x200000A0" TI="6959"/>\r
+   <type Family="Pointer" TI="6936" toTI="6942"/>\r
+   <variable Name="Application_Pointer_Mgr" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\circle.h" Line="429" Addr="0x200046E0" TI="6936"/>\r
+   <variable Name="BatState" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="33" Addr="0x20004704" TI="6748"/>\r
+   <variable Name="OldBatState" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="34" Addr="0x20004700" TI="6748"/>\r
+   <variable Name="OldTHH" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="35" Addr="0x2000470C" TI="6730"/>\r
+   <variable Name="OldTMM" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="36" Addr="0x20004714" TI="6730"/>\r
+   <variable Name="OldTSS" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="37" Addr="0x20004718" TI="6730"/>\r
+   <variable Name="OldTemp" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="38" Addr="0x20004720" TI="6730"/>\r
+   <variable Name="xBat" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="39" Addr="0x2000471C" TI="6748"/>\r
+   <variable Name="yBat" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="40" Addr="0x20004708" TI="6748"/>\r
+   <variable Name="widthBat" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="41" Addr="0x20004724" TI="6748"/>\r
+   <variable Name="heightBat" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="42" Addr="0x20004728" TI="6748"/>\r
+   <variable Name="UsbState" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="43" Addr="0x20004726" TI="6766"/>\r
+   <variable Name="OldUsbState" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="43" Addr="0x20004706" TI="6766"/>\r
+   <variable Name="rotate_counter" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="47" Addr="0x200000A4" TI="6959"/>\r
+   <variable Name="previous_H12" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="48" Addr="0x20000026" TI="6925"/>\r
+   <variable Name="previous_previous_H12" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="49" Addr="0x20000027" TI="6925"/>\r
+   <variable Name="H12" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="50" Addr="0x20004702" TI="6925"/>\r
+   <variable Name="CurrentScreenOrientation" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="51" Addr="0x20004710" TI="6925"/>\r
+   <variable Name="CurrentRotateScreen" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\draw.c" Line="52" Addr="0x20000028" TI="6959"/>\r
+  </module>\r
+  <module Name="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" >\r
+   <type Family="Base" Name="long int" ID="8502"/>\r
+   <type Family="typedef" Name="s32" Line="28" ID="8491" toTI="8502"/>\r
+   <type Family="Base" Name="short int" ID="8520"/>\r
+   <type Family="typedef" Name="s16" Line="29" ID="8509" toTI="8520"/>\r
+   <type Family="Base" Name="signed char" ID="8527"/>\r
+   <type Family="Base" Name="long unsigned int" ID="8545"/>\r
+   <type Family="typedef" Name="u32" Line="36" ID="8534" toTI="8545"/>\r
+   <type Family="Base" Name="short unsigned int" ID="8563"/>\r
+   <type Family="typedef" Name="u16" Line="37" ID="8552" toTI="8563"/>\r
+   <type Family="Base" Name="unsigned char" ID="8580"/>\r
+   <type Family="typedef" Name="u8" Line="38" ID="8570" toTI="8580"/>\r
+   <type Family="ComponentList" Line="200" ID="8642">\r
+    <Component Name="CRL" TI="8650" Line="201" Offs="0"/>\r
+    <Component Name="CRH" TI="8664" Line="202" Offs="4"/>\r
+    <Component Name="IDR" TI="8678" Line="203" Offs="8"/>\r
+    <Component Name="ODR" TI="8692" Line="204" Offs="12"/>\r
+    <Component Name="BSRR" TI="8706" Line="205" Offs="16"/>\r
+    <Component Name="BRR" TI="8720" Line="206" Offs="20"/>\r
+    <Component Name="LCKR" TI="8734" Line="207" Offs="24"/>\r
+   </type>\r
+   <type Family="ComponentList" Line="331" ID="8749">\r
+    <Component Name="CR1" TI="8758" Line="332" Offs="0"/>\r
+    <Component Name="RESERVED0" TI="8773" Line="333" Offs="2"/>\r
+    <Component Name="CR2" TI="8788" Line="334" Offs="4"/>\r
+    <Component Name="RESERVED1" TI="8803" Line="335" Offs="6"/>\r
+    <Component Name="SR" TI="8818" Line="336" Offs="8"/>\r
+    <Component Name="RESERVED2" TI="8832" Line="337" Offs="10"/>\r
+    <Component Name="DR" TI="8847" Line="338" Offs="12"/>\r
+    <Component Name="RESERVED3" TI="8861" Line="339" Offs="14"/>\r
+    <Component Name="CRCPR" TI="8876" Line="340" Offs="16"/>\r
+    <Component Name="RESERVED4" TI="8891" Line="341" Offs="18"/>\r
+    <Component Name="RXCRCR" TI="8906" Line="342" Offs="20"/>\r
+    <Component Name="RESERVED5" TI="8921" Line="343" Offs="22"/>\r
+    <Component Name="TXCRCR" TI="8936" Line="344" Offs="24"/>\r
+    <Component Name="RESERVED6" TI="8951" Line="345" Offs="26"/>\r
+   </type>\r
+   <type Family="typedef" Name="GPIOSpeed_TypeDef" Line="36" ID="8994" toTI="8967"/>\r
+   <type Family="typedef" Name="GPIOMode_TypeDef" Line="51" ID="9063" toTI="9005"/>\r
+   <type Family="ComponentList" Line="60" ID="9074">\r
+    <Component Name="GPIO_Pin" TI="9082" Line="61" Offs="0"/>\r
+    <Component Name="GPIO_Speed" TI="9096" Line="62" Offs="2"/>\r
+    <Component Name="GPIO_Mode" TI="9110" Line="63" Offs="3"/>\r
+   </type>\r
+   <type Family="typedef" Name="GPIO_InitTypeDef" Line="64" ID="9125" toTI="9074"/>\r
+   <type Family="ComponentList" Line="32" ID="9157">\r
+    <Component Name="SPI_Direction" TI="9165" Line="33" Offs="0"/>\r
+    <Component Name="SPI_Mode" TI="9179" Line="34" Offs="2"/>\r
+    <Component Name="SPI_DataSize" TI="9193" Line="35" Offs="4"/>\r
+    <Component Name="SPI_CPOL" TI="9207" Line="36" Offs="6"/>\r
+    <Component Name="SPI_CPHA" TI="9221" Line="37" Offs="8"/>\r
+    <Component Name="SPI_NSS" TI="9235" Line="38" Offs="10"/>\r
+    <Component Name="SPI_BaudRatePrescaler" TI="9249" Line="39" Offs="12"/>\r
+    <Component Name="SPI_FirstBit" TI="9263" Line="40" Offs="14"/>\r
+    <Component Name="SPI_CRCPolynomial" TI="9277" Line="41" Offs="16"/>\r
+   </type>\r
+   <type Family="typedef" Name="SPI_InitTypeDef" Line="42" ID="9292" toTI="9157"/>\r
+   <type Family="typedef" Name="Rotate_H12_V_Match_TypeDef" Line="101" ID="9442" toTI="9412"/>\r
+   <type Family="ComponentList" Line="104" ID="9453">\r
+    <Component Name="OutX" TI="9461" Line="105" Offs="0"/>\r
+    <Component Name="OutX_F4" TI="9475" Line="106" Offs="2"/>\r
+    <Component Name="OutX_F16" TI="9489" Line="107" Offs="4"/>\r
+    <Component Name="OutX_F64" TI="9503" Line="108" Offs="8"/>\r
+    <Component Name="OutX_F256" TI="9517" Line="109" Offs="12"/>\r
+    <Component Name="OutY" TI="9531" Line="110" Offs="16"/>\r
+    <Component Name="OutY_F4" TI="9545" Line="111" Offs="18"/>\r
+    <Component Name="OutY_F16" TI="9559" Line="112" Offs="20"/>\r
+    <Component Name="OutY_F64" TI="9573" Line="113" Offs="24"/>\r
+    <Component Name="OutY_F256" TI="9587" Line="114" Offs="28"/>\r
+    <Component Name="OutZ" TI="9601" Line="115" Offs="32"/>\r
+    <Component Name="OutZ_F4" TI="9615" Line="116" Offs="34"/>\r
+    <Component Name="OutZ_F16" TI="9629" Line="117" Offs="36"/>\r
+    <Component Name="OutZ_F64" TI="9643" Line="118" Offs="40"/>\r
+    <Component Name="OutZ_F256" TI="9657" Line="119" Offs="44"/>\r
+    <Component Name="Shocked" TI="9671" Line="120" Offs="48"/>\r
+    <Component Name="RELATIVE_X" TI="9685" Line="121" Offs="50"/>\r
+    <Component Name="RELATIVE_Y" TI="9699" Line="122" Offs="52"/>\r
+    <Component Name="DoubleClick" TI="9713" Line="123" Offs="54"/>\r
+   </type>\r
+   <type Family="typedef" Name="tMEMS_Info" Line="124" ID="9728" toTI="9453"/>\r
+   <type Family="Pointer" TI="9739" toTI="9745"/>\r
+   <type Family="Base" Name="int" ID="9762"/>\r
+   <type Family="Base" Name="char" ID="9819"/>\r
+   <type Family="Base" Name="unsigned int" ID="9826"/>\r
+   <function Name="MEMS_GetPosition" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" Line="523">\r
+   <type Family="Pointer" TI="9884" toTI="8509"/>\r
+    <parameter Name="pX" TI="9884" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" Line="523" Addr="0x0" Param="Yes"/>\r
+    <parameter Name="pY" TI="9884" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" Line="523" Addr="0x1" Param="Yes"/>\r
+   </function >\r
+   <function Name="MEMS_GetRotation" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" Line="542">\r
+   <type Family="Pointer" TI="9963" toTI="9442"/>\r
+    <parameter Name="pH12" TI="9963" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" Line="542" Addr="0x0" Param="Yes"/>\r
+    <variable Name="sX" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" Line="543" Addr="0xE" TI="8509"/>\r
+    <variable Name="sY" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" Line="544" Addr="0xC" TI="8509"/>\r
+   </function >\r
+   <function Name="MEMS_SetNeutral" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" Line="584">\r
+   </function >\r
+   <type Family="Pointer" TI="10015" toTI="9728"/>\r
+   <function Name="MEMS_GetInfo" TI="10015" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" Line="603">\r
+   </function >\r
+   <function Name="MEMS_SendByte" TI="8570" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" Line="236">\r
+    <parameter Name="byte" TI="8570" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" Line="236" Addr="0x0" Param="Yes"/>\r
+   </function >\r
+   <function Name="MEMS_ChipSelect" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" Line="215">\r
+    <parameter Name="State" TI="8570" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" Line="215" Addr="0x0" Param="Yes"/>\r
+   </function >\r
+   <function Name="MEMS_ReadID" TI="8570" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" Line="482">\r
+   </function >\r
+   <function Name="MEMS_ReadOutXY" TI="8534" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" Line="138">\r
+   </function >\r
+   <function Name="MEMS_Handler" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" Line="381">\r
+   <type Family="array" ID="10304" toTI="9819"/>\r
+   </function >\r
+   <function Name="MEMS_Init" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" Line="266">\r
+    <variable Name="SPI_InitStructure" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" Line="267" Addr="0x340FFFD6" TI="9292"/>\r
+    <variable Name="GPIO_InitStructure" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" Line="268" Addr="0x340FFFD2" TI="9125"/>\r
+    <variable Name="i" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" Line="314" Addr="0x7" TI="9762"/>\r
+   </function >\r
+   <variable Name="dummy_var" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\circle.h" Line="77" Addr="0x200046E4" TI="9303"/>\r
+   <variable Name="MEMS_Info" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" Line="37" Addr="0x200000A8" TI="9728"/>\r
+   <type Family="Pointer" TI="9739" toTI="9745"/>\r
+   <variable Name="Application_Pointer_Mgr" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\circle.h" Line="429" Addr="0x200046E0" TI="9739"/>\r
+   <variable Name="TestingActive" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" Line="38" Addr="0x200000F8" TI="9762"/>\r
+   <variable Name="StartingFromResetOrShockCounter" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" Line="39" Addr="0x2000002C" TI="9762"/>\r
+   <variable Name="TimeCounterForDoubleClick" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" Line="40" Addr="0x200000E8" TI="9762"/>\r
+   <variable Name="TimeLastShock" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" Line="41" Addr="0x200000F4" TI="9762"/>\r
+   <variable Name="Gradient2" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" Line="44" Addr="0x20004734" TI="8534"/>\r
+   <variable Name="N_filtering" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" Line="47" Addr="0x200000E4" TI="9826"/>\r
+   <variable Name="GradX" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" Line="50" Addr="0x200000EC" TI="8509"/>\r
+   <variable Name="GradY" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" Line="51" Addr="0x200000EE" TI="8509"/>\r
+   <variable Name="GradZ" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" Line="52" Addr="0x200000F0" TI="8509"/>\r
+   <variable Name="fMovePtrX" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" Line="59" Addr="0x20004740" TI="9762"/>\r
+   <variable Name="iMovePtrX" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" Line="60" Addr="0x2000473C" TI="9762"/>\r
+   <variable Name="tMovePtrX" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" Line="61" Addr="0x20004750" TI="9762"/>\r
+   <variable Name="fMovePtrY" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" Line="62" Addr="0x20004748" TI="9762"/>\r
+   <variable Name="iMovePtrY" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" Line="63" Addr="0x20004738" TI="9762"/>\r
+   <variable Name="tMovePtrY" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" Line="64" Addr="0x20004730" TI="9762"/>\r
+   <variable Name="fMovePtrZ" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" Line="65" Addr="0x2000472C" TI="9762"/>\r
+   <variable Name="iMovePtrZ" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" Line="66" Addr="0x20004744" TI="9762"/>\r
+   <variable Name="tMovePtrZ" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" Line="67" Addr="0x2000474C" TI="9762"/>\r
+   <variable Name="XInit" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" Line="69" Addr="0x200000E0" TI="8509"/>\r
+   <variable Name="YInit" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" Line="70" Addr="0x200000E2" TI="8509"/>\r
+   <variable Name="ZInit" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\mems.c" Line="71" Addr="0x200000FC" TI="8509"/>\r
+  </module>\r
+  <module Name="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\buzzer.c" >\r
+   <type Family="Base" Name="long int" ID="10942"/>\r
+   <type Family="Base" Name="short int" ID="10949"/>\r
+   <type Family="Base" Name="signed char" ID="10956"/>\r
+   <type Family="Base" Name="long unsigned int" ID="10974"/>\r
+   <type Family="typedef" Name="u32" Line="36" ID="10963" toTI="10974"/>\r
+   <type Family="Base" Name="short unsigned int" ID="10992"/>\r
+   <type Family="typedef" Name="u16" Line="37" ID="10981" toTI="10992"/>\r
+   <type Family="Base" Name="unsigned char" ID="11009"/>\r
+   <type Family="typedef" Name="u8" Line="38" ID="10999" toTI="11009"/>\r
+   <type Family="ComponentList" Line="200" ID="11050">\r
+    <Component Name="CRL" TI="11058" Line="201" Offs="0"/>\r
+    <Component Name="CRH" TI="11072" Line="202" Offs="4"/>\r
+    <Component Name="IDR" TI="11086" Line="203" Offs="8"/>\r
+    <Component Name="ODR" TI="11100" Line="204" Offs="12"/>\r
+    <Component Name="BSRR" TI="11114" Line="205" Offs="16"/>\r
+    <Component Name="BRR" TI="11128" Line="206" Offs="20"/>\r
+    <Component Name="LCKR" TI="11142" Line="207" Offs="24"/>\r
+   </type>\r
+   <type Family="ComponentList" Line="404" ID="11157">\r
+    <Component Name="CR1" TI="11166" Line="405" Offs="0"/>\r
+    <Component Name="RESERVED0" TI="11181" Line="406" Offs="2"/>\r
+    <Component Name="CR2" TI="11196" Line="407" Offs="4"/>\r
+    <Component Name="RESERVED1" TI="11211" Line="408" Offs="6"/>\r
+    <Component Name="SMCR" TI="11226" Line="409" Offs="8"/>\r
+    <Component Name="RESERVED2" TI="11241" Line="410" Offs="10"/>\r
+    <Component Name="DIER" TI="11256" Line="411" Offs="12"/>\r
+    <Component Name="RESERVED3" TI="11271" Line="412" Offs="14"/>\r
+    <Component Name="SR" TI="11286" Line="413" Offs="16"/>\r
+    <Component Name="RESERVED4" TI="11300" Line="414" Offs="18"/>\r
+    <Component Name="EGR" TI="11315" Line="415" Offs="20"/>\r
+    <Component Name="RESERVED5" TI="11330" Line="416" Offs="22"/>\r
+    <Component Name="CCMR1" TI="11345" Line="417" Offs="24"/>\r
+    <Component Name="RESERVED6" TI="11360" Line="418" Offs="26"/>\r
+    <Component Name="CCMR2" TI="11375" Line="419" Offs="28"/>\r
+    <Component Name="RESERVED7" TI="11390" Line="420" Offs="30"/>\r
+    <Component Name="CCER" TI="11405" Line="421" Offs="32"/>\r
+    <Component Name="RESERVED8" TI="11420" Line="422" Offs="34"/>\r
+    <Component Name="CNT" TI="11435" Line="423" Offs="36"/>\r
+    <Component Name="RESERVED9" TI="11450" Line="424" Offs="38"/>\r
+    <Component Name="PSC" TI="11465" Line="425" Offs="40"/>\r
+    <Component Name="RESERVED10" TI="11480" Line="426" Offs="42"/>\r
+    <Component Name="ARR" TI="11495" Line="427" Offs="44"/>\r
+   <type Family="array" ID="11706" toTI="10981"/>\r
+    <Component Name="RESERVED11" TI="11510" Line="428" Offs="46"/>\r
+    <Component Name="CCR1" TI="11525" Line="429" Offs="52"/>\r
+    <Component Name="RESERVED12" TI="11540" Line="430" Offs="54"/>\r
+    <Component Name="CCR2" TI="11555" Line="431" Offs="56"/>\r
+    <Component Name="RESERVED13" TI="11570" Line="432" Offs="58"/>\r
+    <Component Name="CCR3" TI="11585" Line="433" Offs="60"/>\r
+    <Component Name="RESERVED14" TI="11600" Line="434" Offs="62"/>\r
+    <Component Name="CCR4" TI="11615" Line="435" Offs="64"/>\r
+    <Component Name="RESERVED15" TI="11630" Line="436" Offs="66"/>\r
+    <Component Name="DCR" TI="11645" Line="437" Offs="72"/>\r
+    <Component Name="RESERVED16" TI="11660" Line="438" Offs="74"/>\r
+    <Component Name="DMAR" TI="11675" Line="439" Offs="76"/>\r
+    <Component Name="RESERVED17" TI="11690" Line="440" Offs="78"/>\r
+   </type>\r
+   <type Family="typedef" Name="GPIOSpeed_TypeDef" Line="36" ID="11749" toTI="11722"/>\r
+   <type Family="typedef" Name="GPIOMode_TypeDef" Line="51" ID="11818" toTI="11760"/>\r
+   <type Family="ComponentList" Line="60" ID="11829">\r
+    <Component Name="GPIO_Pin" TI="11837" Line="61" Offs="0"/>\r
+    <Component Name="GPIO_Speed" TI="11851" Line="62" Offs="2"/>\r
+    <Component Name="GPIO_Mode" TI="11865" Line="63" Offs="3"/>\r
+   </type>\r
+   <type Family="typedef" Name="GPIO_InitTypeDef" Line="64" ID="11880" toTI="11829"/>\r
+   <type Family="ComponentList" Line="31" ID="11891">\r
+    <Component Name="SYSCLK_Frequency" TI="11899" Line="32" Offs="0"/>\r
+    <Component Name="HCLK_Frequency" TI="11913" Line="33" Offs="4"/>\r
+    <Component Name="PCLK1_Frequency" TI="11927" Line="34" Offs="8"/>\r
+    <Component Name="PCLK2_Frequency" TI="11941" Line="35" Offs="12"/>\r
+    <Component Name="ADCCLK_Frequency" TI="11955" Line="36" Offs="16"/>\r
+   </type>\r
+   <type Family="typedef" Name="RCC_ClocksTypeDef" Line="37" ID="11970" toTI="11891"/>\r
+   <type Family="ComponentList" Line="33" ID="11981">\r
+    <Component Name="TIM_Period" TI="11989" Line="34" Offs="0"/>\r
+    <Component Name="TIM_Prescaler" TI="12003" Line="35" Offs="2"/>\r
+    <Component Name="TIM_ClockDivision" TI="12017" Line="36" Offs="4"/>\r
+    <Component Name="TIM_CounterMode" TI="12031" Line="37" Offs="6"/>\r
+   </type>\r
+   <type Family="typedef" Name="TIM_TimeBaseInitTypeDef" Line="38" ID="12046" toTI="11981"/>\r
+   <type Family="ComponentList" Line="42" ID="12057">\r
+    <Component Name="TIM_OCMode" TI="12065" Line="43" Offs="0"/>\r
+    <Component Name="TIM_Channel" TI="12079" Line="44" Offs="2"/>\r
+    <Component Name="TIM_Pulse" TI="12093" Line="45" Offs="4"/>\r
+    <Component Name="TIM_OCPolarity" TI="12107" Line="46" Offs="6"/>\r
+   </type>\r
+   <type Family="typedef" Name="TIM_OCInitTypeDef" Line="47" ID="12122" toTI="12057"/>\r
+   <type Family="Pointer" TI="12242" toTI="12248"/>\r
+   <type Family="Base" Name="int" ID="12265"/>\r
+   <type Family="Base" Name="char" ID="12322"/>\r
+   <type Family="Base" Name="unsigned int" ID="12329"/>\r
+   <function Name="BUZZER_GetMode" TI="12272" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\buzzer.c" Line="358">\r
+   </function >\r
+   <function Name="BUZZER_SetFrequency" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\buzzer.c" Line="195">\r
+    <parameter Name="freq" TI="10981" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\buzzer.c" Line="195" Addr="0x0" Param="Yes"/>\r
+   </function >\r
+   <function Name="PlayMusic" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\buzzer.c" Line="104">\r
+    <variable Name="duration" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\buzzer.c" Line="105" Addr="0xC" TI="10999"/>\r
+    <variable Name="c" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\buzzer.c" Line="106" Addr="0x1" TI="10999"/>\r
+   </function >\r
+   <function Name="BUZZER_SetMode" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\buzzer.c" Line="376">\r
+    <parameter Name="mode" TI="12272" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\buzzer.c" Line="376" Addr="0x0" Param="Yes"/>\r
+   </function >\r
+   <function Name="BUZZER_PlayMusic" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\buzzer.c" Line="464">\r
+   <type Family="Pointer" TI="12719" toTI="12725"/>\r
+    <parameter Name="melody" TI="12719" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\buzzer.c" Line="464" Addr="0x0" Param="Yes"/>\r
+    <variable Name="c" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\buzzer.c" Line="465" Addr="0x1" TI="10999"/>\r
+    <variable Name="default_id" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\buzzer.c" Line="466" Addr="0xE" TI="10999"/>\r
+    <variable Name="default_val" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\buzzer.c" Line="467" Addr="0x4" TI="10981"/>\r
+   </function >\r
+   <function Name="BUZZER_Handler" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\buzzer.c" Line="291">\r
+   </function >\r
+   <function Name="BUZZER_Init" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\buzzer.c" Line="231">\r
+    <variable Name="GPIO_InitStructure" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\buzzer.c" Line="232" Addr="0x340FFFDC" TI="11880"/>\r
+   </function >\r
+   <variable Name="TIM_TimeBaseStructure" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\buzzer.c" Line="54" Addr="0x20000100" TI="12046"/>\r
+   <variable Name="TIM_OCInitStructure" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\buzzer.c" Line="55" Addr="0x20000108" TI="12122"/>\r
+   <variable Name="dummy_var" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\circle.h" Line="77" Addr="0x200046E4" TI="12133"/>\r
+   <type Family="Pointer" TI="12242" toTI="12248"/>\r
+   <variable Name="Application_Pointer_Mgr" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\circle.h" Line="429" Addr="0x200046E0" TI="12242"/>\r
+   <variable Name="octave" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\buzzer.c" Line="26" Addr="0x20004755" TI="12336"/>\r
+   <variable Name="note" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\buzzer.c" Line="43" Addr="0x20004754" TI="12379"/>\r
+   <variable Name="buzz_counter" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\buzzer.c" Line="52" Addr="0x2000011C" TI="12265"/>\r
+   <variable Name="buzz_in_progress" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\buzzer.c" Line="53" Addr="0x20000120" TI="12265"/>\r
+   <variable Name="CCR_Val" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\buzzer.c" Line="56" Addr="0x20000032" TI="10981"/>\r
+   <variable Name="Buzzer_Mode" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\buzzer.c" Line="57" Addr="0x20000030" TI="12272"/>\r
+   <variable Name="Buzzer_Counter" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\buzzer.c" Line="58" Addr="0x20000114" TI="10963"/>\r
+   <variable Name="CurrentMelody" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\buzzer.c" Line="61" Addr="0x20000110" TI="12719"/>\r
+   <variable Name="CurrentMelodySTART" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\buzzer.c" Line="62" Addr="0x20000118" TI="12719"/>\r
+   <variable Name="DefaultOctave" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\buzzer.c" Line="63" Addr="0x20000038" TI="10999"/>\r
+   <variable Name="DefaultDuration" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\buzzer.c" Line="64" Addr="0x20000034" TI="10999"/>\r
+   <variable Name="DefaultBeats" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\buzzer.c" Line="65" Addr="0x20000036" TI="10981"/>\r
+   <type Family="array" ID="13109" toTI="10981"/>\r
+   <variable Name="Note_Freq" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\buzzer.c" Line="67" Addr="0x2000003A" TI="13109"/>\r
+  </module>\r
+  <module Name="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" >\r
+   <type Family="Base" Name="long int" ID="13184"/>\r
+   <type Family="typedef" Name="s32" Line="28" ID="13173" toTI="13184"/>\r
+   <type Family="Base" Name="short int" ID="13202"/>\r
+   <type Family="typedef" Name="s16" Line="29" ID="13191" toTI="13202"/>\r
+   <type Family="Base" Name="signed char" ID="13209"/>\r
+   <type Family="Base" Name="long unsigned int" ID="13227"/>\r
+   <type Family="typedef" Name="u32" Line="36" ID="13216" toTI="13227"/>\r
+   <type Family="Base" Name="short unsigned int" ID="13245"/>\r
+   <type Family="typedef" Name="u16" Line="37" ID="13234" toTI="13245"/>\r
+   <type Family="Base" Name="unsigned char" ID="13262"/>\r
+   <type Family="typedef" Name="u8" Line="38" ID="13252" toTI="13262"/>\r
+   <type Family="ComponentList" Line="104" ID="13411">\r
+    <Component Name="OutX" TI="13419" Line="105" Offs="0"/>\r
+    <Component Name="OutX_F4" TI="13433" Line="106" Offs="2"/>\r
+    <Component Name="OutX_F16" TI="13447" Line="107" Offs="4"/>\r
+    <Component Name="OutX_F64" TI="13461" Line="108" Offs="8"/>\r
+    <Component Name="OutX_F256" TI="13475" Line="109" Offs="12"/>\r
+    <Component Name="OutY" TI="13489" Line="110" Offs="16"/>\r
+    <Component Name="OutY_F4" TI="13503" Line="111" Offs="18"/>\r
+    <Component Name="OutY_F16" TI="13517" Line="112" Offs="20"/>\r
+    <Component Name="OutY_F64" TI="13531" Line="113" Offs="24"/>\r
+    <Component Name="OutY_F256" TI="13545" Line="114" Offs="28"/>\r
+    <Component Name="OutZ" TI="13559" Line="115" Offs="32"/>\r
+    <Component Name="OutZ_F4" TI="13573" Line="116" Offs="34"/>\r
+    <Component Name="OutZ_F16" TI="13587" Line="117" Offs="36"/>\r
+    <Component Name="OutZ_F64" TI="13601" Line="118" Offs="40"/>\r
+    <Component Name="OutZ_F256" TI="13615" Line="119" Offs="44"/>\r
+    <Component Name="Shocked" TI="13629" Line="120" Offs="48"/>\r
+    <Component Name="RELATIVE_X" TI="13643" Line="121" Offs="50"/>\r
+    <Component Name="RELATIVE_Y" TI="13657" Line="122" Offs="52"/>\r
+    <Component Name="DoubleClick" TI="13671" Line="123" Offs="54"/>\r
+   </type>\r
+   <type Family="typedef" Name="tMEMS_Info" Line="124" ID="13686" toTI="13411"/>\r
+   <type Family="ComponentList" Line="185" ID="13777">\r
+    <Component Name="xPos" TI="13785" Line="186" Offs="0"/>\r
+    <Component Name="yPos" TI="13799" Line="187" Offs="2"/>\r
+    <Component Name="shift_PosX" TI="13813" Line="188" Offs="4"/>\r
+    <Component Name="shift_PosY" TI="13827" Line="189" Offs="6"/>\r
+    <Component Name="X_PosMin" TI="13841" Line="190" Offs="8"/>\r
+    <Component Name="Y_PosMin" TI="13855" Line="191" Offs="10"/>\r
+    <Component Name="X_PosMax" TI="13869" Line="192" Offs="12"/>\r
+    <Component Name="Y_PosMax" TI="13883" Line="193" Offs="14"/>\r
+   </type>\r
+   <type Family="typedef" Name="tPointer_Info" Line="194" ID="13898" toTI="13777"/>\r
+   <type Family="Pointer" TI="13920" toTI="13926"/>\r
+   <type Family="typedef" Name="tAppPtrMgr" Line="226" ID="13909" toTI="13920"/>\r
+   <type Family="Pointer" TI="13920" toTI="13926"/>\r
+   <type Family="Base" Name="int" ID="13943"/>\r
+   <type Family="Base" Name="char" ID="13950"/>\r
+   <type Family="Base" Name="unsigned int" ID="13957"/>\r
+   <function Name="POINTER_SetCurrentPointer" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="351">\r
+    <parameter Name="width" TI="13252" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="351" Addr="0x0" Param="Yes"/>\r
+    <parameter Name="height" TI="13252" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="351" Addr="0x1" Param="Yes"/>\r
+   <type Family="Pointer" TI="14031" toTI="13252"/>\r
+    <parameter Name="bmp" TI="14031" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="351" Addr="0x2" Param="Yes"/>\r
+   </function >\r
+   <function Name="POINTER_GetCurrentAngleStart" TI="13234" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="376">\r
+   </function >\r
+   <function Name="POINTER_SetCurrentAngleStart" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="394">\r
+    <parameter Name="newangle" TI="13234" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="394" Addr="0x0" Param="Yes"/>\r
+   </function >\r
+   <function Name="POINTER_GetCurrentSpeedOnAngle" TI="13234" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="412">\r
+   </function >\r
+   <function Name="POINTER_SetCurrentSpeedOnAngle" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="430">\r
+    <parameter Name="newspeed" TI="13234" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="430" Addr="0x0" Param="Yes"/>\r
+   </function >\r
+   <function Name="POINTER_SetCurrentAreaStore" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="453">\r
+    <parameter Name="ptr" TI="14031" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="453" Addr="0x0" Param="Yes"/>\r
+   </function >\r
+   <function Name="POINTER_GetMode" TI="13697" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="532">\r
+   </function >\r
+   <function Name="POINTER_GetState" TI="13746" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="550">\r
+   </function >\r
+   <function Name="POINTER_SetRect" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="573">\r
+    <parameter Name="x" TI="13191" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="573" Addr="0x0" Param="Yes"/>\r
+    <parameter Name="y" TI="13191" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="573" Addr="0x1" Param="Yes"/>\r
+    <parameter Name="width" TI="13191" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="573" Addr="0x2" Param="Yes"/>\r
+    <parameter Name="height" TI="13191" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="573" Addr="0x3" Param="Yes"/>\r
+   </function >\r
+   <function Name="POINTER_SetRectScreen" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="615">\r
+   </function >\r
+   <function Name="POINTER_GetPos" TI="13234" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="634">\r
+   </function >\r
+   <function Name="POINTER_SetPos" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="655">\r
+    <parameter Name="x" TI="13234" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="655" Addr="0x0" Param="Yes"/>\r
+    <parameter Name="y" TI="13234" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="655" Addr="0x1" Param="Yes"/>\r
+   </function >\r
+   <function Name="POINTER_SetApplication_Pointer_Mgr" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="845">\r
+   <type Family="Pointer" TI="13920" toTI="13926"/>\r
+   <type Family="typedef" Name="tAppPtrMgr" Line="226" ID="13909" toTI="13920"/>\r
+    <parameter Name="mgr" TI="13909" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="845" Addr="0x0" Param="Yes"/>\r
+   </function >\r
+   <function Name="POINTER_SetColor" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="863">\r
+    <parameter Name="color" TI="13234" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="863" Addr="0x0" Param="Yes"/>\r
+   </function >\r
+   <function Name="POINTER_GetColor" TI="13234" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="881">\r
+   </function >\r
+   <type Family="Pointer" TI="14558" toTI="13898"/>\r
+   <function Name="POINTER_GetInfo" TI="14558" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="899">\r
+   </function >\r
+   <function Name="POINTER_Restore" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="806">\r
+    <parameter Name="x" TI="13252" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="806" Addr="0x0" Param="Yes"/>\r
+    <parameter Name="y" TI="13252" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="806" Addr="0x1" Param="Yes"/>\r
+    <parameter Name="width" TI="13252" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="806" Addr="0x2" Param="Yes"/>\r
+    <parameter Name="height" TI="13252" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="806" Addr="0x3" Param="Yes"/>\r
+    <variable Name="i" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="807" Addr="0x4" TI="13943"/>\r
+   <type Family="Pointer" TI="14691" toTI="13950"/>\r
+    <variable Name="ptr" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="808" Addr="0x5" TI="14691"/>\r
+    <variable Name="bytesize" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="809" Addr="0x6" TI="13943"/>\r
+   </function >\r
+   <function Name="POINTER_Draw" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="682">\r
+    <parameter Name="x" TI="13252" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="682" Addr="0x0" Param="Yes"/>\r
+    <parameter Name="y" TI="13252" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="682" Addr="0x1" Param="Yes"/>\r
+    <parameter Name="width" TI="13252" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="682" Addr="0x2" Param="Yes"/>\r
+    <parameter Name="height" TI="13252" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="682" Addr="0x3" Param="Yes"/>\r
+    <parameter Name="bmp" TI="14031" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="682" Addr="0x34000000" Param="Yes"/>\r
+    <variable Name="i" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="683" Addr="0x5" TI="13943"/>\r
+    <variable Name="l" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="684" Addr="0x9" TI="13943"/>\r
+    <variable Name="n" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="685" Addr="0xA" TI="13943"/>\r
+    <variable Name="ptr" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="686" Addr="0x6" TI="14691"/>\r
+    <variable Name="c" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="687" Addr="0x0" TI="13950"/>\r
+    <variable Name="val" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="688" Addr="0x4" TI="13234"/>\r
+   </function >\r
+   <function Name="POINTER_Save" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="759">\r
+    <parameter Name="x" TI="13252" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="759" Addr="0x0" Param="Yes"/>\r
+    <parameter Name="y" TI="13252" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="759" Addr="0x1" Param="Yes"/>\r
+    <parameter Name="width" TI="13252" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="759" Addr="0x2" Param="Yes"/>\r
+    <parameter Name="height" TI="13252" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="759" Addr="0x3" Param="Yes"/>\r
+    <variable Name="i" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="760" Addr="0x4" TI="13943"/>\r
+    <variable Name="bytesize" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="762" Addr="0x5" TI="13943"/>\r
+   </function >\r
+   <function Name="POINTER_SetMode" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="473">\r
+    <parameter Name="mode" TI="13697" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="473" Addr="0x0" Param="Yes"/>\r
+   <type Family="Pointer" TI="15094" toTI="13234"/>\r
+    <variable Name="i" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="475" Addr="0x1" TI="13234"/>\r
+    <variable Name="color" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="476" Addr="0x0" TI="13234"/>\r
+   </function >\r
+   <function Name="POINTER_Init" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="289">\r
+   </function >\r
+   <function Name="POINTER_Handler" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="315">\r
+    <variable Name="oldPointer_xPos" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="85" Addr="0x9" TI="0"/>\r
+    <variable Name="oldPointer_yPos" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="86" Addr="0xB" TI="0"/>\r
+    <variable Name="unmodied_shift_PosY" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="88" Addr="0x2" TI="0"/>\r
+    <variable Name="outx" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="89" Addr="0x8" TI="0"/>\r
+    <variable Name="outy" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="90" Addr="0x7" TI="0"/>\r
+   </function >\r
+   <variable Name="dummy_var" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\circle.h" Line="77" Addr="0x200046E4" TI="13272"/>\r
+   <variable Name="POINTER_Info" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="58" Addr="0x20000072" TI="13898"/>\r
+   <type Family="array" ID="15381" toTI="13262"/>\r
+   <variable Name="BallPointerBmp" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="39" Addr="0x2000005C" TI="15381"/>\r
+   <variable Name="CurrentPointerBmp" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="44" Addr="0x20000128" TI="14031"/>\r
+   <variable Name="CurrentPointerColor" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="50" Addr="0x20000082" TI="13234"/>\r
+   <type Family="Pointer" TI="13920" toTI="13926"/>\r
+   <variable Name="Application_Pointer_Mgr" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\circle.h" Line="429" Addr="0x200046E0" TI="13920"/>\r
+   <variable Name="locbuf" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="40" Addr="0x200047BC" TI="15381"/>\r
+   <type Family="array" ID="15488" toTI="13262"/>\r
+   <variable Name="DefaultAreaStore" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="41" Addr="0x20004756" TI="15488"/>\r
+   <variable Name="CurrentPointerWidth" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="45" Addr="0x20000124" TI="13252"/>\r
+   <variable Name="CurrentPointerHeight" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="46" Addr="0x20000125" TI="13252"/>\r
+   <variable Name="CurrentSpeedOnAngle" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="47" Addr="0x20000068" TI="13234"/>\r
+   <variable Name="CurrentAngleStart" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="48" Addr="0x20000064" TI="13216"/>\r
+   <type Family="Pointer" TI="15612" toTI="13262"/>\r
+   <variable Name="ptrAreaStore" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="49" Addr="0x2000006C" TI="15612"/>\r
+   <variable Name="Pointer_Mode" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="51" Addr="0x20000070" TI="13697"/>\r
+   <variable Name="Pointer_State" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="52" Addr="0x20000071" TI="13746"/>\r
+   <variable Name="OUT_X" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="54" Addr="0x200047B8" TI="13191"/>\r
+   <variable Name="OUT_Y" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\pointer.c" Line="55" Addr="0x200047BA" TI="13191"/>\r
+  </module>\r
+  <module Name="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\main.c" >\r
+   <type Family="Base" Name="long int" ID="15720"/>\r
+   <type Family="Base" Name="short int" ID="15727"/>\r
+   <type Family="Base" Name="signed char" ID="15734"/>\r
+   <type Family="Base" Name="long unsigned int" ID="15741"/>\r
+   <type Family="Base" Name="short unsigned int" ID="15748"/>\r
+   <type Family="Base" Name="unsigned char" ID="15755"/>\r
+   <type Family="Pointer" TI="15995" toTI="16001"/>\r
+   <type Family="Base" Name="int" ID="16018"/>\r
+   <type Family="Base" Name="char" ID="16036"/>\r
+   <type Family="Pointer" TI="16025" toTI="16031"/>\r
+   <type Family="Base" Name="unsigned int" ID="16043"/>\r
+   <type Family="Base" Name="long long int" ID="16050"/>\r
+   <type Family="Pointer" TI="16057" toTI="0"/>\r
+   <type Family="Base" Name="long long unsigned int" ID="16059"/>\r
+   <type Family="typedef" Name="portTickType" Line="74" ID="16066" toTI="15741"/>\r
+   <type Family="Pointer" TI="16057" toTI="0"/>\r
+   <type Family="typedef" Name="xQueueHandle" Line="43" ID="16077" toTI="16057"/>\r
+   <type Family="ComponentList" Line="155" ID="16088">\r
+    <Component Name="xMessageType" TI="16096" Line="156" Offs="0"/>\r
+   <type Family="Pointer" TI="16125" toTI="15734"/>\r
+    <Component Name="pcMessage" TI="16110" Line="157" Offs="4"/>\r
+   </type>\r
+   <type Family="typedef" Name="xLCDMessage" Line="158" ID="16131" toTI="16088"/>\r
+   <function Name="starting_delay" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\main.c" Line="460">\r
+    <parameter Name="ul" TI="15741" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\main.c" Line="460" Addr="0x0" Param="Yes"/>\r
+   </function >\r
+   <function Name="vApplicationTickHook" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\main.c" Line="358">\r
+    <variable Name="ulCallCount" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\main.c" Line="359" Addr="0x2000012C" TI="15741"/>\r
+    <variable Name="xMemsMessage" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\main.c" Line="360" Addr="0x8005430" TI="16560"/>\r
+   </function >\r
+   <function Name="main" TI="16018" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\main.c" Line="215">\r
+   </function >\r
+   <function Name="prvFlashTask" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\main.c" Line="443">\r
+   <type Family="Pointer" TI="16057" toTI="0"/>\r
+    <parameter Name="pvParameters" TI="16057" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\main.c" Line="443" Addr="0x0" Param="Yes"/>\r
+    <variable Name="xLastExecutionTime" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\main.c" Line="444" Addr="0x340FFFF8" TI="16066"/>\r
+   </function >\r
+   <function Name="prvLCDTask" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\main.c" Line="251">\r
+   <type Family="Pointer" TI="16057" toTI="0"/>\r
+    <parameter Name="pvParameters" TI="16057" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\main.c" Line="251" Addr="0x0" Param="Yes"/>\r
+    <variable Name="xMessage" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\main.c" Line="252" Addr="0x340FFFE8" TI="16131"/>\r
+    <variable Name="cY" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\main.c" Line="253" Addr="0x6" TI="16036"/>\r
+   </function >\r
+   <function Name="prvCheckTask" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\main.c" Line="301">\r
+   <type Family="Pointer" TI="16057" toTI="0"/>\r
+    <parameter Name="pvParameters" TI="16057" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\main.c" Line="301" Addr="0x0" Param="Yes"/>\r
+    <variable Name="xLastExecutionTime" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\main.c" Line="302" Addr="0x340FFFF8" TI="16066"/>\r
+    <variable Name="xMessage" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\main.c" Line="303" Addr="0x340FFFEC" TI="16131"/>\r
+   <type Family="array" ID="16544" toTI="15734"/>\r
+    <variable Name="cPassMessage" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\main.c" Line="304" Addr="0x20000130" TI="16544"/>\r
+   </function >\r
+   <variable Name="dummy_var" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\circle.h" Line="77" Addr="0x200046E4" TI="15807"/>\r
+   <type Family="Pointer" TI="15995" toTI="16001"/>\r
+   <variable Name="Application_Pointer_Mgr" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ST_Code\circle.h" Line="429" Addr="0x200046E0" TI="15995"/>\r
+   <type Family="array" ID="16602" toTI="15748"/>\r
+   <variable Name="pucImage" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\bitmap.h" Line="42" Addr="0x8005438" TI="16637"/>\r
+   <type Family="Pointer" TI="16057" toTI="0"/>\r
+   <type Family="typedef" Name="xQueueHandle" Line="43" ID="16077" toTI="16057"/>\r
+   <variable Name="xLCDQueue" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\main.c" Line="210" Addr="0x200047C4" TI="16077"/>\r
+  </module>\r
+  <module Name="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ParTest\ParTest.c" >\r
+   <type Family="Base" Name="int" ID="16704"/>\r
+   <type Family="Base" Name="unsigned int" ID="16711"/>\r
+   <type Family="Base" Name="long int" ID="16718"/>\r
+   <type Family="Base" Name="short int" ID="16725"/>\r
+   <type Family="Base" Name="signed char" ID="16732"/>\r
+   <type Family="Base" Name="long unsigned int" ID="16739"/>\r
+   <type Family="Base" Name="short unsigned int" ID="16757"/>\r
+   <type Family="typedef" Name="u16" Line="37" ID="16746" toTI="16757"/>\r
+   <type Family="Base" Name="unsigned char" ID="16764"/>\r
+   <type Family="ComponentList" Line="200" ID="16800">\r
+    <Component Name="CRL" TI="16808" Line="201" Offs="0"/>\r
+    <Component Name="CRH" TI="16822" Line="202" Offs="4"/>\r
+    <Component Name="IDR" TI="16836" Line="203" Offs="8"/>\r
+    <Component Name="ODR" TI="16850" Line="204" Offs="12"/>\r
+    <Component Name="BSRR" TI="16864" Line="205" Offs="16"/>\r
+    <Component Name="BRR" TI="16878" Line="206" Offs="20"/>\r
+    <Component Name="LCKR" TI="16892" Line="207" Offs="24"/>\r
+   </type>\r
+   <type Family="typedef" Name="GPIOSpeed_TypeDef" Line="36" ID="16934" toTI="16907"/>\r
+   <type Family="typedef" Name="GPIOMode_TypeDef" Line="51" ID="17003" toTI="16945"/>\r
+   <type Family="ComponentList" Line="60" ID="17014">\r
+    <Component Name="GPIO_Pin" TI="17022" Line="61" Offs="0"/>\r
+    <Component Name="GPIO_Speed" TI="17036" Line="62" Offs="2"/>\r
+    <Component Name="GPIO_Mode" TI="17050" Line="63" Offs="3"/>\r
+   </type>\r
+   <type Family="typedef" Name="GPIO_InitTypeDef" Line="64" ID="17065" toTI="17014"/>\r
+   <function Name="vParTestToggleLED" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ParTest\ParTest.c" Line="97">\r
+    <parameter Name="uxLED" TI="16739" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ParTest\ParTest.c" Line="97" Addr="0x0" Param="Yes"/>\r
+    <variable Name="usBit" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ParTest\ParTest.c" Line="98" Addr="0x2" TI="16757"/>\r
+   </function >\r
+   <function Name="vParTestSetLED" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ParTest\ParTest.c" Line="70">\r
+    <parameter Name="uxLED" TI="16739" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ParTest\ParTest.c" Line="70" Addr="0x0" Param="Yes"/>\r
+    <parameter Name="xValue" TI="16718" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ParTest\ParTest.c" Line="70" Addr="0x1" Param="Yes"/>\r
+    <variable Name="usBit" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ParTest\ParTest.c" Line="71" Addr="0x0" TI="16757"/>\r
+   </function >\r
+   <function Name="vParTestInitialise" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ParTest\ParTest.c" Line="54">\r
+    <variable Name="GPIO_InitStructure" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ParTest\ParTest.c" Line="55" Addr="0x340FFFF4" TI="17065"/>\r
+   </function >\r
+   <variable Name="usOutputValue" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\ParTest\ParTest.c" Line="49" Addr="0x2000014C" TI="16757"/>\r
+  </module>\r
+  <module Name="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\timertest.c" >\r
+   <type Family="Base" Name="int" ID="17290"/>\r
+   <type Family="Base" Name="unsigned int" ID="17297"/>\r
+   <type Family="Base" Name="long int" ID="17304"/>\r
+   <type Family="Base" Name="short int" ID="17311"/>\r
+   <type Family="Base" Name="signed char" ID="17318"/>\r
+   <type Family="Base" Name="long unsigned int" ID="17325"/>\r
+   <type Family="Base" Name="short unsigned int" ID="17343"/>\r
+   <type Family="typedef" Name="u16" Line="37" ID="17332" toTI="17343"/>\r
+   <type Family="Base" Name="unsigned char" ID="17360"/>\r
+   <type Family="typedef" Name="u8" Line="38" ID="17350" toTI="17360"/>\r
+   <type Family="typedef" Name="FunctionalState" Line="56" ID="17393" toTI="17372"/>\r
+   <type Family="ComponentList" Line="404" ID="17407">\r
+    <Component Name="CR1" TI="17416" Line="405" Offs="0"/>\r
+    <Component Name="RESERVED0" TI="17431" Line="406" Offs="2"/>\r
+    <Component Name="CR2" TI="17446" Line="407" Offs="4"/>\r
+    <Component Name="RESERVED1" TI="17461" Line="408" Offs="6"/>\r
+    <Component Name="SMCR" TI="17476" Line="409" Offs="8"/>\r
+    <Component Name="RESERVED2" TI="17491" Line="410" Offs="10"/>\r
+    <Component Name="DIER" TI="17506" Line="411" Offs="12"/>\r
+    <Component Name="RESERVED3" TI="17521" Line="412" Offs="14"/>\r
+    <Component Name="SR" TI="17536" Line="413" Offs="16"/>\r
+    <Component Name="RESERVED4" TI="17550" Line="414" Offs="18"/>\r
+    <Component Name="EGR" TI="17565" Line="415" Offs="20"/>\r
+    <Component Name="RESERVED5" TI="17580" Line="416" Offs="22"/>\r
+    <Component Name="CCMR1" TI="17595" Line="417" Offs="24"/>\r
+    <Component Name="RESERVED6" TI="17610" Line="418" Offs="26"/>\r
+    <Component Name="CCMR2" TI="17625" Line="419" Offs="28"/>\r
+    <Component Name="RESERVED7" TI="17640" Line="420" Offs="30"/>\r
+    <Component Name="CCER" TI="17655" Line="421" Offs="32"/>\r
+    <Component Name="RESERVED8" TI="17670" Line="422" Offs="34"/>\r
+    <Component Name="CNT" TI="17685" Line="423" Offs="36"/>\r
+    <Component Name="RESERVED9" TI="17700" Line="424" Offs="38"/>\r
+    <Component Name="PSC" TI="17715" Line="425" Offs="40"/>\r
+    <Component Name="RESERVED10" TI="17730" Line="426" Offs="42"/>\r
+    <Component Name="ARR" TI="17745" Line="427" Offs="44"/>\r
+   <type Family="array" ID="17956" toTI="17332"/>\r
+    <Component Name="RESERVED11" TI="17760" Line="428" Offs="46"/>\r
+    <Component Name="CCR1" TI="17775" Line="429" Offs="52"/>\r
+    <Component Name="RESERVED12" TI="17790" Line="430" Offs="54"/>\r
+    <Component Name="CCR2" TI="17805" Line="431" Offs="56"/>\r
+    <Component Name="RESERVED13" TI="17820" Line="432" Offs="58"/>\r
+    <Component Name="CCR3" TI="17835" Line="433" Offs="60"/>\r
+    <Component Name="RESERVED14" TI="17850" Line="434" Offs="62"/>\r
+    <Component Name="CCR4" TI="17865" Line="435" Offs="64"/>\r
+    <Component Name="RESERVED15" TI="17880" Line="436" Offs="66"/>\r
+    <Component Name="DCR" TI="17895" Line="437" Offs="72"/>\r
+    <Component Name="RESERVED16" TI="17910" Line="438" Offs="74"/>\r
+    <Component Name="DMAR" TI="17925" Line="439" Offs="76"/>\r
+    <Component Name="RESERVED17" TI="17940" Line="440" Offs="78"/>\r
+   </type>\r
+   <type Family="ComponentList" Line="32" ID="17972">\r
+    <Component Name="NVIC_IRQChannel" TI="17980" Line="33" Offs="0"/>\r
+    <Component Name="NVIC_IRQChannelPreemptionPriority" TI="17994" Line="34" Offs="1"/>\r
+    <Component Name="NVIC_IRQChannelSubPriority" TI="18008" Line="35" Offs="2"/>\r
+    <Component Name="NVIC_IRQChannelCmd" TI="18022" Line="36" Offs="3"/>\r
+   </type>\r
+   <type Family="typedef" Name="NVIC_InitTypeDef" Line="37" ID="18037" toTI="17972"/>\r
+   <type Family="ComponentList" Line="33" ID="18048">\r
+    <Component Name="TIM_Period" TI="18056" Line="34" Offs="0"/>\r
+    <Component Name="TIM_Prescaler" TI="18070" Line="35" Offs="2"/>\r
+    <Component Name="TIM_ClockDivision" TI="18084" Line="36" Offs="4"/>\r
+    <Component Name="TIM_CounterMode" TI="18098" Line="37" Offs="6"/>\r
+   </type>\r
+   <type Family="typedef" Name="TIM_TimeBaseInitTypeDef" Line="38" ID="18113" toTI="18048"/>\r
+   <function Name="vTimer2IntHandler" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\timertest.c" Line="127">\r
+    <variable Name="usThisCount" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\timertest.c" Line="129" Addr="0x0" TI="17343"/>\r
+    <variable Name="usDifference" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\timertest.c" Line="129" Addr="0x2" TI="17343"/>\r
+    <variable Name="usLastCount" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\timertest.c" Line="128" Addr="0x20000150" TI="17343"/>\r
+    <variable Name="usSettleCount" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\timertest.c" Line="128" Addr="0x2000014E" TI="17343"/>\r
+    <variable Name="usMaxDifference" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\timertest.c" Line="128" Addr="0x20000152" TI="17343"/>\r
+   </function >\r
+   <function Name="vSetupTimerTest" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\timertest.c" Line="81">\r
+    <variable Name="TIM_TimeBaseStructure" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\timertest.c" Line="83" Addr="0x340FFFE8" TI="18113"/>\r
+    <variable Name="NVIC_InitStructure" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\timertest.c" Line="84" Addr="0x340FFFE4" TI="18037"/>\r
+   </function >\r
+   <variable Name="usMaxJitter" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\timertest.c" Line="76" Addr="0x20000154" TI="17367"/>\r
+  </module>\r
+  <module Name="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\printf-stdarg.c" >\r
+   <type Family="Pointer" TI="18355" toTI="0"/>\r
+   <type Family="typedef" Name="__gnuc_va_list" Line="43" ID="18344" toTI="18355"/>\r
+   <type Family="Pointer" TI="18355" toTI="0"/>\r
+   <type Family="Pointer" TI="18355" toTI="0"/>\r
+   <type Family="typedef" Name="__gnuc_va_list" Line="43" ID="18344" toTI="18355"/>\r
+   <type Family="typedef" Name="va_list" Line="110" ID="18361" toTI="18344"/>\r
+   <function Name="printchar" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\printf-stdarg.c" Line="32">\r
+   <type Family="Base" Name="char" ID="18437"/>\r
+   <type Family="Pointer" TI="18431" toTI="18437"/>\r
+   <type Family="Pointer" TI="18425" toTI="18431"/>\r
+    <parameter Name="str" TI="18425" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\printf-stdarg.c" Line="32" Addr="0x0" Param="Yes"/>\r
+   <type Family="Base" Name="int" ID="18444"/>\r
+    <parameter Name="c" TI="18444" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\printf-stdarg.c" Line="32" Addr="0x1" Param="Yes"/>\r
+   </function >\r
+   <function Name="prints" TI="18444" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\printf-stdarg.c" Line="46">\r
+    <parameter Name="out" TI="18425" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\printf-stdarg.c" Line="46" Addr="0x0" Param="Yes"/>\r
+   <type Family="Pointer" TI="18603" toTI="18609"/>\r
+    <parameter Name="string" TI="18603" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\printf-stdarg.c" Line="46" Addr="0x1" Param="Yes"/>\r
+    <parameter Name="width" TI="18444" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\printf-stdarg.c" Line="46" Addr="0x2" Param="Yes"/>\r
+    <parameter Name="pad" TI="18444" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\printf-stdarg.c" Line="46" Addr="0x3" Param="Yes"/>\r
+    <variable Name="pc" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\printf-stdarg.c" Line="47" Addr="0x5" TI="18444"/>\r
+    <variable Name="padchar" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\printf-stdarg.c" Line="47" Addr="0xA" TI="18444"/>\r
+    <variable Name="len" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\printf-stdarg.c" Line="50" Addr="0x1" TI="18444"/>\r
+   </function >\r
+   <function Name="printi" TI="18444" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\printf-stdarg.c" Line="79">\r
+    <parameter Name="out" TI="18425" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\printf-stdarg.c" Line="79" Addr="0x0" Param="Yes"/>\r
+    <parameter Name="i" TI="18444" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\printf-stdarg.c" Line="79" Addr="0x1" Param="Yes"/>\r
+    <parameter Name="b" TI="18444" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\printf-stdarg.c" Line="79" Addr="0x2" Param="Yes"/>\r
+    <parameter Name="sg" TI="18444" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\printf-stdarg.c" Line="79" Addr="0x3" Param="Yes"/>\r
+    <parameter Name="width" TI="18444" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\printf-stdarg.c" Line="79" Addr="0x34000000" Param="Yes"/>\r
+    <parameter Name="pad" TI="18444" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\printf-stdarg.c" Line="79" Addr="0x34000004" Param="Yes"/>\r
+    <parameter Name="letbase" TI="18444" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\printf-stdarg.c" Line="79" Addr="0x34000008" Param="Yes"/>\r
+   <type Family="array" ID="18825" toTI="18437"/>\r
+    <variable Name="print_buf" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\printf-stdarg.c" Line="80" Addr="0x340FFFDC" TI="18825"/>\r
+    <variable Name="s" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\printf-stdarg.c" Line="81" Addr="0x4" TI="18431"/>\r
+    <variable Name="t" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\printf-stdarg.c" Line="82" Addr="0x1" TI="18444"/>\r
+    <variable Name="neg" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\printf-stdarg.c" Line="82" Addr="0x5" TI="18444"/>\r
+    <variable Name="pc" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\printf-stdarg.c" Line="82" Addr="0x5" TI="18444"/>\r
+   <type Family="Base" Name="unsigned int" ID="18844"/>\r
+    <variable Name="u" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\printf-stdarg.c" Line="83" Addr="0x2" TI="18844"/>\r
+   </function >\r
+   <function Name="print" TI="18444" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\printf-stdarg.c" Line="122">\r
+    <parameter Name="out" TI="18425" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\printf-stdarg.c" Line="122" Addr="0x0" Param="Yes"/>\r
+    <parameter Name="format" TI="18603" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\printf-stdarg.c" Line="122" Addr="0x1" Param="Yes"/>\r
+   <type Family="Pointer" TI="18355" toTI="0"/>\r
+   <type Family="typedef" Name="__gnuc_va_list" Line="43" ID="18344" toTI="18355"/>\r
+   <type Family="typedef" Name="va_list" Line="110" ID="18361" toTI="18344"/>\r
+    <parameter Name="args" TI="18361" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\printf-stdarg.c" Line="122" Addr="0x2" Param="Yes"/>\r
+    <variable Name="width" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\printf-stdarg.c" Line="123" Addr="0xE" TI="18444"/>\r
+    <variable Name="pad" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\printf-stdarg.c" Line="123" Addr="0xC" TI="18444"/>\r
+    <variable Name="pc" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\printf-stdarg.c" Line="124" Addr="0x6" TI="18444"/>\r
+   <type Family="array" ID="19017" toTI="18437"/>\r
+    <variable Name="scr" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\printf-stdarg.c" Line="125" Addr="0x340FFFEE" TI="19017"/>\r
+    <variable Name="s" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\printf-stdarg.c" Line="146" Addr="0x1" TI="18431"/>\r
+   </function >\r
+   <function Name="snprintf" TI="18444" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\printf-stdarg.c" Line="203">\r
+    <parameter Name="buf" TI="18431" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\printf-stdarg.c" Line="203" Addr="0x0" Param="Yes"/>\r
+    <parameter Name="count" TI="18844" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\printf-stdarg.c" Line="203" Addr="0x1" Param="Yes"/>\r
+    <parameter Name="format" TI="18603" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\printf-stdarg.c" Line="203" Addr="0x34000000" Param="Yes"/>\r
+   <type Family="Pointer" TI="18355" toTI="0"/>\r
+   <type Family="typedef" Name="__gnuc_va_list" Line="43" ID="18344" toTI="18355"/>\r
+   <type Family="typedef" Name="va_list" Line="110" ID="18361" toTI="18344"/>\r
+    <variable Name="args" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\printf-stdarg.c" Line="204" Addr="0x340FFFF8" TI="18361"/>\r
+   </function >\r
+   <function Name="sprintf" TI="18444" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\printf-stdarg.c" Line="194">\r
+    <parameter Name="out" TI="18431" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\printf-stdarg.c" Line="194" Addr="0x0" Param="Yes"/>\r
+    <parameter Name="format" TI="18603" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\printf-stdarg.c" Line="194" Addr="0x34000000" Param="Yes"/>\r
+   <type Family="Pointer" TI="18355" toTI="0"/>\r
+   <type Family="typedef" Name="__gnuc_va_list" Line="43" ID="18344" toTI="18355"/>\r
+   <type Family="typedef" Name="va_list" Line="110" ID="18361" toTI="18344"/>\r
+    <variable Name="args" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\printf-stdarg.c" Line="195" Addr="0x340FFFFC" TI="18361"/>\r
+   </function >\r
+   <function Name="printf" TI="18444" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\printf-stdarg.c" Line="186">\r
+    <parameter Name="format" TI="18603" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\printf-stdarg.c" Line="186" Addr="0x34000000" Param="Yes"/>\r
+   <type Family="Pointer" TI="18355" toTI="0"/>\r
+   <type Family="typedef" Name="__gnuc_va_list" Line="43" ID="18344" toTI="18355"/>\r
+   <type Family="typedef" Name="va_list" Line="110" ID="18361" toTI="18344"/>\r
+    <variable Name="args" FileName="C:\E\Dev\FreeRTOS\Demo\CORTEX_STM32F103_Primer_GCC\printf-stdarg.c" Line="187" Addr="0x340FFFF8" TI="18361"/>\r
+   </function >\r
+  </module>\r
+  <module Name="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\GenQTest.c" >\r
+   <type Family="Base" Name="unsigned int" ID="19281"/>\r
+   <type Family="Base" Name="int" ID="19288"/>\r
+   <type Family="Base" Name="long int" ID="19295"/>\r
+   <type Family="Base" Name="long long int" ID="19302"/>\r
+   <type Family="Base" Name="unsigned char" ID="19312"/>\r
+   <type Family="Pointer" TI="19319" toTI="0"/>\r
+   <type Family="Base" Name="long unsigned int" ID="19321"/>\r
+   <type Family="Base" Name="short int" ID="19328"/>\r
+   <type Family="Base" Name="char" ID="19335"/>\r
+   <type Family="Base" Name="short unsigned int" ID="19342"/>\r
+   <type Family="Base" Name="long long unsigned int" ID="19349"/>\r
+   <type Family="Base" Name="signed char" ID="19356"/>\r
+   <type Family="Pointer" TI="19319" toTI="0"/>\r
+   <type Family="typedef" Name="xTaskHandle" Line="68" ID="19368" toTI="19319"/>\r
+   <type Family="Pointer" TI="19319" toTI="0"/>\r
+   <type Family="typedef" Name="xQueueHandle" Line="43" ID="19379" toTI="19319"/>\r
+   <type Family="Pointer" TI="19319" toTI="0"/>\r
+   <type Family="typedef" Name="xQueueHandle" Line="43" ID="19379" toTI="19319"/>\r
+   <type Family="typedef" Name="xSemaphoreHandle" Line="42" ID="19390" toTI="19379"/>\r
+   <function Name="xAreGenericQueueTasksStillRunning" TI="19295" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\GenQTest.c" Line="513">\r
+    <variable Name="ulLastLoopCounter" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\GenQTest.c" Line="514" Addr="0x2000015C" TI="19321"/>\r
+    <variable Name="ulLastLoopCounter2" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\GenQTest.c" Line="514" Addr="0x20000168" TI="19321"/>\r
+   </function >\r
+   <function Name="vStartGenericQueueTasks" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\GenQTest.c" Line="116">\r
+    <parameter Name="uxPriority" TI="19321" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\GenQTest.c" Line="116" Addr="0x0" Param="Yes"/>\r
+   <type Family="Pointer" TI="19319" toTI="0"/>\r
+   <type Family="typedef" Name="xQueueHandle" Line="43" ID="19379" toTI="19319"/>\r
+    <variable Name="xQueue" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\GenQTest.c" Line="117" Addr="0x3" TI="19379"/>\r
+   <type Family="Pointer" TI="19319" toTI="0"/>\r
+   <type Family="typedef" Name="xQueueHandle" Line="43" ID="19379" toTI="19319"/>\r
+   <type Family="typedef" Name="xSemaphoreHandle" Line="42" ID="19390" toTI="19379"/>\r
+    <variable Name="xMutex" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\GenQTest.c" Line="118" Addr="0x6" TI="19390"/>\r
+   </function >\r
+   <function Name="prvMediumPriorityMutexTask" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\GenQTest.c" Line="468">\r
+   <type Family="Pointer" TI="19319" toTI="0"/>\r
+    <parameter Name="pvParameters" TI="19319" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\GenQTest.c" Line="468" Addr="0x0" Param="Yes"/>\r
+   </function >\r
+   <function Name="prvHighPriorityMutexTask" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\GenQTest.c" Line="484">\r
+   <type Family="Pointer" TI="19319" toTI="0"/>\r
+    <parameter Name="pvParameters" TI="19319" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\GenQTest.c" Line="484" Addr="0x0" Param="Yes"/>\r
+   <type Family="Pointer" TI="19319" toTI="0"/>\r
+   <type Family="typedef" Name="xQueueHandle" Line="43" ID="19379" toTI="19319"/>\r
+   <type Family="typedef" Name="xSemaphoreHandle" Line="42" ID="19390" toTI="19379"/>\r
+   </function >\r
+   <function Name="prvLowPriorityMutexTask" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\GenQTest.c" Line="370">\r
+   <type Family="Pointer" TI="19319" toTI="0"/>\r
+    <parameter Name="pvParameters" TI="19319" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\GenQTest.c" Line="370" Addr="0x0" Param="Yes"/>\r
+   <type Family="Pointer" TI="19319" toTI="0"/>\r
+   <type Family="typedef" Name="xQueueHandle" Line="43" ID="19379" toTI="19319"/>\r
+   <type Family="typedef" Name="xSemaphoreHandle" Line="42" ID="19390" toTI="19379"/>\r
+   </function >\r
+   <function Name="prvSendFrontAndBackTest" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\GenQTest.c" Line="142">\r
+   <type Family="Pointer" TI="19319" toTI="0"/>\r
+    <parameter Name="pvParameters" TI="19319" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\GenQTest.c" Line="142" Addr="0x0" Param="Yes"/>\r
+    <variable Name="ulData" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\GenQTest.c" Line="143" Addr="0x340FFFFC" TI="19321"/>\r
+    <variable Name="ulData2" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\GenQTest.c" Line="143" Addr="0x340FFFF8" TI="19321"/>\r
+   <type Family="Pointer" TI="19319" toTI="0"/>\r
+   <type Family="typedef" Name="xQueueHandle" Line="43" ID="19379" toTI="19319"/>\r
+   </function >\r
+   <variable Name="xErrorDetected" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\GenQTest.c" Line="99" Addr="0x20000160" TI="19295"/>\r
+   <variable Name="ulLoopCounter" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\GenQTest.c" Line="103" Addr="0x20000158" TI="19363"/>\r
+   <variable Name="ulLoopCounter2" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\GenQTest.c" Line="104" Addr="0x20000164" TI="19363"/>\r
+   <variable Name="ulGuardedVariable" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\GenQTest.c" Line="107" Addr="0x20000174" TI="19363"/>\r
+   <type Family="Pointer" TI="19319" toTI="0"/>\r
+   <type Family="typedef" Name="xTaskHandle" Line="68" ID="19368" toTI="19319"/>\r
+   <variable Name="xHighPriorityMutexTask" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\GenQTest.c" Line="111" Addr="0x20000170" TI="19368"/>\r
+   <type Family="Pointer" TI="19319" toTI="0"/>\r
+   <type Family="typedef" Name="xTaskHandle" Line="68" ID="19368" toTI="19319"/>\r
+   <variable Name="xMediumPriorityMutexTask" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\GenQTest.c" Line="111" Addr="0x2000016C" TI="19368"/>\r
+  </module>\r
+  <module Name="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\BlockQ.c" >\r
+   <type Family="Base" Name="unsigned int" ID="19897"/>\r
+   <type Family="Base" Name="int" ID="19904"/>\r
+   <type Family="Base" Name="long int" ID="19911"/>\r
+   <type Family="Base" Name="long long int" ID="19918"/>\r
+   <type Family="Base" Name="unsigned char" ID="19928"/>\r
+   <type Family="Pointer" TI="19935" toTI="0"/>\r
+   <type Family="Base" Name="long unsigned int" ID="19937"/>\r
+   <type Family="Base" Name="short int" ID="19944"/>\r
+   <type Family="Base" Name="char" ID="19951"/>\r
+   <type Family="Base" Name="short unsigned int" ID="19958"/>\r
+   <type Family="Base" Name="long long unsigned int" ID="19965"/>\r
+   <type Family="Base" Name="signed char" ID="19972"/>\r
+   <type Family="typedef" Name="portTickType" Line="74" ID="19989" toTI="19937"/>\r
+   <type Family="Pointer" TI="19935" toTI="0"/>\r
+   <type Family="typedef" Name="xQueueHandle" Line="43" ID="20000" toTI="19935"/>\r
+   <type Family="ComponentList" Name="BLOCKING_QUEUE_PARAMETERS" Line="85" ID="20011">\r
+   <type Family="Pointer" TI="19935" toTI="0"/>\r
+   <type Family="typedef" Name="xQueueHandle" Line="43" ID="20000" toTI="19935"/>\r
+    <Component Name="xQueue" TI="20023" Line="86" Offs="0"/>\r
+    <Component Name="xBlockTime" TI="20037" Line="87" Offs="4"/>\r
+   <type Family="Pointer" TI="20066" toTI="19979"/>\r
+    <Component Name="psCheckVariable" TI="20051" Line="88" Offs="8"/>\r
+   </type>\r
+   <type Family="typedef" Name="xBlockingQueueParameters" Line="89" ID="20072" toTI="20011"/>\r
+   <function Name="xAreBlockingQueuesStillRunning" TI="19911" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\BlockQ.c" Line="261">\r
+    <variable Name="xReturn" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\BlockQ.c" Line="264" Addr="0x0" TI="19911"/>\r
+    <variable Name="xTasks" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\BlockQ.c" Line="264" Addr="0xC" TI="19911"/>\r
+   <type Family="array" ID="20539" toTI="19944"/>\r
+    <variable Name="sLastBlockingConsumerCount" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\BlockQ.c" Line="262" Addr="0x2000017E" TI="20539"/>\r
+    <variable Name="sLastBlockingProducerCount" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\BlockQ.c" Line="263" Addr="0x2000018A" TI="20539"/>\r
+   </function >\r
+   <function Name="vStartBlockingQueueTasks" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\BlockQ.c" Line="110">\r
+    <parameter Name="uxPriority" TI="19937" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\BlockQ.c" Line="110" Addr="0x0" Param="Yes"/>\r
+   <type Family="Pointer" TI="20353" toTI="20072"/>\r
+    <variable Name="pxQueueParameters1" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\BlockQ.c" Line="111" Addr="0x3" TI="20353"/>\r
+    <variable Name="pxQueueParameters2" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\BlockQ.c" Line="111" Addr="0x3" TI="20353"/>\r
+    <variable Name="pxQueueParameters3" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\BlockQ.c" Line="112" Addr="0x3" TI="20353"/>\r
+    <variable Name="pxQueueParameters4" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\BlockQ.c" Line="112" Addr="0x3" TI="20353"/>\r
+    <variable Name="pxQueueParameters5" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\BlockQ.c" Line="113" Addr="0x3" TI="20353"/>\r
+    <variable Name="pxQueueParameters6" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\BlockQ.c" Line="113" Addr="0x3" TI="20353"/>\r
+   </function >\r
+   <function Name="vBlockingQueueProducer" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\BlockQ.c" Line="192">\r
+   <type Family="Pointer" TI="19935" toTI="0"/>\r
+    <parameter Name="pvParameters" TI="19935" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\BlockQ.c" Line="192" Addr="0x0" Param="Yes"/>\r
+    <variable Name="usValue" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\BlockQ.c" Line="193" Addr="0x340FFFFA" TI="19958"/>\r
+    <variable Name="pxQueueParameters" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\BlockQ.c" Line="194" Addr="0x4" TI="20353"/>\r
+    <variable Name="sErrorEverOccurred" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\BlockQ.c" Line="195" Addr="0x5" TI="19944"/>\r
+   </function >\r
+   <function Name="vBlockingQueueConsumer" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\BlockQ.c" Line="223">\r
+   <type Family="Pointer" TI="19935" toTI="0"/>\r
+    <parameter Name="pvParameters" TI="19935" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\BlockQ.c" Line="223" Addr="0x0" Param="Yes"/>\r
+    <variable Name="usData" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\BlockQ.c" Line="224" Addr="0x340FFFFE" TI="19958"/>\r
+    <variable Name="usExpectedValue" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\BlockQ.c" Line="224" Addr="0x5" TI="19958"/>\r
+    <variable Name="pxQueueParameters" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\BlockQ.c" Line="225" Addr="0x4" TI="20353"/>\r
+    <variable Name="sErrorEverOccurred" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\BlockQ.c" Line="226" Addr="0x6" TI="19944"/>\r
+   </function >\r
+   <variable Name="sBlockingConsumerCount" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\BlockQ.c" Line="101" Addr="0x20000178" TI="20572"/>\r
+   <variable Name="sBlockingProducerCount" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\BlockQ.c" Line="105" Addr="0x20000184" TI="20594"/>\r
+  </module>\r
+  <module Name="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\blocktim.c" >\r
+   <type Family="Base" Name="int" ID="20629"/>\r
+   <type Family="Base" Name="unsigned int" ID="20636"/>\r
+   <type Family="Pointer" TI="20643" toTI="0"/>\r
+   <type Family="Base" Name="long int" ID="20645"/>\r
+   <type Family="Base" Name="short int" ID="20652"/>\r
+   <type Family="Base" Name="signed char" ID="20659"/>\r
+   <type Family="Base" Name="long unsigned int" ID="20666"/>\r
+   <type Family="Base" Name="short unsigned int" ID="20673"/>\r
+   <type Family="Base" Name="unsigned char" ID="20680"/>\r
+   <type Family="typedef" Name="portTickType" Line="74" ID="20695" toTI="20666"/>\r
+   <type Family="Pointer" TI="20643" toTI="0"/>\r
+   <type Family="typedef" Name="xTaskHandle" Line="68" ID="20706" toTI="20643"/>\r
+   <type Family="Pointer" TI="20643" toTI="0"/>\r
+   <type Family="typedef" Name="xQueueHandle" Line="43" ID="20717" toTI="20643"/>\r
+   <function Name="xAreBlockTimeTestTasksStillRunning" TI="20645" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\blocktim.c" Line="449">\r
+    <variable Name="xReturn" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\blocktim.c" Line="451" Addr="0x0" TI="20645"/>\r
+    <variable Name="xLastPrimaryCycleCount" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\blocktim.c" Line="450" Addr="0x20000194" TI="20645"/>\r
+    <variable Name="xLastSecondaryCycleCount" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\blocktim.c" Line="450" Addr="0x2000019C" TI="20645"/>\r
+   </function >\r
+   <function Name="vCreateBlockTimeTasks" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\blocktim.c" Line="86">\r
+   </function >\r
+   <function Name="vSecondaryBlockTimeTestTask" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\blocktim.c" Line="353">\r
+   <type Family="Pointer" TI="20643" toTI="0"/>\r
+    <parameter Name="pvParameters" TI="20643" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\blocktim.c" Line="353" Addr="0x0" Param="Yes"/>\r
+    <variable Name="xTimeWhenBlocking" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\blocktim.c" Line="354" Addr="0x6" TI="20695"/>\r
+    <variable Name="xBlockedTime" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\blocktim.c" Line="354" Addr="0x4" TI="20695"/>\r
+    <variable Name="xData" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\blocktim.c" Line="355" Addr="0x40FFFFC" TI="20645"/>\r
+   </function >\r
+   <function Name="vPrimaryBlockTimeTestTask" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\blocktim.c" Line="97">\r
+   <type Family="Pointer" TI="20643" toTI="0"/>\r
+    <parameter Name="pvParameters" TI="20643" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\blocktim.c" Line="97" Addr="0x0" Param="Yes"/>\r
+    <variable Name="xItem" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\blocktim.c" Line="98" Addr="0x340FFFFC" TI="20645"/>\r
+    <variable Name="xData" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\blocktim.c" Line="98" Addr="0x340FFFE8" TI="20645"/>\r
+    <variable Name="xTimeWhenBlocking" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\blocktim.c" Line="99" Addr="0x4" TI="20695"/>\r
+    <variable Name="xTimeToBlock" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\blocktim.c" Line="100" Addr="0x5" TI="20695"/>\r
+    <variable Name="xBlockedTime" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\blocktim.c" Line="100" Addr="0x4" TI="20695"/>\r
+   </function >\r
+   <type Family="Pointer" TI="20643" toTI="0"/>\r
+   <type Family="typedef" Name="xQueueHandle" Line="43" ID="20717" toTI="20643"/>\r
+   <variable Name="xTestQueue" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\blocktim.c" Line="65" Addr="0x200001A4" TI="20717"/>\r
+   <type Family="Pointer" TI="20643" toTI="0"/>\r
+   <type Family="typedef" Name="xTaskHandle" Line="68" ID="20706" toTI="20643"/>\r
+   <variable Name="xSecondary" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\blocktim.c" Line="69" Addr="0x200001A8" TI="20706"/>\r
+   <variable Name="xPrimaryCycles" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\blocktim.c" Line="72" Addr="0x20000190" TI="20645"/>\r
+   <variable Name="xSecondaryCycles" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\blocktim.c" Line="72" Addr="0x20000198" TI="20645"/>\r
+   <variable Name="xErrorOccurred" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\blocktim.c" Line="73" Addr="0x200001A0" TI="20645"/>\r
+   <variable Name="xRunIndicator" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\blocktim.c" Line="77" Addr="0x200001AC" TI="20687"/>\r
+  </module>\r
+  <module Name="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\QPeek.c" >\r
+   <type Family="Base" Name="unsigned int" ID="21162"/>\r
+   <type Family="Base" Name="int" ID="21169"/>\r
+   <type Family="Base" Name="long int" ID="21176"/>\r
+   <type Family="Base" Name="long long int" ID="21183"/>\r
+   <type Family="Base" Name="unsigned char" ID="21193"/>\r
+   <type Family="Pointer" TI="21200" toTI="0"/>\r
+   <type Family="Base" Name="long unsigned int" ID="21202"/>\r
+   <type Family="Base" Name="short int" ID="21209"/>\r
+   <type Family="Base" Name="char" ID="21216"/>\r
+   <type Family="Base" Name="short unsigned int" ID="21223"/>\r
+   <type Family="Base" Name="long long unsigned int" ID="21230"/>\r
+   <type Family="Base" Name="signed char" ID="21237"/>\r
+   <type Family="Pointer" TI="21200" toTI="0"/>\r
+   <type Family="typedef" Name="xTaskHandle" Line="68" ID="21249" toTI="21200"/>\r
+   <type Family="Pointer" TI="21200" toTI="0"/>\r
+   <type Family="typedef" Name="xQueueHandle" Line="43" ID="21260" toTI="21200"/>\r
+   <function Name="xAreQueuePeekTasksStillRunning" TI="21176" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\QPeek.c" Line="404">\r
+    <variable Name="ulLastLoopCounter" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\QPeek.c" Line="405" Addr="0x200001B4" TI="21202"/>\r
+   </function >\r
+   <function Name="vStartQueuePeekTasks" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\QPeek.c" Line="91">\r
+   <type Family="Pointer" TI="21200" toTI="0"/>\r
+   <type Family="typedef" Name="xQueueHandle" Line="43" ID="21260" toTI="21200"/>\r
+    <variable Name="xQueue" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\QPeek.c" Line="92" Addr="0x4" TI="21260"/>\r
+   </function >\r
+   <function Name="prvMediumPriorityPeekTask" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\QPeek.c" Line="272">\r
+   <type Family="Pointer" TI="21200" toTI="0"/>\r
+    <parameter Name="pvParameters" TI="21200" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\QPeek.c" Line="272" Addr="0x0" Param="Yes"/>\r
+   <type Family="Pointer" TI="21200" toTI="0"/>\r
+   <type Family="typedef" Name="xQueueHandle" Line="43" ID="21260" toTI="21200"/>\r
+    <variable Name="ulValue" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\QPeek.c" Line="274" Addr="0x340FFFFC" TI="21202"/>\r
+   </function >\r
+   <function Name="prvHighPriorityPeekTask" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\QPeek.c" Line="217">\r
+   <type Family="Pointer" TI="21200" toTI="0"/>\r
+    <parameter Name="pvParameters" TI="21200" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\QPeek.c" Line="217" Addr="0x0" Param="Yes"/>\r
+   <type Family="Pointer" TI="21200" toTI="0"/>\r
+   <type Family="typedef" Name="xQueueHandle" Line="43" ID="21260" toTI="21200"/>\r
+    <variable Name="ulValue" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\QPeek.c" Line="219" Addr="0x340FFFFC" TI="21202"/>\r
+   </function >\r
+   <function Name="prvHighestPriorityPeekTask" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\QPeek.c" Line="108">\r
+   <type Family="Pointer" TI="21200" toTI="0"/>\r
+    <parameter Name="pvParameters" TI="21200" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\QPeek.c" Line="108" Addr="0x0" Param="Yes"/>\r
+   <type Family="Pointer" TI="21200" toTI="0"/>\r
+   <type Family="typedef" Name="xQueueHandle" Line="43" ID="21260" toTI="21200"/>\r
+    <variable Name="ulValue" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\QPeek.c" Line="110" Addr="0x340FFFFC" TI="21202"/>\r
+   </function >\r
+   <function Name="prvLowPriorityPeekTask" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\QPeek.c" Line="313">\r
+   <type Family="Pointer" TI="21200" toTI="0"/>\r
+    <parameter Name="pvParameters" TI="21200" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\QPeek.c" Line="313" Addr="0x0" Param="Yes"/>\r
+   <type Family="Pointer" TI="21200" toTI="0"/>\r
+   <type Family="typedef" Name="xQueueHandle" Line="43" ID="21260" toTI="21200"/>\r
+    <variable Name="ulValue" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\QPeek.c" Line="315" Addr="0x40FFFFC" TI="21202"/>\r
+   </function >\r
+   <variable Name="xErrorDetected" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\QPeek.c" Line="80" Addr="0x200001B8" TI="21176"/>\r
+   <variable Name="ulLoopCounter" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\QPeek.c" Line="84" Addr="0x200001B0" TI="21244"/>\r
+   <type Family="Pointer" TI="21200" toTI="0"/>\r
+   <type Family="typedef" Name="xTaskHandle" Line="68" ID="21249" toTI="21200"/>\r
+   <variable Name="xMediumPriorityTask" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\QPeek.c" Line="87" Addr="0x200047CC" TI="21249"/>\r
+   <type Family="Pointer" TI="21200" toTI="0"/>\r
+   <type Family="typedef" Name="xTaskHandle" Line="68" ID="21249" toTI="21200"/>\r
+   <variable Name="xHighPriorityTask" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\QPeek.c" Line="87" Addr="0x200047C8" TI="21249"/>\r
+   <type Family="Pointer" TI="21200" toTI="0"/>\r
+   <type Family="typedef" Name="xTaskHandle" Line="68" ID="21249" toTI="21200"/>\r
+   <variable Name="xHighestPriorityTask" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\QPeek.c" Line="87" Addr="0x200047D0" TI="21249"/>\r
+  </module>\r
+  <module Name="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\PollQ.c" >\r
+   <type Family="Base" Name="unsigned int" ID="21744"/>\r
+   <type Family="Base" Name="int" ID="21751"/>\r
+   <type Family="Base" Name="long int" ID="21758"/>\r
+   <type Family="Base" Name="long long int" ID="21765"/>\r
+   <type Family="Base" Name="unsigned char" ID="21775"/>\r
+   <type Family="Pointer" TI="21782" toTI="0"/>\r
+   <type Family="Base" Name="long unsigned int" ID="21784"/>\r
+   <type Family="Base" Name="short int" ID="21791"/>\r
+   <type Family="Base" Name="char" ID="21798"/>\r
+   <type Family="Base" Name="short unsigned int" ID="21805"/>\r
+   <type Family="Base" Name="long long unsigned int" ID="21812"/>\r
+   <type Family="Base" Name="signed char" ID="21819"/>\r
+   <type Family="Pointer" TI="21782" toTI="0"/>\r
+   <type Family="typedef" Name="xQueueHandle" Line="43" ID="21831" toTI="21782"/>\r
+   <function Name="xArePollingQueuesStillRunning" TI="21758" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\PollQ.c" Line="197">\r
+    <variable Name="xReturn" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\PollQ.c" Line="198" Addr="0x0" TI="21758"/>\r
+   </function >\r
+   <function Name="vStartPolledQueueTasks" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\PollQ.c" Line="98">\r
+    <parameter Name="uxPriority" TI="21784" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\PollQ.c" Line="98" Addr="0x0" Param="Yes"/>\r
+   <type Family="Pointer" TI="21782" toTI="0"/>\r
+   <type Family="typedef" Name="xQueueHandle" Line="43" ID="21831" toTI="21782"/>\r
+    <variable Name="xPolledQueue" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\PollQ.c" Line="99" Addr="0x200001C4" TI="21831"/>\r
+   </function >\r
+   <function Name="vPolledQueueProducer" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\PollQ.c" Line="111">\r
+   <type Family="Pointer" TI="21782" toTI="0"/>\r
+    <parameter Name="pvParameters" TI="21782" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\PollQ.c" Line="111" Addr="0x0" Param="Yes"/>\r
+    <variable Name="usValue" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\PollQ.c" Line="112" Addr="0x340FFFFE" TI="21805"/>\r
+    <variable Name="xError" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\PollQ.c" Line="113" Addr="0x6" TI="21758"/>\r
+    <variable Name="xLoop" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\PollQ.c" Line="113" Addr="0x4" TI="21758"/>\r
+   </function >\r
+   <function Name="vPolledQueueConsumer" TI="0" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\PollQ.c" Line="150">\r
+   <type Family="Pointer" TI="21782" toTI="0"/>\r
+    <parameter Name="pvParameters" TI="21782" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\PollQ.c" Line="150" Addr="0x0" Param="Yes"/>\r
+    <variable Name="usData" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\PollQ.c" Line="151" Addr="0x340FFFFA" TI="21805"/>\r
+    <variable Name="usExpectedValue" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\PollQ.c" Line="151" Addr="0x6" TI="21805"/>\r
+    <variable Name="xError" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\PollQ.c" Line="152" Addr="0x7" TI="21758"/>\r
+   </function >\r
+   <variable Name="xPollingConsumerCount" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\PollQ.c" Line="93" Addr="0x200001BC" TI="21826"/>\r
+   <variable Name="xPollingProducerCount" FileName="C:\E\Dev\FreeRTOS\Demo\Common\Minimal\PollQ.c" Line="93" Addr="0x200001C0" TI="21826"/>\r
+  </module>\r
+  <module Name="C:\E\Dev\FreeRTOS\Source\tasks.c" >\r
+   <type Family="Base" Name="unsigned int" ID="22167"/>\r
+   <type Family="Base" Name="int" ID="22174"/>\r
+   <type Family="Base" Name="long int" ID="22181"/>\r
+   <type Family="Base" Name="long long int" ID="22188"/>\r
+   <type Family="Base" Name="unsigned char" ID="22198"/>\r
+   <type Family="Pointer" TI="22205" toTI="0"/>\r
+   <type Family="Base" Name="long unsigned int" ID="22207"/>\r
+   <type Family="Base" Name="short int" ID="22214"/>\r
+   <type Family="Base" Name="char" ID="22221"/>\r
+   <type Family="Base" Name="short unsigned int" ID="22228"/>\r
+   <type Family="Base" Name="long long unsigned int" ID="22235"/>\r
+   <type Family="Base" Name="signed char" ID="22242"/>\r
+   <type Family="Pointer" TI="22260" toTI="22266"/>\r
+   <type Family="typedef" Name="pdTASK_CODE" Line="41" ID="22249" toTI="22260"/>\r
+   <type Family="Pointer" TI="22260" toTI="22266"/>\r
+   <type Family="typedef" Name="portTickType" Line="74" ID="22288" toTI="22207"/>\r
+   <type Family="ComponentList" Name="xLIST_ITEM" Line="82" ID="22299">\r
+    <Component Name="xItemValue" TI="22311" Line="83" Offs="0"/>\r
+   <type Family="Pointer" TI="22382" toTI="22388"/>\r
+    <Component Name="pxNext" TI="22325" Line="84" Offs="4"/>\r
+    <Component Name="pxPrevious" TI="22339" Line="85" Offs="8"/>\r
+   <type Family="Pointer" TI="22205" toTI="0"/>\r
+    <Component Name="pvOwner" TI="22353" Line="86" Offs="12"/>\r
+   <type Family="Pointer" TI="22205" toTI="0"/>\r
+    <Component Name="pvContainer" TI="22367" Line="87" Offs="16"/>\r
+   </type>\r
+   <type Family="typedef" Name="xListItem" Line="89" ID="22397" toTI="22299"/>\r
+   <type Family="ComponentList" Name="xMINI_LIST_ITEM" Line="92" ID="22408">\r
+    <Component Name="xItemValue" TI="22420" Line="93" Offs="0"/>\r
+    <Component Name="pxNext" TI="22434" Line="94" Offs="4"/>\r
+    <Component Name="pxPrevious" TI="22448" Line="95" Offs="8"/>\r
+   </type>\r
+   <type Family="typedef" Name="xMiniListItem" Line="97" ID="22463" toTI="22408"/>\r
+   <type Family="ComponentList" Name="xLIST" Line="103" ID="22474">\r
+    <Component Name="uxNumberOfItems" TI="22486" Line="104" Offs="0"/>\r
+   <type Family="Pointer" TI="22529" toTI="22535"/>\r
+    <Component Name="pxIndex" TI="22500" Line="105" Offs="4"/>\r
+    <Component Name="xListEnd" TI="22514" Line="106" Offs="8"/>\r
+   </type>\r
+   <type Family="typedef" Name="xList" Line="107" ID="22545" toTI="22474"/>\r
+   <type Family="Pointer" TI="22205" toTI="0"/>\r
+   <type Family="typedef" Name="xTaskHandle" Line="68" ID="22556" toTI="22205"/>\r
+   <type Family="ComponentList" Name="xTIME_OUT" Line="74" ID="22567">\r
+    <Component Name="xOverflowCount" TI="22579" Line="75" Offs="0"/>\r
+    <Component Name="xTimeOnEntering" TI="22593" Line="76" Offs="4"/>\r
+   </type>\r
+   <type Family="typedef" Name="xTimeOutType" Line="77" ID="22608" toTI="22567"/>\r
+   <type Family="ComponentList" Name="tskTaskControlBlock" Line="255" ID="22619">\r
+   <type Family="Pointer" TI="22737" toTI="22283"/>\r
+    <Component Name="pxTopOfStack" TI="22631" Line="256" Offs="0"/>\r
+    <Component Name="xGenericListItem" TI="22646" Line="257" Offs="4"/>\r
+    <Component Name="xEventListItem" TI="22661" Line="258" Offs="24"/>\r
+    <Component Name="uxPriority" TI="22676" Line="259" Offs="44"/>\r
+   <type Family="Pointer" TI="22743" toTI="22207"/>\r
+    <Component Name="pxStack" TI="22691" Line="260" Offs="48"/>\r
+   <type Family="array" ID="22749" toTI="22242"/>\r
+    <Component Name="pcTaskName" TI="22706" Line="261" Offs="52"/>\r
+    <Component Name="uxBasePriority" TI="22721" Line="268" Offs="68"/>\r
+   </type>\r
+   <type Family="typedef" Name="tskTCB" Line="271" ID="22765" toTI="22619"/>\r
+   <function Name="prvIsTaskSuspended" TI="22181" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="1004">\r
+   <type Family="Pointer" TI="22842" toTI="22848"/>\r
+    <parameter Name="pxTCB" TI="22837" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="1004" Addr="0x0" Param="Yes"/>\r
+    <variable Name="xReturn" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="1005" Addr="0x0" TI="22181"/>\r
+   </function >\r
+   <function Name="vTaskSwitchContext" TI="0" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="1476">\r
+   <type Family="Pointer" TI="22909" toTI="22545"/>\r
+    <variable Name="pxConstList" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="1493" Addr="0x2" TI="22904"/>\r
+   </function >\r
+   <function Name="vTaskSetTimeOutState" TI="0" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="1616">\r
+   <type Family="Pointer" TI="22959" toTI="22608"/>\r
+    <parameter Name="pxTimeOut" TI="22954" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="1616" Addr="0x0" Param="Yes"/>\r
+   </function >\r
+   <function Name="xTaskCheckForTimeOut" TI="22181" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="1623">\r
+    <parameter Name="pxTimeOut" TI="22954" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="1623" Addr="0x0" Param="Yes"/>\r
+   <type Family="Pointer" TI="23049" toTI="22288"/>\r
+    <parameter Name="pxTicksToWait" TI="23044" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="1623" Addr="0x1" Param="Yes"/>\r
+    <variable Name="xReturn" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="1624" Addr="0x0" TI="22181"/>\r
+   </function >\r
+   <function Name="vTaskMissedYield" TI="0" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="1662">\r
+   </function >\r
+   <function Name="vTaskPriorityDisinherit" TI="0" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="2011">\r
+   <type Family="Pointer" TI="22205" toTI="0"/>\r
+   <type Family="typedef" Name="xTaskHandle" Line="68" ID="22556" toTI="22205"/>\r
+   <type Family="Pointer" TI="23135" toTI="22556"/>\r
+    <parameter Name="pxMutexHolder" TI="23130" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="2011" Addr="0x0" Param="Yes"/>\r
+   <type Family="Pointer" TI="23146" toTI="22765"/>\r
+   </function >\r
+   <type Family="Pointer" TI="22205" toTI="0"/>\r
+   <type Family="typedef" Name="xTaskHandle" Line="68" ID="22556" toTI="22205"/>\r
+   <type Family="Pointer" TI="23135" toTI="22556"/>\r
+   <type Family="Pointer" TI="22205" toTI="0"/>\r
+   <type Family="typedef" Name="xTaskHandle" Line="68" ID="22556" toTI="22205"/>\r
+   <type Family="Pointer" TI="23135" toTI="22556"/>\r
+   <function Name="vTaskPriorityInherit" TI="0" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="1980">\r
+   <type Family="Pointer" TI="22205" toTI="0"/>\r
+   <type Family="typedef" Name="xTaskHandle" Line="68" ID="22556" toTI="22205"/>\r
+   <type Family="Pointer" TI="23135" toTI="22556"/>\r
+    <parameter Name="pxMutexHolder" TI="23130" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="1980" Addr="0x0" Param="Yes"/>\r
+    <variable Name="pxTCB" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="1981" Addr="0x4" TI="23141"/>\r
+   </function >\r
+   <function Name="xTaskRemoveFromEventList" TI="22181" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="1569">\r
+   <type Family="Pointer" TI="23291" toTI="23297"/>\r
+    <parameter Name="pxEventList" TI="23286" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="1569" Addr="0x0" Param="Yes"/>\r
+    <variable Name="pxUnblockedTCB" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="1570" Addr="0x5" TI="23146"/>\r
+   </function >\r
+   <function Name="xTaskResumeFromISR" TI="22181" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="1074">\r
+   <type Family="Pointer" TI="22205" toTI="0"/>\r
+   <type Family="typedef" Name="xTaskHandle" Line="68" ID="22556" toTI="22205"/>\r
+    <parameter Name="pxTaskToResume" TI="22556" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="1074" Addr="0x0" Param="Yes"/>\r
+    <variable Name="xYieldRequired" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="1075" Addr="0x4" TI="22181"/>\r
+    <variable Name="pxTCB" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="1076" Addr="0x4" TI="23146"/>\r
+   </function >\r
+   <type Family="Pointer" TI="22205" toTI="0"/>\r
+   <type Family="typedef" Name="xTaskHandle" Line="68" ID="22556" toTI="22205"/>\r
+   <function Name="xTaskGetCurrentTaskHandle" TI="22556" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="1934">\r
+   <type Family="Pointer" TI="22205" toTI="0"/>\r
+   <type Family="typedef" Name="xTaskHandle" Line="68" ID="22556" toTI="22205"/>\r
+    <variable Name="xReturn" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="1935" Addr="0x4" TI="22556"/>\r
+   </function >\r
+   <function Name="uxTaskGetNumberOfTasks" TI="22207" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="1260">\r
+    <variable Name="uxNumberOfTasks" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="1261" Addr="0x4" TI="22207"/>\r
+   </function >\r
+   <function Name="xTaskGetTickCount" TI="22288" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="1245">\r
+    <variable Name="xTicks" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="1246" Addr="0x4" TI="22288"/>\r
+   </function >\r
+   <function Name="vTaskSuspendAll" TI="0" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="1159">\r
+   </function >\r
+   <function Name="uxTaskPriorityGet" TI="22207" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="843">\r
+   <type Family="Pointer" TI="22205" toTI="0"/>\r
+   <type Family="typedef" Name="xTaskHandle" Line="68" ID="22556" toTI="22205"/>\r
+    <parameter Name="pxTask" TI="22556" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="843" Addr="0x0" Param="Yes"/>\r
+    <variable Name="pxTCB" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="844" Addr="0x0" TI="23146"/>\r
+    <variable Name="uxReturn" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="845" Addr="0x4" TI="22207"/>\r
+   </function >\r
+   <function Name="vTaskPlaceOnEventList" TI="0" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="1499">\r
+    <parameter Name="pxEventList" TI="23286" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="1499" Addr="0x0" Param="Yes"/>\r
+    <parameter Name="xTicksToWait" TI="22288" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="1499" Addr="0x1" Param="Yes"/>\r
+    <variable Name="xTimeToWake" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="1500" Addr="0x3" TI="22288"/>\r
+   </function >\r
+   <function Name="vTaskIncrementTick" TI="0" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="1369">\r
+    <variable Name="pxTemp" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="1378" Addr="0x2" TI="22909"/>\r
+    <variable Name="pxTCB" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="1390" Addr="0x4" TI="23146"/>\r
+   </function >\r
+   <function Name="xTaskResumeAll" TI="22181" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="1167">\r
+    <variable Name="pxTCB" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="1168" Addr="0x5" TI="23146"/>\r
+    <variable Name="xAlreadyYielded" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="1169" Addr="0x4" TI="22181"/>\r
+    <variable Name="xYieldRequired" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="1184" Addr="0x6" TI="22181"/>\r
+   </function >\r
+   <function Name="vTaskResume" TI="0" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="1034">\r
+   <type Family="Pointer" TI="22205" toTI="0"/>\r
+   <type Family="typedef" Name="xTaskHandle" Line="68" ID="22556" toTI="22205"/>\r
+    <parameter Name="pxTaskToResume" TI="22556" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="1034" Addr="0x0" Param="Yes"/>\r
+    <variable Name="pxTCB" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="1035" Addr="0x5" TI="23146"/>\r
+   </function >\r
+   <function Name="vTaskSuspend" TI="0" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="963">\r
+   <type Family="Pointer" TI="22205" toTI="0"/>\r
+   <type Family="typedef" Name="xTaskHandle" Line="68" ID="22556" toTI="22205"/>\r
+    <parameter Name="pxTaskToSuspend" TI="22556" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="963" Addr="0x0" Param="Yes"/>\r
+    <variable Name="pxTCB" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="964" Addr="0x4" TI="23146"/>\r
+   </function >\r
+   <function Name="vTaskPrioritySet" TI="0" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="865">\r
+   <type Family="Pointer" TI="22205" toTI="0"/>\r
+   <type Family="typedef" Name="xTaskHandle" Line="68" ID="22556" toTI="22205"/>\r
+    <parameter Name="pxTask" TI="22556" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="865" Addr="0x0" Param="Yes"/>\r
+    <parameter Name="uxNewPriority" TI="22207" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="865" Addr="0x1" Param="Yes"/>\r
+    <variable Name="pxTCB" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="866" Addr="0x4" TI="23146"/>\r
+    <variable Name="uxCurrentPriority" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="867" Addr="0x1" TI="22207"/>\r
+    <variable Name="xYieldRequired" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="867" Addr="0x7" TI="22207"/>\r
+   </function >\r
+   <function Name="vTaskDelay" TI="0" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="784">\r
+    <parameter Name="xTicksToDelay" TI="22288" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="784" Addr="0x0" Param="Yes"/>\r
+    <variable Name="xTimeToWake" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="785" Addr="0x4" TI="22288"/>\r
+    <variable Name="xAlreadyYielded" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="786" Addr="0x0" TI="22181"/>\r
+   </function >\r
+   <function Name="vTaskDelayUntil" TI="0" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="709">\r
+    <parameter Name="pxPreviousWakeTime" TI="23044" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="709" Addr="0x0" Param="Yes"/>\r
+    <parameter Name="xTimeIncrement" TI="22288" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="709" Addr="0x1" Param="Yes"/>\r
+    <variable Name="xTimeToWake" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="710" Addr="0x5" TI="22288"/>\r
+    <variable Name="xAlreadyYielded" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="711" Addr="0x0" TI="22181"/>\r
+   </function >\r
+   <function Name="vTaskDelete" TI="0" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="649">\r
+   <type Family="Pointer" TI="22205" toTI="0"/>\r
+   <type Family="typedef" Name="xTaskHandle" Line="68" ID="22556" toTI="22205"/>\r
+    <parameter Name="pxTaskToDelete" TI="22556" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="649" Addr="0x0" Param="Yes"/>\r
+    <variable Name="pxTCB" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="650" Addr="0x4" TI="23146"/>\r
+   </function >\r
+   <function Name="vTaskEndScheduler" TI="0" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="1148">\r
+   </function >\r
+   <function Name="prvIdleTask" TI="0" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="1678">\r
+   <type Family="Pointer" TI="22205" toTI="0"/>\r
+    <parameter Name="pvParameters" TI="22205" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="1678" Addr="0x0" Param="Yes"/>\r
+    <parameter Name="pxTCB" TI="23146" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="1678" Addr="0x4" Param="Yes"/>\r
+   </function >\r
+   <type Family="Pointer" TI="24618" toTI="24624"/>\r
+   <function Name="xTaskCreate" TI="22181" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="528">\r
+   <type Family="Pointer" TI="22260" toTI="22266"/>\r
+   <type Family="typedef" Name="pdTASK_CODE" Line="41" ID="22249" toTI="22260"/>\r
+    <parameter Name="pvTaskCode" TI="22249" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="528" Addr="0x0" Param="Yes"/>\r
+    <parameter Name="pcName" TI="24613" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="528" Addr="0x1" Param="Yes"/>\r
+    <parameter Name="usStackDepth" TI="22228" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="528" Addr="0x2" Param="Yes"/>\r
+   <type Family="Pointer" TI="22205" toTI="0"/>\r
+    <parameter Name="pvParameters" TI="22205" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="528" Addr="0x3" Param="Yes"/>\r
+    <parameter Name="uxPriority" TI="22207" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="528" Addr="0x34000000" Param="Yes"/>\r
+   <type Family="Pointer" TI="22205" toTI="0"/>\r
+   <type Family="typedef" Name="xTaskHandle" Line="68" ID="22556" toTI="22205"/>\r
+   <type Family="Pointer" TI="23135" toTI="22556"/>\r
+    <parameter Name="pxCreatedTask" TI="23135" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="528" Addr="0x34000004" Param="Yes"/>\r
+    <variable Name="xReturn" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="529" Addr="0x0" TI="22181"/>\r
+    <variable Name="pxNewTCB" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="530" Addr="0x7" TI="23146"/>\r
+    <variable Name="pxTopOfStack" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="541" Addr="0x0" TI="22743"/>\r
+   </function >\r
+   <function Name="vTaskStartScheduler" TI="0" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="1111">\r
+    <variable Name="xReturn" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="1112" Addr="0x0" TI="22181"/>\r
+   </function >\r
+   <type Family="array" ID="24989" toTI="22545"/>\r
+   <variable Name="pxReadyTasksLists" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="279" Addr="0x200001F8" TI="24989"/>\r
+   <variable Name="xDelayedTaskList1" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="280" Addr="0x20000298" TI="22545"/>\r
+   <variable Name="xDelayedTaskList2" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="281" Addr="0x200002AC" TI="22545"/>\r
+   <variable Name="pxDelayedTaskList" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="282" Addr="0x20000274" TI="25077"/>\r
+   <variable Name="pxOverflowDelayedTaskList" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="283" Addr="0x20000270" TI="25077"/>\r
+   <variable Name="xPendingReadyList" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="284" Addr="0x200001DC" TI="22545"/>\r
+   <variable Name="xTasksWaitingTermination" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="288" Addr="0x2000027C" TI="25136"/>\r
+   <variable Name="uxTasksDeleted" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="289" Addr="0x20000290" TI="22283"/>\r
+   <variable Name="xSuspendedTaskList" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="295" Addr="0x200001C8" TI="22545"/>\r
+   <variable Name="uxCurrentNumberOfTasks" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="300" Addr="0x2000026C" TI="22283"/>\r
+   <variable Name="xTickCount" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="301" Addr="0x20000268" TI="25213"/>\r
+   <variable Name="uxTopUsedPriority" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="302" Addr="0x200002C0" TI="22207"/>\r
+   <variable Name="uxTopReadyPriority" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="303" Addr="0x200001F4" TI="22283"/>\r
+   <variable Name="xSchedulerRunning" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="304" Addr="0x20000294" TI="22278"/>\r
+   <variable Name="uxSchedulerSuspended" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="305" Addr="0x200001F0" TI="22283"/>\r
+   <variable Name="uxMissedTicks" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="306" Addr="0x20000278" TI="22283"/>\r
+   <variable Name="xMissedYield" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="307" Addr="0x2000025C" TI="22278"/>\r
+   <variable Name="xNumOfOverflows" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="308" Addr="0x20000264" TI="22278"/>\r
+   <variable Name="pxCurrentTCB" FileName="C:\E\Dev\FreeRTOS\Source\tasks.c" Line="275" Addr="0x20000260" TI="25363"/>\r
+  </module>\r
+  <module Name="C:\E\Dev\FreeRTOS\Source\list.c" >\r
+   <type Family="Base" Name="unsigned int" ID="25394"/>\r
+   <type Family="Base" Name="int" ID="25401"/>\r
+   <type Family="Base" Name="long int" ID="25408"/>\r
+   <type Family="Base" Name="long long int" ID="25415"/>\r
+   <type Family="Base" Name="unsigned char" ID="25425"/>\r
+   <type Family="Pointer" TI="25432" toTI="0"/>\r
+   <type Family="Base" Name="long unsigned int" ID="25434"/>\r
+   <type Family="Base" Name="short int" ID="25441"/>\r
+   <type Family="Base" Name="char" ID="25448"/>\r
+   <type Family="Base" Name="short unsigned int" ID="25455"/>\r
+   <type Family="Base" Name="long long unsigned int" ID="25462"/>\r
+   <type Family="Base" Name="signed char" ID="25469"/>\r
+   <type Family="typedef" Name="portTickType" Line="74" ID="25481" toTI="25434"/>\r
+   <type Family="ComponentList" Name="xLIST_ITEM" Line="82" ID="25492">\r
+    <Component Name="xItemValue" TI="25504" Line="83" Offs="0"/>\r
+   <type Family="Pointer" TI="25575" toTI="25581"/>\r
+    <Component Name="pxNext" TI="25518" Line="84" Offs="4"/>\r
+    <Component Name="pxPrevious" TI="25532" Line="85" Offs="8"/>\r
+   <type Family="Pointer" TI="25432" toTI="0"/>\r
+    <Component Name="pvOwner" TI="25546" Line="86" Offs="12"/>\r
+   <type Family="Pointer" TI="25432" toTI="0"/>\r
+    <Component Name="pvContainer" TI="25560" Line="87" Offs="16"/>\r
+   </type>\r
+   <type Family="typedef" Name="xListItem" Line="89" ID="25590" toTI="25492"/>\r
+   <type Family="ComponentList" Name="xMINI_LIST_ITEM" Line="92" ID="25601">\r
+    <Component Name="xItemValue" TI="25613" Line="93" Offs="0"/>\r
+    <Component Name="pxNext" TI="25627" Line="94" Offs="4"/>\r
+    <Component Name="pxPrevious" TI="25641" Line="95" Offs="8"/>\r
+   </type>\r
+   <type Family="typedef" Name="xMiniListItem" Line="97" ID="25656" toTI="25601"/>\r
+   <type Family="ComponentList" Name="xLIST" Line="103" ID="25667">\r
+    <Component Name="uxNumberOfItems" TI="25679" Line="104" Offs="0"/>\r
+   <type Family="Pointer" TI="25722" toTI="25728"/>\r
+    <Component Name="pxIndex" TI="25693" Line="105" Offs="4"/>\r
+    <Component Name="xListEnd" TI="25707" Line="106" Offs="8"/>\r
+   </type>\r
+   <type Family="typedef" Name="xList" Line="107" ID="25738" toTI="25667"/>\r
+   <function Name="vListInitialise" TI="0" FileName="C:\E\Dev\FreeRTOS\Source\list.c" Line="94">\r
+   <type Family="Pointer" TI="25786" toTI="25738"/>\r
+    <parameter Name="pxList" TI="25786" FileName="C:\E\Dev\FreeRTOS\Source\list.c" Line="94" Addr="0x0" Param="Yes"/>\r
+   </function >\r
+   <function Name="vListInitialiseItem" TI="0" FileName="C:\E\Dev\FreeRTOS\Source\list.c" Line="114">\r
+   <type Family="Pointer" TI="25829" toTI="25590"/>\r
+    <parameter Name="pxItem" TI="25829" FileName="C:\E\Dev\FreeRTOS\Source\list.c" Line="114" Addr="0x0" Param="Yes"/>\r
+   </function >\r
+   <function Name="vListInsertEnd" TI="0" FileName="C:\E\Dev\FreeRTOS\Source\list.c" Line="121">\r
+    <parameter Name="pxList" TI="25786" FileName="C:\E\Dev\FreeRTOS\Source\list.c" Line="121" Addr="0x0" Param="Yes"/>\r
+    <parameter Name="pxNewListItem" TI="25829" FileName="C:\E\Dev\FreeRTOS\Source\list.c" Line="121" Addr="0x1" Param="Yes"/>\r
+    <variable Name="pxIndex" FileName="C:\E\Dev\FreeRTOS\Source\list.c" Line="122" Addr="0x2" TI="25722"/>\r
+   </function >\r
+   <function Name="vListInsert" TI="0" FileName="C:\E\Dev\FreeRTOS\Source\list.c" Line="144">\r
+    <parameter Name="pxList" TI="25786" FileName="C:\E\Dev\FreeRTOS\Source\list.c" Line="144" Addr="0x0" Param="Yes"/>\r
+    <parameter Name="pxNewListItem" TI="25829" FileName="C:\E\Dev\FreeRTOS\Source\list.c" Line="144" Addr="0x1" Param="Yes"/>\r
+    <variable Name="pxIterator" FileName="C:\E\Dev\FreeRTOS\Source\list.c" Line="145" Addr="0x2" TI="25722"/>\r
+    <variable Name="xValueOfInsertion" FileName="C:\E\Dev\FreeRTOS\Source\list.c" Line="146" Addr="0xC" TI="25481"/>\r
+   </function >\r
+   <function Name="vListRemove" TI="0" FileName="C:\E\Dev\FreeRTOS\Source\list.c" Line="185">\r
+    <parameter Name="pxItemToRemove" TI="25829" FileName="C:\E\Dev\FreeRTOS\Source\list.c" Line="185" Addr="0x0" Param="Yes"/>\r
+    <variable Name="pxList" FileName="C:\E\Dev\FreeRTOS\Source\list.c" Line="186" Addr="0x2" TI="25786"/>\r
+   </function >\r
+  </module>\r
+  <module Name="C:\E\Dev\FreeRTOS\Source\queue.c" >\r
+   <type Family="Base" Name="unsigned int" ID="26061"/>\r
+   <type Family="typedef" Name="size_t" Line="213" ID="26050" toTI="26061"/>\r
+   <type Family="Base" Name="int" ID="26068"/>\r
+   <type Family="Base" Name="long int" ID="26075"/>\r
+   <type Family="Base" Name="long long int" ID="26082"/>\r
+   <type Family="Base" Name="unsigned char" ID="26092"/>\r
+   <type Family="Pointer" TI="26099" toTI="0"/>\r
+   <type Family="Base" Name="long unsigned int" ID="26101"/>\r
+   <type Family="Base" Name="short int" ID="26108"/>\r
+   <type Family="Base" Name="char" ID="26115"/>\r
+   <type Family="Base" Name="short unsigned int" ID="26122"/>\r
+   <type Family="Base" Name="long long unsigned int" ID="26129"/>\r
+   <type Family="Base" Name="signed char" ID="26136"/>\r
+   <type Family="typedef" Name="portTickType" Line="74" ID="26148" toTI="26101"/>\r
+   <type Family="ComponentList" Name="xLIST_ITEM" Line="82" ID="26159">\r
+    <Component Name="xItemValue" TI="26171" Line="83" Offs="0"/>\r
+   <type Family="Pointer" TI="26242" toTI="26248"/>\r
+    <Component Name="pxNext" TI="26185" Line="84" Offs="4"/>\r
+    <Component Name="pxPrevious" TI="26199" Line="85" Offs="8"/>\r
+   <type Family="Pointer" TI="26099" toTI="0"/>\r
+    <Component Name="pvOwner" TI="26213" Line="86" Offs="12"/>\r
+   <type Family="Pointer" TI="26099" toTI="0"/>\r
+    <Component Name="pvContainer" TI="26227" Line="87" Offs="16"/>\r
+   </type>\r
+   <type Family="typedef" Name="xListItem" Line="89" ID="26257" toTI="26159"/>\r
+   <type Family="ComponentList" Name="xMINI_LIST_ITEM" Line="92" ID="26268">\r
+    <Component Name="xItemValue" TI="26280" Line="93" Offs="0"/>\r
+    <Component Name="pxNext" TI="26294" Line="94" Offs="4"/>\r
+    <Component Name="pxPrevious" TI="26308" Line="95" Offs="8"/>\r
+   </type>\r
+   <type Family="typedef" Name="xMiniListItem" Line="97" ID="26323" toTI="26268"/>\r
+   <type Family="ComponentList" Name="xLIST" Line="103" ID="26334">\r
+    <Component Name="uxNumberOfItems" TI="26346" Line="104" Offs="0"/>\r
+   <type Family="Pointer" TI="26389" toTI="26395"/>\r
+    <Component Name="pxIndex" TI="26360" Line="105" Offs="4"/>\r
+    <Component Name="xListEnd" TI="26374" Line="106" Offs="8"/>\r
+   </type>\r
+   <type Family="typedef" Name="xList" Line="107" ID="26405" toTI="26334"/>\r
+   <type Family="ComponentList" Name="xTIME_OUT" Line="74" ID="26416">\r
+    <Component Name="xOverflowCount" TI="26428" Line="75" Offs="0"/>\r
+    <Component Name="xTimeOnEntering" TI="26442" Line="76" Offs="4"/>\r
+   </type>\r
+   <type Family="typedef" Name="xTimeOutType" Line="77" ID="26457" toTI="26416"/>\r
+   <type Family="ComponentList" Name="QueueDefinition" Line="108" ID="26468">\r
+   <type Family="Pointer" TI="26635" toTI="26136"/>\r
+    <Component Name="pcHead" TI="26480" Line="109" Offs="0"/>\r
+    <Component Name="pcTail" TI="26494" Line="110" Offs="4"/>\r
+    <Component Name="pcWriteTo" TI="26508" Line="112" Offs="8"/>\r
+    <Component Name="pcReadFrom" TI="26522" Line="113" Offs="12"/>\r
+    <Component Name="xTasksWaitingToSend" TI="26536" Line="115" Offs="16"/>\r
+    <Component Name="xTasksWaitingToReceive" TI="26550" Line="116" Offs="36"/>\r
+    <Component Name="uxMessagesWaiting" TI="26564" Line="118" Offs="56"/>\r
+    <Component Name="uxLength" TI="26578" Line="119" Offs="60"/>\r
+    <Component Name="uxItemSize" TI="26592" Line="120" Offs="64"/>\r
+    <Component Name="xRxLock" TI="26606" Line="122" Offs="68"/>\r
+    <Component Name="xTxLock" TI="26620" Line="123" Offs="72"/>\r
+   </type>\r
+   <type Family="typedef" Name="xQUEUE" Line="124" ID="26641" toTI="26468"/>\r
+   <type Family="Pointer" TI="26663" toTI="26641"/>\r
+   <type Family="typedef" Name="xQueueHandle" Line="132" ID="26652" toTI="26663"/>\r
+   <function Name="vQueueDelete" TI="0" FileName="C:\E\Dev\FreeRTOS\Source\queue.c" Line="713">\r
+    <parameter Name="pxQueue" TI="26652" FileName="C:\E\Dev\FreeRTOS\Source\queue.c" Line="713" Addr="0x0" Param="Yes"/>\r
+   </function >\r
+   <function Name="uxQueueMessagesWaiting" TI="26101" FileName="C:\E\Dev\FreeRTOS\Source\queue.c" Line="701">\r
+    <parameter Name="pxQueue" TI="26773" FileName="C:\E\Dev\FreeRTOS\Source\queue.c" Line="701" Addr="0x0" Param="Yes"/>\r
+    <variable Name="uxReturn" FileName="C:\E\Dev\FreeRTOS\Source\queue.c" Line="702" Addr="0x4" TI="26101"/>\r
+   </function >\r
+   <function Name="prvCopyDataFromQueue" TI="0" FileName="C:\E\Dev\FreeRTOS\Source\queue.c" Line="757">\r
+    <parameter Name="pxQueue" TI="26836" FileName="C:\E\Dev\FreeRTOS\Source\queue.c" Line="757" Addr="0x0" Param="Yes"/>\r
+   <type Family="Pointer" TI="26841" toTI="26847"/>\r
+    <parameter Name="pvBuffer" TI="26841" FileName="C:\E\Dev\FreeRTOS\Source\queue.c" Line="757" Addr="0x1" Param="Yes"/>\r
+   </function >\r
+   <type Family="Pointer" TI="26841" toTI="26847"/>\r
+   <function Name="xQueueReceiveFromISR" TI="26075" FileName="C:\E\Dev\FreeRTOS\Source\queue.c" Line="653">\r
+    <parameter Name="pxQueue" TI="26652" FileName="C:\E\Dev\FreeRTOS\Source\queue.c" Line="653" Addr="0x0" Param="Yes"/>\r
+   <type Family="Pointer" TI="26841" toTI="26847"/>\r
+    <parameter Name="pvBuffer" TI="26943" FileName="C:\E\Dev\FreeRTOS\Source\queue.c" Line="653" Addr="0x1" Param="Yes"/>\r
+   <type Family="Pointer" TI="26948" toTI="26075"/>\r
+    <parameter Name="pxTaskWoken" TI="26948" FileName="C:\E\Dev\FreeRTOS\Source\queue.c" Line="653" Addr="0x2" Param="Yes"/>\r
+    <variable Name="xReturn" FileName="C:\E\Dev\FreeRTOS\Source\queue.c" Line="654" Addr="0x0" TI="26075"/>\r
+   </function >\r
+   <type Family="Pointer" TI="26841" toTI="26847"/>\r
+   <function Name="prvUnlockQueue" TI="0" FileName="C:\E\Dev\FreeRTOS\Source\queue.c" Line="771">\r
+    <parameter Name="pxQueue" TI="26652" FileName="C:\E\Dev\FreeRTOS\Source\queue.c" Line="771" Addr="0x0" Param="Yes"/>\r
+   </function >\r
+   <function Name="xQueueGenericReceive" TI="26075" FileName="C:\E\Dev\FreeRTOS\Source\queue.c" Line="519">\r
+    <parameter Name="pxQueue" TI="26652" FileName="C:\E\Dev\FreeRTOS\Source\queue.c" Line="519" Addr="0x0" Param="Yes"/>\r
+   <type Family="Pointer" TI="26841" toTI="26847"/>\r
+    <parameter Name="pvBuffer" TI="26943" FileName="C:\E\Dev\FreeRTOS\Source\queue.c" Line="519" Addr="0x1" Param="Yes"/>\r
+    <parameter Name="xTicksToWait" TI="26148" FileName="C:\E\Dev\FreeRTOS\Source\queue.c" Line="519" Addr="0x2" Param="Yes"/>\r
+    <parameter Name="xJustPeeking" TI="26075" FileName="C:\E\Dev\FreeRTOS\Source\queue.c" Line="519" Addr="0x3" Param="Yes"/>\r
+    <variable Name="xReturn" FileName="C:\E\Dev\FreeRTOS\Source\queue.c" Line="520" Addr="0x6" TI="26075"/>\r
+    <variable Name="xTimeOut" FileName="C:\E\Dev\FreeRTOS\Source\queue.c" Line="521" Addr="0x340FFFE0" TI="26457"/>\r
+    <variable Name="pcOriginalReadPosition" FileName="C:\E\Dev\FreeRTOS\Source\queue.c" Line="522" Addr="0x4" TI="26635"/>\r
+   </function >\r
+   <function Name="prvCopyDataToQueue" TI="0" FileName="C:\E\Dev\FreeRTOS\Source\queue.c" Line="720">\r
+    <parameter Name="pxQueue" TI="26663" FileName="C:\E\Dev\FreeRTOS\Source\queue.c" Line="720" Addr="0x0" Param="Yes"/>\r
+   <type Family="Pointer" TI="26841" toTI="26847"/>\r
+    <parameter Name="pvItemToQueue" TI="26841" FileName="C:\E\Dev\FreeRTOS\Source\queue.c" Line="720" Addr="0x1" Param="Yes"/>\r
+    <parameter Name="xPosition" TI="26075" FileName="C:\E\Dev\FreeRTOS\Source\queue.c" Line="720" Addr="0x2" Param="Yes"/>\r
+   </function >\r
+   <function Name="xQueueGenericSendFromISR" TI="26075" FileName="C:\E\Dev\FreeRTOS\Source\queue.c" Line="477">\r
+    <parameter Name="pxQueue" TI="26652" FileName="C:\E\Dev\FreeRTOS\Source\queue.c" Line="477" Addr="0x0" Param="Yes"/>\r
+   <type Family="Pointer" TI="26841" toTI="26847"/>\r
+    <parameter Name="pvItemToQueue" TI="26943" FileName="C:\E\Dev\FreeRTOS\Source\queue.c" Line="477" Addr="0x1" Param="Yes"/>\r
+    <parameter Name="xTaskPreviouslyWoken" TI="26075" FileName="C:\E\Dev\FreeRTOS\Source\queue.c" Line="477" Addr="0x2" Param="Yes"/>\r
+    <parameter Name="xCopyPosition" TI="26075" FileName="C:\E\Dev\FreeRTOS\Source\queue.c" Line="477" Addr="0x3" Param="Yes"/>\r
+   </function >\r
+   <function Name="xQueueGenericSend" TI="26075" FileName="C:\E\Dev\FreeRTOS\Source\queue.c" Line="300">\r
+    <parameter Name="pxQueue" TI="26652" FileName="C:\E\Dev\FreeRTOS\Source\queue.c" Line="300" Addr="0x0" Param="Yes"/>\r
+   <type Family="Pointer" TI="26841" toTI="26847"/>\r
+    <parameter Name="pvItemToQueue" TI="26943" FileName="C:\E\Dev\FreeRTOS\Source\queue.c" Line="300" Addr="0x1" Param="Yes"/>\r
+    <parameter Name="xTicksToWait" TI="26148" FileName="C:\E\Dev\FreeRTOS\Source\queue.c" Line="300" Addr="0x2" Param="Yes"/>\r
+    <parameter Name="xCopyPosition" TI="26075" FileName="C:\E\Dev\FreeRTOS\Source\queue.c" Line="300" Addr="0x3" Param="Yes"/>\r
+    <variable Name="xReturn" FileName="C:\E\Dev\FreeRTOS\Source\queue.c" Line="301" Addr="0x7" TI="26075"/>\r
+    <variable Name="xTimeOut" FileName="C:\E\Dev\FreeRTOS\Source\queue.c" Line="302" Addr="0x340FFFD8" TI="26457"/>\r
+   </function >\r
+   <function Name="xQueueCreateMutex" TI="26652" FileName="C:\E\Dev\FreeRTOS\Source\queue.c" Line="260">\r
+    <variable Name="pxNewQueue" FileName="C:\E\Dev\FreeRTOS\Source\queue.c" Line="261" Addr="0x5" TI="26663"/>\r
+   </function >\r
+   <function Name="xQueueCreate" TI="26652" FileName="C:\E\Dev\FreeRTOS\Source\queue.c" Line="210">\r
+    <parameter Name="uxQueueLength" TI="26101" FileName="C:\E\Dev\FreeRTOS\Source\queue.c" Line="210" Addr="0x0" Param="Yes"/>\r
+    <parameter Name="uxItemSize" TI="26101" FileName="C:\E\Dev\FreeRTOS\Source\queue.c" Line="210" Addr="0x1" Param="Yes"/>\r
+    <variable Name="pxNewQueue" FileName="C:\E\Dev\FreeRTOS\Source\queue.c" Line="211" Addr="0x4" TI="26663"/>\r
+   </function >\r
+  </module>\r
+  <module Name="C:\E\Dev\FreeRTOS\Source\portable\GCC\ARM_CM3\port.c" >\r
+   <type Family="Base" Name="int" ID="27752"/>\r
+   <type Family="Base" Name="unsigned int" ID="27759"/>\r
+   <type Family="Pointer" TI="27777" toTI="27783"/>\r
+   <type Family="typedef" Name="pdTASK_CODE" Line="41" ID="27766" toTI="27777"/>\r
+   <type Family="Pointer" TI="27777" toTI="27783"/>\r
+   <type Family="Pointer" TI="27795" toTI="0"/>\r
+   <type Family="Base" Name="long int" ID="27797"/>\r
+   <type Family="Base" Name="short int" ID="27804"/>\r
+   <type Family="Base" Name="signed char" ID="27811"/>\r
+   <type Family="Base" Name="long unsigned int" ID="27818"/>\r
+   <type Family="Base" Name="short unsigned int" ID="27825"/>\r
+   <type Family="Base" Name="unsigned char" ID="27832"/>\r
+   <type Family="Pointer" TI="27916" toTI="27818"/>\r
+   <function Name="pxPortInitialiseStack" TI="27916" FileName="C:\E\Dev\FreeRTOS\Source\portable\GCC\ARM_CM3\port.c" Line="111">\r
+    <parameter Name="pxTopOfStack" TI="27916" FileName="C:\E\Dev\FreeRTOS\Source\portable\GCC\ARM_CM3\port.c" Line="111" Addr="0x0" Param="Yes"/>\r
+   <type Family="Pointer" TI="27777" toTI="27783"/>\r
+   <type Family="typedef" Name="pdTASK_CODE" Line="41" ID="27766" toTI="27777"/>\r
+    <parameter Name="pxCode" TI="27766" FileName="C:\E\Dev\FreeRTOS\Source\portable\GCC\ARM_CM3\port.c" Line="111" Addr="0x1" Param="Yes"/>\r
+   <type Family="Pointer" TI="27795" toTI="0"/>\r
+    <parameter Name="pvParameters" TI="27795" FileName="C:\E\Dev\FreeRTOS\Source\portable\GCC\ARM_CM3\port.c" Line="111" Addr="0x2" Param="Yes"/>\r
+   </function >\r
+   <function Name="prvSetPSP" TI="0" FileName="C:\E\Dev\FreeRTOS\Source\portable\GCC\ARM_CM3\port.c" Line="129">\r
+    <parameter Name="ulValue" TI="27818" FileName="C:\E\Dev\FreeRTOS\Source\portable\GCC\ARM_CM3\port.c" Line="129" Addr="0x0" Param="Yes"/>\r
+   </function >\r
+   <function Name="prvSetMSP" TI="0" FileName="C:\E\Dev\FreeRTOS\Source\portable\GCC\ARM_CM3\port.c" Line="136">\r
+    <parameter Name="ulValue" TI="27818" FileName="C:\E\Dev\FreeRTOS\Source\portable\GCC\ARM_CM3\port.c" Line="136" Addr="0x0" Param="Yes"/>\r
+   </function >\r
+   <function Name="vPortEndScheduler" TI="0" FileName="C:\E\Dev\FreeRTOS\Source\portable\GCC\ARM_CM3\port.c" Line="169">\r
+   </function >\r
+   <function Name="vPortYieldFromISR" TI="0" FileName="C:\E\Dev\FreeRTOS\Source\portable\GCC\ARM_CM3\port.c" Line="176">\r
+   </function >\r
+   <function Name="vPortEnterCritical" TI="0" FileName="C:\E\Dev\FreeRTOS\Source\portable\GCC\ARM_CM3\port.c" Line="187">\r
+   </function >\r
+   <function Name="vPortExitCritical" TI="0" FileName="C:\E\Dev\FreeRTOS\Source\portable\GCC\ARM_CM3\port.c" Line="194">\r
+   </function >\r
+   <function Name="xPortPendSVHandler" TI="0" FileName="C:\E\Dev\FreeRTOS\Source\portable\GCC\ARM_CM3\port.c" Line="204">\r
+   </function >\r
+   <function Name="xPortSysTickHandler" TI="0" FileName="C:\E\Dev\FreeRTOS\Source\portable\GCC\ARM_CM3\port.c" Line="251">\r
+   </function >\r
+   <function Name="xPortStartScheduler" TI="27797" FileName="C:\E\Dev\FreeRTOS\Source\portable\GCC\ARM_CM3\port.c" Line="146">\r
+   </function >\r
+   <function Name="vPortIncrementTick" TI="0" FileName="C:\E\Dev\FreeRTOS\Source\portable\GCC\ARM_CM3\port.c" Line="317">\r
+   </function >\r
+   <function Name="vPortSwitchContext" TI="0" FileName="C:\E\Dev\FreeRTOS\Source\portable\GCC\ARM_CM3\port.c" Line="309">\r
+   </function >\r
+   <variable Name="ulKernelPriority" FileName="C:\E\Dev\FreeRTOS\Source\portable\GCC\ARM_CM3\port.c" Line="82" Addr="0x8006E18" TI="27839"/>\r
+   <variable Name="uxCriticalNesting" FileName="C:\E\Dev\FreeRTOS\Source\portable\GCC\ARM_CM3\port.c" Line="86" Addr="0x20000084" TI="27818"/>\r
+  </module>\r
+  <module Name="C:\E\Dev\FreeRTOS\Source\portable\MemMang\heap_2.c" >\r
+   <type Family="Base" Name="unsigned int" ID="28286"/>\r
+   <type Family="typedef" Name="size_t" Line="213" ID="28275" toTI="28286"/>\r
+   <type Family="Base" Name="int" ID="28293"/>\r
+   <type Family="Base" Name="long int" ID="28300"/>\r
+   <type Family="Base" Name="long long int" ID="28307"/>\r
+   <type Family="Base" Name="unsigned char" ID="28317"/>\r
+   <type Family="Pointer" TI="28324" toTI="0"/>\r
+   <type Family="Base" Name="long unsigned int" ID="28326"/>\r
+   <type Family="Pointer" TI="28333" toTI="28317"/>\r
+   <type Family="Base" Name="short int" ID="28339"/>\r
+   <type Family="Base" Name="char" ID="28346"/>\r
+   <type Family="Base" Name="short unsigned int" ID="28353"/>\r
+   <type Family="Base" Name="long long unsigned int" ID="28360"/>\r
+   <type Family="Base" Name="signed char" ID="28367"/>\r
+   <type Family="ComponentList" Name="xRTOS_HEAP" Line="75" ID="28379">\r
+    <Component Name="ulDummy" TI="28392" Line="76" Offs="0"/>\r
+   <type Family="array" ID="28421" toTI="28317"/>\r
+    <Component Name="ucHeap" TI="28406" Line="77" Offs="4"/>\r
+   </type>\r
+   <type Family="ComponentList" Name="A_BLOCK_LINK" Line="83" ID="28438">\r
+   <type Family="Pointer" TI="28479" toTI="28438"/>\r
+    <Component Name="pxNextFreeBlock" TI="28450" Line="84" Offs="0"/>\r
+    <Component Name="xBlockSize" TI="28464" Line="85" Offs="4"/>\r
+   </type>\r
+   <type Family="typedef" Name="xBlockLink" Line="86" ID="28485" toTI="28438"/>\r
+   <function Name="vPortFree" TI="0" FileName="C:\E\Dev\FreeRTOS\Source\portable\MemMang\heap_2.c" Line="223">\r
+   <type Family="Pointer" TI="28324" toTI="0"/>\r
+    <parameter Name="pv" TI="28324" FileName="C:\E\Dev\FreeRTOS\Source\portable\MemMang\heap_2.c" Line="223" Addr="0x0" Param="Yes"/>\r
+   <type Family="Pointer" TI="28600" toTI="28485"/>\r
+    <variable Name="pxLink" FileName="C:\E\Dev\FreeRTOS\Source\portable\MemMang\heap_2.c" Line="225" Addr="0x4" TI="28600"/>\r
+    <variable Name="pxIterator" FileName="C:\E\Dev\FreeRTOS\Source\portable\MemMang\heap_2.c" Line="239" Addr="0x1" TI="28600"/>\r
+    <variable Name="xBlockSize" FileName="C:\E\Dev\FreeRTOS\Source\portable\MemMang\heap_2.c" Line="239" Addr="0x0" TI="28275"/>\r
+   </function >\r
+   <type Family="Pointer" TI="28324" toTI="0"/>\r
+   <function Name="pvPortMalloc" TI="28324" FileName="C:\E\Dev\FreeRTOS\Source\portable\MemMang\heap_2.c" Line="145">\r
+    <parameter Name="xWantedSize" TI="28275" FileName="C:\E\Dev\FreeRTOS\Source\portable\MemMang\heap_2.c" Line="145" Addr="0x0" Param="Yes"/>\r
+    <variable Name="pxBlock" FileName="C:\E\Dev\FreeRTOS\Source\portable\MemMang\heap_2.c" Line="146" Addr="0x2" TI="28600"/>\r
+    <variable Name="pxPreviousBlock" FileName="C:\E\Dev\FreeRTOS\Source\portable\MemMang\heap_2.c" Line="146" Addr="0xC" TI="28600"/>\r
+    <variable Name="pxNewBlockLink" FileName="C:\E\Dev\FreeRTOS\Source\portable\MemMang\heap_2.c" Line="146" Addr="0xC" TI="28600"/>\r
+   <type Family="Pointer" TI="28324" toTI="0"/>\r
+    <variable Name="pvReturn" FileName="C:\E\Dev\FreeRTOS\Source\portable\MemMang\heap_2.c" Line="148" Addr="0x4" TI="28324"/>\r
+    <variable Name="pxIterator" FileName="C:\E\Dev\FreeRTOS\Source\portable\MemMang\heap_2.c" Line="211" Addr="0x1" TI="28600"/>\r
+    <variable Name="xBlockSize" FileName="C:\E\Dev\FreeRTOS\Source\portable\MemMang\heap_2.c" Line="211" Addr="0x0" TI="28275"/>\r
+    <variable Name="xHeapHasBeenInitialised" FileName="C:\E\Dev\FreeRTOS\Source\portable\MemMang\heap_2.c" Line="147" Addr="0x200002CC" TI="28300"/>\r
+   </function >\r
+   <variable Name="xHeap" FileName="C:\E\Dev\FreeRTOS\Source\portable\MemMang\heap_2.c" Line="78" Addr="0x200002D0" TI="28379"/>\r
+   <variable Name="xStart" FileName="C:\E\Dev\FreeRTOS\Source\portable\MemMang\heap_2.c" Line="93" Addr="0x200002C4" TI="28485"/>\r
+   <variable Name="xEnd" FileName="C:\E\Dev\FreeRTOS\Source\portable\MemMang\heap_2.c" Line="93" Addr="0x200046D4" TI="28485"/>\r
+  </module>\r
+  <module Name="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" >\r
+   <type Family="Base" Name="signed char" ID="28890"/>\r
+   <type Family="Base" Name="unsigned char" ID="28897"/>\r
+   <type Family="Base" Name="short int" ID="28904"/>\r
+   <type Family="Base" Name="short unsigned int" ID="28911"/>\r
+   <type Family="Base" Name="int" ID="28918"/>\r
+   <type Family="Base" Name="unsigned int" ID="28925"/>\r
+   <type Family="Base" Name="long long int" ID="28932"/>\r
+   <type Family="Base" Name="long long unsigned int" ID="28939"/>\r
+   <type Family="Base" Name="long int" ID="28946"/>\r
+   <type Family="Base" Name="long unsigned int" ID="28956"/>\r
+   <type Family="typedef" Name="clock_t" Line="104" ID="28963" toTI="28956"/>\r
+   <type Family="typedef" Name="time_t" Line="109" ID="28974" toTI="28946"/>\r
+   <type Family="Base" Name="char" ID="29002"/>\r
+   <type Family="Pointer" TI="28996" toTI="29002"/>\r
+   <type Family="typedef" Name="caddr_t" Line="126" ID="28985" toTI="28996"/>\r
+   <type Family="typedef" Name="ino_t" Line="133" ID="29009" toTI="28911"/>\r
+   <type Family="typedef" Name="dev_t" Line="166" ID="29020" toTI="28904"/>\r
+   <type Family="typedef" Name="off_t" Line="171" ID="29031" toTI="28946"/>\r
+   <type Family="typedef" Name="uid_t" Line="173" ID="29042" toTI="28911"/>\r
+   <type Family="typedef" Name="gid_t" Line="174" ID="29053" toTI="28911"/>\r
+   <type Family="typedef" Name="mode_t" Line="195" ID="29064" toTI="28925"/>\r
+   <type Family="typedef" Name="nlink_t" Line="200" ID="29075" toTI="28911"/>\r
+   <type Family="typedef" Name="suseconds_t" Line="263" ID="29086" toTI="28946"/>\r
+   <type Family="Pointer" TI="29098" toTI="29104"/>\r
+   <type Family="ComponentList" Name="stat" Line="26" ID="29109">\r
+    <Component Name="st_dev" TI="29121" Line="27" Offs="0"/>\r
+    <Component Name="st_ino" TI="29135" Line="28" Offs="2"/>\r
+    <Component Name="st_mode" TI="29149" Line="29" Offs="4"/>\r
+    <Component Name="st_nlink" TI="29163" Line="30" Offs="8"/>\r
+    <Component Name="st_uid" TI="29177" Line="31" Offs="10"/>\r
+    <Component Name="st_gid" TI="29191" Line="32" Offs="12"/>\r
+    <Component Name="st_rdev" TI="29205" Line="33" Offs="14"/>\r
+    <Component Name="st_size" TI="29219" Line="34" Offs="16"/>\r
+    <Component Name="st_atime" TI="29233" Line="41" Offs="20"/>\r
+    <Component Name="st_spare1" TI="29247" Line="42" Offs="24"/>\r
+    <Component Name="st_mtime" TI="29261" Line="43" Offs="28"/>\r
+    <Component Name="st_spare2" TI="29275" Line="44" Offs="32"/>\r
+    <Component Name="st_ctime" TI="29289" Line="45" Offs="36"/>\r
+    <Component Name="st_spare3" TI="29303" Line="46" Offs="40"/>\r
+    <Component Name="st_blksize" TI="29317" Line="47" Offs="44"/>\r
+    <Component Name="st_blocks" TI="29331" Line="48" Offs="48"/>\r
+   <type Family="array" ID="29360" toTI="28946"/>\r
+    <Component Name="st_spare4" TI="29345" Line="49" Offs="52"/>\r
+   </type>\r
+   <type Family="ComponentList" Name="timeval" Line="16" ID="29376">\r
+    <Component Name="tv_sec" TI="29388" Line="17" Offs="0"/>\r
+    <Component Name="tv_usec" TI="29402" Line="18" Offs="4"/>\r
+   </type>\r
+   <type Family="ComponentList" Name="timezone" Line="21" ID="29417">\r
+    <Component Name="tz_minuteswest" TI="29429" Line="22" Offs="0"/>\r
+    <Component Name="tz_dsttime" TI="29443" Line="23" Offs="4"/>\r
+   </type>\r
+   <type Family="ComponentList" Name="tms" Line="16" ID="29458">\r
+    <Component Name="tms_utime" TI="29470" Line="17" Offs="0"/>\r
+    <Component Name="tms_stime" TI="29484" Line="18" Offs="4"/>\r
+    <Component Name="tms_cutime" TI="29498" Line="19" Offs="8"/>\r
+    <Component Name="tms_cstime" TI="29512" Line="20" Offs="12"/>\r
+   </type>\r
+   <type Family="ComponentList" Line="79" ID="29527">\r
+    <Component Name="handle" TI="29535" Line="80" Offs="0"/>\r
+    <Component Name="pos" TI="29549" Line="81" Offs="4"/>\r
+   </type>\r
+   <type Family="typedef" Name="poslog" Line="83" ID="29564" toTI="29527"/>\r
+   <function Name="_read" TI="28918" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" Line="173">\r
+    <parameter Name="file" TI="28918" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" Line="173" Addr="0x0" Param="Yes"/>\r
+    <parameter Name="ptr" TI="28996" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" Line="173" Addr="0x1" Param="Yes"/>\r
+    <parameter Name="len" TI="28918" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" Line="173" Addr="0x2" Param="Yes"/>\r
+   </function >\r
+   <function Name="_lseek" TI="28918" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" Line="180">\r
+    <parameter Name="file" TI="28918" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" Line="180" Addr="0x0" Param="Yes"/>\r
+    <parameter Name="ptr" TI="28918" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" Line="180" Addr="0x1" Param="Yes"/>\r
+    <parameter Name="dir" TI="28918" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" Line="180" Addr="0x2" Param="Yes"/>\r
+   </function >\r
+   <function Name="_open" TI="28918" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" Line="203">\r
+    <parameter Name="path" TI="29098" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" Line="203" Addr="0x0" Param="Yes"/>\r
+    <parameter Name="flags" TI="28918" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" Line="203" Addr="0x34000000" Param="Yes"/>\r
+   </function >\r
+   <function Name="_close" TI="28918" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" Line="208">\r
+    <parameter Name="file" TI="28918" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" Line="208" Addr="0x0" Param="Yes"/>\r
+   </function >\r
+   <function Name="_exit" TI="0" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" Line="213">\r
+    <parameter Name="n" TI="28918" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" Line="213" Addr="0x0" Param="Yes"/>\r
+   </function >\r
+   <function Name="_kill" TI="28918" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" Line="219">\r
+    <parameter Name="n" TI="28918" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" Line="219" Addr="0x0" Param="Yes"/>\r
+    <parameter Name="m" TI="28918" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" Line="219" Addr="0x1" Param="Yes"/>\r
+   </function >\r
+   <function Name="_fstat" TI="28918" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" Line="247">\r
+    <parameter Name="file" TI="28918" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" Line="247" Addr="0x0" Param="Yes"/>\r
+   <type Family="Pointer" TI="29958" toTI="29109"/>\r
+    <parameter Name="st" TI="29958" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" Line="247" Addr="0x1" Param="Yes"/>\r
+   </function >\r
+   <function Name="_stat" TI="28918" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" Line="253">\r
+    <parameter Name="fname" TI="29098" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" Line="253" Addr="0x0" Param="Yes"/>\r
+    <parameter Name="st" TI="29958" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" Line="253" Addr="0x1" Param="Yes"/>\r
+   </function >\r
+   <function Name="_link" TI="28918" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" Line="259">\r
+   </function >\r
+   <function Name="_unlink" TI="28918" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" Line="264">\r
+   </function >\r
+   <function Name="_raise" TI="0" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" Line="269">\r
+   </function >\r
+   <function Name="_getpid" TI="28918" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" Line="274">\r
+    <parameter Name="n" TI="28918" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" Line="274" Addr="0x0" Param="Yes"/>\r
+   </function >\r
+   <function Name="_gettimeofday" TI="28918" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" Line="279">\r
+   <type Family="Pointer" TI="30214" toTI="29376"/>\r
+    <parameter Name="tp" TI="30214" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" Line="279" Addr="0x0" Param="Yes"/>\r
+   <type Family="Pointer" TI="30220" toTI="29417"/>\r
+    <parameter Name="tzp" TI="30220" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" Line="279" Addr="0x1" Param="Yes"/>\r
+    <variable Name="value" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" Line="285" Addr="0x3" TI="28918"/>\r
+   </function >\r
+   <function Name="_times" TI="28963" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" Line="304">\r
+   <type Family="Pointer" TI="30284" toTI="29458"/>\r
+    <parameter Name="tp" TI="30284" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" Line="304" Addr="0x0" Param="Yes"/>\r
+    <variable Name="timeval" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" Line="305" Addr="0x1" TI="28963"/>\r
+   </function >\r
+   <function Name="isatty" TI="28918" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" Line="322">\r
+    <parameter Name="fd" TI="28918" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" Line="322" Addr="0x0" Param="Yes"/>\r
+   </function >\r
+   <function Name="_rename" TI="28918" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" Line="336">\r
+    <parameter Name="oldpath" TI="29098" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" Line="336" Addr="0x0" Param="Yes"/>\r
+    <parameter Name="newpath" TI="29098" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" Line="336" Addr="0x1" Param="Yes"/>\r
+   </function >\r
+   <function Name="_system" TI="28918" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" Line="328">\r
+    <parameter Name="s" TI="29098" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" Line="328" Addr="0x0" Param="Yes"/>\r
+   </function >\r
+   <function Name="_write" TI="28918" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" Line="189">\r
+    <parameter Name="file" TI="28918" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" Line="189" Addr="0x0" Param="Yes"/>\r
+    <parameter Name="ptr" TI="28996" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" Line="189" Addr="0x1" Param="Yes"/>\r
+    <parameter Name="len" TI="28918" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" Line="189" Addr="0x2" Param="Yes"/>\r
+    <variable Name="todo" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" Line="190" Addr="0x4" TI="28918"/>\r
+   </function >\r
+   <function Name="_sbrk" TI="28985" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" Line="224">\r
+    <parameter Name="incr" TI="28918" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" Line="224" Addr="0x0" Param="Yes"/>\r
+    <variable Name="prev_heap_end" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" Line="227" Addr="0x2" TI="28996"/>\r
+    <variable Name="heap_end" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" Line="226" Addr="0x0" TI="28996"/>\r
+   </function >\r
+   <type Family="array" ID="30651" toTI="29564"/>\r
+   <variable Name="stack_ptr" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\syscalls.c" Line="53" Addr="0xD" TI="28996"/>\r
+  </module>\r
+  <module Name="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\STM32F10X_IO_putchar.c" >\r
+   <type Family="Base" Name="long int" ID="30735"/>\r
+   <type Family="Base" Name="short int" ID="30742"/>\r
+   <type Family="Base" Name="signed char" ID="30749"/>\r
+   <type Family="Base" Name="long unsigned int" ID="30767"/>\r
+   <type Family="typedef" Name="u32" Line="36" ID="30756" toTI="30767"/>\r
+   <type Family="Base" Name="short unsigned int" ID="30785"/>\r
+   <type Family="typedef" Name="u16" Line="37" ID="30774" toTI="30785"/>\r
+   <type Family="Base" Name="unsigned char" ID="30792"/>\r
+   <type Family="ComponentList" Line="200" ID="30854">\r
+    <Component Name="CRL" TI="30862" Line="201" Offs="0"/>\r
+    <Component Name="CRH" TI="30876" Line="202" Offs="4"/>\r
+    <Component Name="IDR" TI="30890" Line="203" Offs="8"/>\r
+    <Component Name="ODR" TI="30904" Line="204" Offs="12"/>\r
+    <Component Name="BSRR" TI="30918" Line="205" Offs="16"/>\r
+    <Component Name="BRR" TI="30932" Line="206" Offs="20"/>\r
+    <Component Name="LCKR" TI="30946" Line="207" Offs="24"/>\r
+   </type>\r
+   <type Family="ComponentList" Line="445" ID="30961">\r
+    <Component Name="SR" TI="30970" Line="446" Offs="0"/>\r
+    <Component Name="RESERVED0" TI="30984" Line="447" Offs="2"/>\r
+    <Component Name="DR" TI="30999" Line="448" Offs="4"/>\r
+    <Component Name="RESERVED1" TI="31013" Line="449" Offs="6"/>\r
+    <Component Name="BRR" TI="31028" Line="450" Offs="8"/>\r
+    <Component Name="RESERVED2" TI="31043" Line="451" Offs="10"/>\r
+    <Component Name="CR1" TI="31058" Line="452" Offs="12"/>\r
+    <Component Name="RESERVED3" TI="31073" Line="453" Offs="14"/>\r
+    <Component Name="CR2" TI="31088" Line="454" Offs="16"/>\r
+    <Component Name="RESERVED4" TI="31103" Line="455" Offs="18"/>\r
+    <Component Name="CR3" TI="31118" Line="456" Offs="20"/>\r
+    <Component Name="RESERVED5" TI="31133" Line="457" Offs="22"/>\r
+    <Component Name="GTPR" TI="31148" Line="458" Offs="24"/>\r
+    <Component Name="RESERVED6" TI="31163" Line="459" Offs="26"/>\r
+   </type>\r
+   <type Family="typedef" Name="GPIOSpeed_TypeDef" Line="36" ID="31206" toTI="31179"/>\r
+   <type Family="typedef" Name="GPIOMode_TypeDef" Line="51" ID="31275" toTI="31217"/>\r
+   <type Family="ComponentList" Line="60" ID="31286">\r
+    <Component Name="GPIO_Pin" TI="31294" Line="61" Offs="0"/>\r
+    <Component Name="GPIO_Speed" TI="31308" Line="62" Offs="2"/>\r
+    <Component Name="GPIO_Mode" TI="31322" Line="63" Offs="3"/>\r
+   </type>\r
+   <type Family="typedef" Name="GPIO_InitTypeDef" Line="64" ID="31337" toTI="31286"/>\r
+   <type Family="ComponentList" Line="32" ID="31348">\r
+    <Component Name="USART_BaudRate" TI="31356" Line="33" Offs="0"/>\r
+    <Component Name="USART_WordLength" TI="31370" Line="34" Offs="4"/>\r
+    <Component Name="USART_StopBits" TI="31384" Line="35" Offs="6"/>\r
+    <Component Name="USART_Parity" TI="31398" Line="36" Offs="8"/>\r
+    <Component Name="USART_HardwareFlowControl" TI="31412" Line="37" Offs="10"/>\r
+    <Component Name="USART_Mode" TI="31426" Line="38" Offs="12"/>\r
+    <Component Name="USART_Clock" TI="31440" Line="39" Offs="14"/>\r
+    <Component Name="USART_CPOL" TI="31454" Line="40" Offs="16"/>\r
+    <Component Name="USART_CPHA" TI="31468" Line="41" Offs="18"/>\r
+    <Component Name="USART_LastBit" TI="31482" Line="42" Offs="20"/>\r
+   </type>\r
+   <type Family="typedef" Name="USART_InitTypeDef" Line="43" ID="31497" toTI="31348"/>\r
+   <function Name="__io_SetMainOscFreq" TI="0" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\STM32F10X_IO_putchar.c" Line="29">\r
+   <type Family="Base" Name="unsigned int" ID="31545"/>\r
+    <parameter Name="NewFreq" TI="31545" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\STM32F10X_IO_putchar.c" Line="29" Addr="0x0" Param="Yes"/>\r
+   </function >\r
+   <function Name="__io_init" TI="0" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\STM32F10X_IO_putchar.c" Line="35">\r
+    <variable Name="GPIO_InitStructure" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\STM32F10X_IO_putchar.c" Line="36" Addr="0x340FFFEC" TI="31337"/>\r
+    <variable Name="USART_InitStructure" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\STM32F10X_IO_putchar.c" Line="37" Addr="0x340FFFD4" TI="31497"/>\r
+   </function >\r
+   <type Family="Base" Name="int" ID="31657"/>\r
+   <function Name="__io_getchar" TI="31657" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\STM32F10X_IO_putchar.c" Line="122">\r
+   </function >\r
+   <function Name="getchar" TI="31657" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\STM32F10X_IO_putchar.c" Line="142">\r
+   </function >\r
+   <function Name="__io_putchar" TI="0" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\STM32F10X_IO_putchar.c" Line="94">\r
+   <type Family="Base" Name="char" ID="31727"/>\r
+    <parameter Name="c" TI="31727" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\STM32F10X_IO_putchar.c" Line="94" Addr="0x0" Param="Yes"/>\r
+   </function >\r
+   <function Name="putchar" TI="31657" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\STM32F10X_IO_putchar.c" Line="116">\r
+    <parameter Name="c" TI="31657" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\STM32F10X_IO_putchar.c" Line="116" Addr="0x0" Param="Yes"/>\r
+   </function >\r
+   <variable Name="__io_init_done" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\STM32F10X_IO_putchar.c" Line="23" Addr="0x200046DC" TI="30792"/>\r
+   <variable Name="__io_Main_Osc" FileName="C:\Program Files\Raisonance\Ride\lib\ARM\io_putchar\STM32F10X_IO_putchar.c" Line="25" Addr="0x0" TI="31545"/>\r
+  </module>\r
+ </modulelist>\r
+</aoffile>\r
+\r
diff --git a/Demo/CORTEX_STM32F103_Primer_GCC/RTOSDemo.rapp b/Demo/CORTEX_STM32F103_Primer_GCC/RTOSDemo.rapp
new file mode 100644 (file)
index 0000000..1d85f43
--- /dev/null
@@ -0,0 +1,108 @@
+\r
+<ApplicationBuild Header="RTOSDemo" Extern=".\RTOSDemo.rapp" Path=".\RTOSDemo.rapp" OutputFile=".\RTOSDemo.elf" sate="98" >\r
+       <Group Header="ST_Library" Marker="-1" OutputFile="" sate="96" >\r
+               <NodeC Path=".\ST_Code\led.c" Header="led.c" Marker="-1" OutputFile=".\led.o" sate="0" >\r
+                       <Options>                                                                               </Options>\r
+                                                                                                                       \r
+               </NodeC>\r
+               <NodeC Path=".\ST_Code\crt0_STM32x.c" Header="crt0_STM32x.c" Marker="-1" OutputFile=".\crt0_STM32x.o" sate="0" >\r
+                       <Options>                                                                               </Options>\r
+                                                                                                                       \r
+               </NodeC>\r
+               <NodeC Path=".\ST_Code\lcd.c" Header="lcd.c" Marker="-1" OutputFile=".\lcd.o" sate="0" >\r
+                       <Options>                                                                               </Options>\r
+                                                                                                                       \r
+               </NodeC>\r
+               <NodeC Path=".\ST_Code\Util.c" Header="Util.c" Marker="-1" OutputFile=".\Util.o" sate="0" >\r
+                       <Options>                                                                               </Options>\r
+                                                                                                                       \r
+               </NodeC>\r
+               <NodeC Path=".\ST_Code\draw.c" Header="draw.c" Marker="-1" OutputFile=".\draw.o" sate="0" >\r
+                       <Options>                                                                               </Options>\r
+                                                                                                                       \r
+               </NodeC>\r
+               <NodeC Path=".\ST_Code\mems.c" Header="mems.c" Marker="-1" OutputFile=".\mems.o" sate="0" />\r
+               <NodeH Path=".\ST_Code\stm32f10x_conf.h" Header="stm32f10x_conf.h" Marker="-1" OutputFile="" sate="0" />\r
+               <NodeC Path=".\ST_Code\buzzer.c" Header="buzzer.c" Marker="-1" OutputFile=".\buzzer.o" sate="0" />\r
+               <NodeC Path=".\ST_Code\pointer.c" Header="pointer.c" Marker="-1" OutputFile=".\pointer.o" sate="0" />\r
+                                                                                                                                                                                                                                               \r
+       </Group>\r
+       <Group Header="Demo_Source" Marker="-1" OutputFile="" sate="96" >\r
+               <NodeC Path=".\main.c" Header="main.c" Marker="-1" OutputFile=".\main.o" sate="0" />\r
+               <NodeC Path=".\ParTest\ParTest.c" Header="ParTest.c" Marker="-1" OutputFile=".\ParTest.o" sate="0" />\r
+               <NodeH Path=".\FreeRTOSConfig.h" Header="FreeRTOSConfig.h" Marker="-1" OutputFile="" sate="0" />\r
+               <NodeC Path=".\timertest.c" Header="timertest.c" Marker="-1" OutputFile=".\timertest.o" sate="0" />\r
+               <NodeC Path=".\printf-stdarg.c" Header="printf-stdarg.c" Marker="-1" OutputFile=".\printf-stdarg.o" sate="0" >\r
+                       <Options/>\r
+                                       \r
+               </NodeC>\r
+               <NodeC Path="..\Common\Minimal\GenQTest.c" Header="GenQTest.c" Marker="-1" OutputFile=".\GenQTest.o" sate="0" />\r
+               <NodeC Path="..\Common\Minimal\BlockQ.c" Header="BlockQ.c" Marker="-1" OutputFile=".\BlockQ.o" sate="0" />\r
+               <NodeC Path="..\Common\Minimal\blocktim.c" Header="blocktim.c" Marker="-1" OutputFile=".\blocktim.o" sate="0" />\r
+               <NodeC Path="..\Common\Minimal\QPeek.c" Header="QPeek.c" Marker="-1" OutputFile=".\QPeek.o" sate="0" />\r
+               <NodeC Path="..\Common\Minimal\PollQ.c" Header="PollQ.c" Marker="-1" OutputFile=".\PollQ.o" sate="0" />\r
+                                                                                                                                                                                                                                               \r
+       </Group>\r
+       <Group Header="FreeRTOS.org_Source" Marker="-1" OutputFile="" sate="96" >\r
+               <NodeC Path="..\..\Source\tasks.c" Header="tasks.c" Marker="-1" OutputFile=".\tasks.o" sate="0" >\r
+                       <Options/>\r
+                                                                                                                                                                                                                                                                                       \r
+               </NodeC>\r
+               <NodeC Path="..\..\Source\list.c" Header="list.c" Marker="-1" OutputFile=".\list.o" sate="0" >\r
+                       <Options/>\r
+                                                                                                                       \r
+               </NodeC>\r
+               <NodeC Path="..\..\Source\queue.c" Header="queue.c" Marker="-1" OutputFile=".\queue.o" sate="0" >\r
+                       <Options/>\r
+                                                                                                                       \r
+               </NodeC>\r
+               <NodeC Path="..\..\Source\portable\GCC\ARM_CM3\port.c" Header="port.c" Marker="-1" OutputFile=".\port.o" sate="0" />\r
+               <NodeC Path="..\..\Source\portable\MemMang\heap_2.c" Header="heap_2.c" Marker="-1" OutputFile=".\heap_2.o" sate="0" />\r
+                                                                                                                                                                       \r
+       </Group>\r
+       <Options>\r
+               <Config Header="Standard" >\r
+                       <Set Header="ApplicationBuild" >\r
+                               <Section Header="General" >\r
+                                       <Property Header="TargetFamily" Value="ARM" />\r
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       \r
+                               </Section>\r
+                               <Section Header="Directories" >\r
+                                       <Property Header="IncDir" Value="$(ApplicationDir)\..\..\Source\include;$(ApplicationDir)\..\Common\include;$(ApplicationDir)\ST_Code;$(RkitLib)\ARM\include;." Removable="1" />\r
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               \r
+                               </Section>\r
+                                                                                                                                                                                                                                                                                                                                                                                                                                               \r
+                       </Set>\r
+                       <Set Header="Target" >\r
+                               <Section Header="ProcessorARM" >\r
+                                       <Property Header="Processor" Value="STM32F103RBT6" />\r
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       \r
+                               </Section>\r
+                               <Section Header="ToolSetARM" >\r
+                                       <Property Header="BuildToolSetARM" Value="ARM\\GNU.config" Removable="1" />\r
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       \r
+                               </Section>\r
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       \r
+                       </Set>\r
+                       <Set Header="LD" >\r
+                               <Section Header="Startup" >\r
+                                       <Property Header="DEFAULTSTARTUP" Value="No" Removable="1" />\r
+                                       <Property Header="File" Value="" Removable="1" />\r
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               \r
+                               </Section>\r
+                                                                                                                                                                                                                                                                                                                                                                                                                                               \r
+                       </Set>\r
+                       <Set Header="GCC" >\r
+                               <Section Header="Defines" >\r
+                                       <Property Header="Defines" Value="GCC_ARMCM3" Removable="1" />\r
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               \r
+                               </Section>\r
+                               <Section Header="OPTIMIZE" >\r
+                                       <Property Header="Optimize" Value="-O1" Removable="1" />\r
+                                                       \r
+                               </Section>\r
+                                       \r
+                       </Set>\r
+               </Config>\r
+       </Options>\r
+</ApplicationBuild>
\ No newline at end of file
diff --git a/Demo/CORTEX_STM32F103_Primer_GCC/RTOSDemo.rprj b/Demo/CORTEX_STM32F103_Primer_GCC/RTOSDemo.rprj
new file mode 100644 (file)
index 0000000..3eb5276
--- /dev/null
@@ -0,0 +1,4 @@
+\r
+<Project Header="Project 'RTOSDemo'" Path=".\RTOSDemo.rprj" Project="Yes" OutputFile="" sate="96" ActiveApp="RTOSDemo" >\r
+       <ApplicationBuild Header="RTOSDemo" Extern=".\RTOSDemo.rapp" Path=".\RTOSDemo.rapp" OutputFile=".\RTOSDemo.elf" sate="98" ></ApplicationBuild>\r
+</Project>
\ No newline at end of file
diff --git a/Demo/CORTEX_STM32F103_Primer_GCC/ST_Code/Util.c b/Demo/CORTEX_STM32F103_Primer_GCC/ST_Code/Util.c
new file mode 100644 (file)
index 0000000..b331df7
--- /dev/null
@@ -0,0 +1,528 @@
+/********************* (C) COPYRIGHT 2007 RAISONANCE S.A.S. *******************/\r
+/**\r
+*\r
+* @file     Util.c\r
+* @brief    Various utilities  for STM32 CircleOS.\r
+* @author   RT\r
+* @date     07/2007\r
+*\r
+**/\r
+/******************************************************************************/\r
+\r
+/* Includes ------------------------------------------------------------------*/\r
+\r
+#include "circle.h"\r
+#include "adc.h"\r
+\r
+/// @cond Internal\r
+\r
+/* Private defines -----------------------------------------------------------*/\r
+#define  GPIO_USB_PIN   GPIO_Pin_1\r
+#define  GPIOx_USB      GPIOA\r
+#define  OsVersion      "V 1.7"    /*!< CircleOS version string. */\r
+\r
+/* Private typedef -----------------------------------------------------------*/\r
+enum eSpeed CurrentSpeed;\r
+\r
+/* Private variables ---------------------------------------------------------*/\r
+RCC_ClocksTypeDef    RCC_ClockFreq;\r
+int                  dummycounter   = 0;\r
+u8                   fTemperatureInFahrenheit = 0;  /*!< 1 : Fahrenheit, 0 : Celcius (default). */\r
+\r
+/* Private function prototypes -----------------------------------------------*/\r
+static void _int2str( char* ptr, s32 X, u16 digit, int flagunsigned, int fillwithzero );\r
+\r
+/* Private functions ---------------------------------------------------------*/\r
+\r
+/*******************************************************************************\r
+*\r
+*                    _int2str\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Translate a 32 bit word into a string.\r
+*\r
+*  @param[in,out] ptr            A pointer to a string large enough to contain\r
+*                                the translated 32 bit word.\r
+*  @param[in]     X              The 32 bit word to translate.\r
+*  @param[in]     digit          The amount of digits wanted in the result string.\r
+*  @param[in]     flagunsigned   Is the input word unsigned?\r
+*  @param[in]     fillwithzero   Fill with zeros or spaces.\r
+*\r
+**/\r
+/******************************************************************************/\r
+static void _int2str( char* ptr, s32 X, u16 digit, int flagunsigned, int fillwithzero )\r
+   {\r
+   u8    c;\r
+   u8    fFirst   = 0;\r
+   u8    fNeg     = 0;\r
+   u32   DIG      = 1;\r
+   int   i;\r
+\r
+   for( i = 1; i < digit; i++ )\r
+      {\r
+      DIG *= 10;\r
+      }\r
+\r
+   if( !flagunsigned && ( X < 0 ) )\r
+      {\r
+      fNeg = 1;\r
+      X    = -X;\r
+      }\r
+\r
+   u32 r = X;\r
+\r
+   for( i = 0; i < digit; i++, DIG /= 10 )\r
+      {\r
+      c  = (r/DIG);\r
+      r -= (c*DIG);\r
+\r
+      if( fillwithzero || fFirst || c || ( i == ( digit - 1 ) ) )\r
+         {\r
+         if( ( fFirst == 0 ) && !flagunsigned )\r
+            {\r
+            *ptr++ = fNeg ? '-' : ' ';\r
+            }\r
+\r
+         *ptr++ = c + 0x30;\r
+         fFirst = 1;\r
+         }\r
+       else\r
+         {\r
+         *ptr++ = ' ';\r
+         }\r
+      }\r
+\r
+   *ptr++ = 0;\r
+   }\r
+\r
+/* Public functions for CircleOS ---------------------------------------------*/\r
+\r
+/*******************************************************************************\r
+*\r
+*                    delay_unit\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Called by starting_delay().\r
+*\r
+*  @note Not in main.c to avoid inlining.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void delay_unit( void )\r
+   {\r
+   dummycounter++;\r
+   }\r
+\r
+/// @endcond\r
+\r
+/* Public functions ----------------------------------------------------------*/\r
+\r
+/*******************************************************************************\r
+*\r
+*                    UTIL_GetBat\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Return the batterie tension in mV.\r
+*\r
+*  @return Batterie tension in mV.\r
+*\r
+**/\r
+/******************************************************************************/\r
+u16 UTIL_GetBat( void )\r
+   {\r
+#ifdef _ADC\r
+   u16 vbat;\r
+\r
+   // Measure VBAT\r
+   vbat = ADC_ConvertedValue[0];  //*( (u16*)ADC1_DR_Address );      // <=== note changed \r
+   vbat = vbat & 0xFFF;\r
+   vbat = ( vbat * VDD_VOLTAGE_MV ) / 0x1000;\r
+\r
+   return vbat;\r
+#else\r
+   return 0;\r
+#endif\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                    UTIL_GetTemp\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Return the Temperature: degrees / 10, Celcius or Fahrenheit.\r
+*\r
+*  @return The temperature (C or F) (averaging of several channels).\r
+*\r
+**/\r
+/******************************************************************************/\r
+u16 UTIL_GetTemp( void )\r
+   {\r
+   s32 temp;\r
+   s16 *p=&ADC_ConvertedValue[1];  //intent; point to first of 8 results from same source - use a short name for it!\r
+   \r
+   // Measure temp\r
+   //temp = ADC_ConvertedValue[1];//*( (u16*)ADC1_DR_Address ); \r
+   temp = (p[0]+p[1]+p[2]+p[3]+p[4]+p[5]+p[6]+p[7])/8; //take avg of burst of 8 temp reads. may only help reject hi freq noise a bit\r
+                                                       //will not help reduce mains ripple because conversions are SO FAST!!\r
+   temp = temp & 0xFFF;\r
+   temp = ( temp * VDD_VOLTAGE_MV ) / 0x1000;  //finds mV  \r
+   temp = (((1400-temp)*100000)/448)+25000;  //gives approx temp x 1000 degrees C\r
+   \r
+   //Fahrenheit = 32 + 9 / 5 * Celsius\r
+   if ( fTemperatureInFahrenheit ) \r
+      {\r
+      temp = 32000 + (9 * temp) / 5 ;\r
+      }\r
+   \r
+   return temp / 100;\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                    UTIL_SetTempMode\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Set the temperature mode (F/C)\r
+*\r
+*  @param[in]     mode       0: Celcius, 1: Fahrenheit \r
+*\r
+**/\r
+/******************************************************************************/\r
+void UTIL_SetTempMode ( int mode )\r
+   {\r
+   fTemperatureInFahrenheit = mode; \r
+  \r
+   return;\r
+   }\r
+\r
+\r
+/*******************************************************************************\r
+*\r
+*                    UTIL_GetUsb\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Return the USB connexion state.\r
+*\r
+*  @return The USB connexion state.\r
+*\r
+**/\r
+/******************************************************************************/\r
+u8 UTIL_GetUsb( void )\r
+   {\r
+   GPIO_InitStructure.GPIO_Pin   =  GPIO_USB_PIN;\r
+   GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IN_FLOATING;\r
+   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;\r
+\r
+   GPIO_Init( GPIOx_USB, &GPIO_InitStructure );\r
+\r
+   return ( GPIO_ReadInputDataBit( GPIOx_USB, GPIO_USB_PIN ) == Bit_SET );\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                   UTIL_uint2str\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Convert an <b>unsigned</b> integer into a string.\r
+*\r
+*  @param [out]  ptr    The output string.\r
+*  @param [in]   X      The unsigned value to convert.\r
+*  @param [in]   digit  The number of digits in the output string.\r
+*  @param [in]   fillwithzero  \li 0   fill with blanks.\r
+*                              \li 1   fill with zeros.\r
+*\r
+**/\r
+/********************************************************************************/\r
+void UTIL_uint2str( char* ptr, u32 X, u16 digit, int fillwithzero )\r
+   {\r
+   _int2str( ptr, X, digit, 1, fillwithzero);\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                   UTIL_int2str\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Convert a <b>signed</b> integer into a string.\r
+*\r
+*  @param [out]  ptr    The output string.\r
+*  @param [in]   X      The unsigned value to convert.\r
+*  @param [in]   digit  The number of digits in the output string.\r
+*  @param [in]   fillwithzero  \li 0   fill with blanks.\r
+*                              \li 1   fill with zeros.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void UTIL_int2str( char* ptr, s32 X, u16 digit, int fillwithzero )\r
+   {\r
+   _int2str( ptr, X, digit, 0, fillwithzero);\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                UTIL_SetPll\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Set clock frequency (lower to save energy)\r
+*\r
+*  @param [in]   speed  New clock speed from very low to very fast.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void UTIL_SetPll( enum eSpeed speed )\r
+   {\r
+   /* Select PLL as system clock source */\r
+   RCC_SYSCLKConfig( RCC_SYSCLKSource_HSI );\r
+\r
+   /* Enable PLL */\r
+   RCC_PLLCmd( DISABLE );\r
+\r
+   if( ( speed < SPEED_VERY_LOW ) || ( speed > SPEED_VERY_HIGH ) )\r
+      {\r
+      speed = SPEED_MEDIUM;\r
+      } \r
+\r
+   CurrentSpeed = speed; \r
+\r
+   switch( speed )\r
+      {\r
+      // 18 MHz\r
+      case SPEED_VERY_LOW  :\r
+         /* PLLCLK = 6MHz * 3 = 18 MHz */\r
+         RCC_PLLConfig( RCC_PLLSource_HSE_Div2, RCC_PLLMul_3 );\r
+         break;\r
+\r
+      // 24MHz\r
+      case SPEED_LOW       :\r
+         /* PLLCLK = 12MHz * 2 = 24 MHz */\r
+         RCC_PLLConfig( RCC_PLLSource_HSE_Div1, RCC_PLLMul_2 );\r
+         break;\r
+\r
+      // 36MHz\r
+      case SPEED_MEDIUM    :   \r
+      default              :\r
+         /* PLLCLK = 12MHz * 3 = 36 MHz */\r
+         RCC_PLLConfig( RCC_PLLSource_HSE_Div1, RCC_PLLMul_3 );\r
+         break;\r
+\r
+      // 48MHz\r
+      case SPEED_HIGH      :\r
+         /* PLLCLK = 12MHz * 4 = 48 MHz */\r
+         RCC_PLLConfig( RCC_PLLSource_HSE_Div1, RCC_PLLMul_4 );\r
+         break;\r
+\r
+      // 72MHz\r
+      case SPEED_VERY_HIGH :\r
+         /* PLLCLK = 12MHz * 6 = 72 MHz */\r
+         RCC_PLLConfig( RCC_PLLSource_HSE_Div1, RCC_PLLMul_6 );\r
+         break;\r
+      }\r
+\r
+   /* Enable PLL */\r
+   RCC_PLLCmd( ENABLE );\r
+\r
+   /* Wait till PLL is ready */\r
+   while( RCC_GetFlagStatus( RCC_FLAG_PLLRDY ) == RESET )\r
+      { ; }\r
+\r
+   /* Select PLL as system clock source */\r
+   RCC_SYSCLKConfig( RCC_SYSCLKSource_PLLCLK );\r
+\r
+   /* Wait till PLL is used as system clock source */\r
+   while( RCC_GetSYSCLKSource() != 0x08 )\r
+      { ; }\r
+\r
+   /* This function fills a RCC_ClocksTypeDef structure with the current frequencies\r
+     of different on chip clocks (for debug purpose) */\r
+   RCC_GetClocksFreq( &RCC_ClockFreq );\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                UTIL_GetPll\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Get clock frequency\r
+*\r
+*  @return   Current clock speed from very low to very fast.\r
+*\r
+**/\r
+/******************************************************************************/\r
+enum eSpeed UTIL_GetPll( void )\r
+   {\r
+   return CurrentSpeed;\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                UTIL_GetVersion\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Get CircleOS version.\r
+*\r
+*  @return  A pointer to a string containing the CircleOS version.\r
+*\r
+**/\r
+/******************************************************************************/\r
+const char* UTIL_GetVersion( void )\r
+   {\r
+   return OsVersion;\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                UTIL_ReadBackupRegister\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Reads data from the specified Data Backup Register.\r
+*\r
+*  @param[in]  BKP_DR   Specifies the Data Backup Register. This parameter can be BKP_DRx where x:[1, 10]\r
+*\r
+*  @return  The content of the specified Data Backup Register.\r
+*\r
+**/\r
+/******************************************************************************/\r
+u16 UTIL_ReadBackupRegister( u16 BKP_DR )\r
+   {\r
+  return (*(vu16 *)( BKP_BASE + 4 * BKP_DR ) );\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                UTIL_WriteBackupRegister\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Writes data to the specified Data Backup Register.\r
+*\r
+*  @param[in]  BKP_DR   Specifies the Data Backup Register. This parameter can be BKP_DRx where x:[1, 10]\r
+*  @param[in]  Data     The data to write.\r
+*\r
+**/\r
+/********************************************************************************/\r
+void UTIL_WriteBackupRegister( u16 BKP_DR, u16 Data )\r
+   {\r
+  *(vu16 *)( BKP_BASE + 4 * BKP_DR ) = Data;\r
+   }\r
+\r
+\r
+/*******************************************************************************\r
+*\r
+*                                UTIL_SetIrqHandler\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Redirect an IRQ handler.\r
+*\r
+*  @param[in]  Offs   Address in the NVIC table\r
+*  @param[in]  pHDL   Pointer to the handler.\r
+*\r
+**/\r
+/********************************************************************************/\r
+void UTIL_SetIrqHandler( int Offs, tHandler pHDL )\r
+   {\r
+   if ( (Offs >= 8) && (Offs<0x100) )\r
+      *(tHandler *)( CIRCLEOS_RAM_BASE + Offs ) = pHDL;\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                UTIL_GetIrqHandler\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Get the current IRQ handler.\r
+*  Since (V1.6) the vector table is relocated in RAM, the vectors can be easily modified\r
+*  by the applications. \r
+*\r
+*  @param[in]  Offs   Address in the NVIC table\r
+*  @return  A pointer to the current handler.\r
+*\r
+**/\r
+/********************************************************************************/\r
+tHandler UTIL_GetIrqHandler( int Offs )\r
+   {\r
+   if ( (Offs >= 8) && (Offs<0x100) )\r
+      return *(tHandler *)( CIRCLEOS_RAM_BASE + Offs );\r
+   }\r
+\r
+\r
+\r
+/*******************************************************************************\r
+*\r
+*                                UTIL_SetSchHandler\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Redirect a SCHEDULER handler.\r
+*  Set the current SCHEDULER handler. With UTIL_GetSchHandler(), these functions \r
+*  allow to take the control of the different handler. You can: \r
+*        - replace them (get-Set)by your own handler\r
+*        - disable a handler: UTIL_SetSchHandler(Ix,0);  \r
+*        - create a new handler (using the unused handlers).\r
+*  See scheduler.c to understand further...\r
+*\r
+*  @param[in]  Ix   ID if the SCH Handler\r
+*  @param[in]  pHDL   Pointer to the handler.\r
+*\r
+**/\r
+/********************************************************************************/\r
+void UTIL_SetSchHandler( enum eSchHandler Ix, tHandler pHDL )\r
+   {\r
+   if (Ix<SCH_HDL_MAX)\r
+      SchHandler[Ix] = pHDL;\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                UTIL_GetSchHandler\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Get the current SCHEDULER handler. With UTIL_SetSchHandler(), these functions \r
+*  allow to take the control of the different handler. You can: \r
+*        - replace them (get-Set)by your own handler\r
+*        - disable a handler: UTIL_SetSchHandler(Ix,0);  \r
+*        - create a new handler (using the unused handlers).\r
+*  See scheduler.c to understand further...\r
+*\r
+*  @param[in]  Ix   ID is the SCH Handler\r
+*  @return  A pointer to the current handler.\r
+*\r
+**/\r
+/********************************************************************************/\r
+tHandler UTIL_GetSchHandler( enum eSchHandler Ix )\r
+   {\r
+   if ( Ix<SCH_HDL_MAX ) \r
+      return SchHandler [Ix] ; \r
+   }\r
+\r
diff --git a/Demo/CORTEX_STM32F103_Primer_GCC/ST_Code/adc.h b/Demo/CORTEX_STM32F103_Primer_GCC/ST_Code/adc.h
new file mode 100644 (file)
index 0000000..9af8cb8
--- /dev/null
@@ -0,0 +1,18 @@
+/********************* (C) COPYRIGHT 2007 RAISONANCE S.A.S. *******************/\r
+/**\r
+*\r
+* @file     adc.h\r
+* @brief    ADC initialization header file.\r
+* @author   FL\r
+* @date     07/2007\r
+*\r
+**/\r
+/******************************************************************************/\r
+\r
+/* Define to prevent recursive inclusion ---------------------------------------*/\r
+#ifndef __ADC_H\r
+#define __ADC_H\r
+\r
+#define ADC1_DR_Address    ((u32)0x4001244C)\r
+\r
+#endif /*__ADC_H */\r
diff --git a/Demo/CORTEX_STM32F103_Primer_GCC/ST_Code/buzzer.c b/Demo/CORTEX_STM32F103_Primer_GCC/ST_Code/buzzer.c
new file mode 100644 (file)
index 0000000..7440547
--- /dev/null
@@ -0,0 +1,554 @@
+/********************* (C) COPYRIGHT 2007 RAISONANCE S.A.S. *******************/\r
+/**\r
+*\r
+* @file     buzzer.c\r
+* @brief    Buzzer dedicated functions with RTTTL format support.\r
+* @author   IB\r
+* @date     07/2007\r
+*\r
+**/\r
+/******************************************************************************/\r
+\r
+/* Includes ------------------------------------------------------------------*/\r
+#include "circle.h"\r
+\r
+/// @cond Internal\r
+\r
+/* Private typedef -----------------------------------------------------------*/\r
+\r
+/*! Octaves */\r
+enum eOctave  {\r
+      OCT_440  = 0,  /*!< o = 5 */\r
+      OCT_880  = 1,  /*!< o = 6 */\r
+      OCT_1760 = 2,  /*!< o = 7 */\r
+      OCT_3520 = 3,  /*!< o = 8 */\r
+      OCT_7040 = 4   /*!< o = 9 */\r
+      } octave;\r
+\r
+/*! Notes */\r
+enum eNotes  {\r
+      NOTE_PAUSE = 0,    /*!< P  */\r
+      NOTE_LA    = 1,    /*!< A  */\r
+      NOTE_LA_H  = 8+1,  /*!< A# */\r
+      NOTE_SI    = 2,    /*!< B  */\r
+      NOTE_DO    = 3,    /*!< C  */\r
+      NOTE_DO_H  = 8+3,  /*!< C# */\r
+      NOTE_RE    = 4,    /*!< D  */\r
+      NOTE_RE_H  = 8+4,  /*!< D# */\r
+      NOTE_MI    = 5,    /*!< E  */\r
+      NOTE_FA    = 6,    /*!< F  */\r
+      NOTE_FA_H  = 8+6,  /*!< F# */\r
+      NOTE_SOL   = 7,    /*!< G  */\r
+      NOTE_SOL_H = 8+7   /*!< G# */\r
+      } note;\r
+\r
+/* Private define ------------------------------------------------------------*/\r
+#define BUZZER_SHORTBEEP_DURATION   100\r
+#define BUZZER_LONGBEEP_DURATION    1000\r
+#define RTTTL_SEP                   ':'\r
+   \r
+/* Private macro -------------------------------------------------------------*/\r
+/* Private variables ---------------------------------------------------------*/\r
+int                              buzz_counter         = 0;\r
+int                              buzz_in_progress     = 0;\r
+static TIM_TimeBaseInitTypeDef   TIM_TimeBaseStructure;\r
+static TIM_OCInitTypeDef         TIM_OCInitStructure;\r
+u16                              CCR_Val              = 0x2EE0;\r
+enum BUZZER_mode                 Buzzer_Mode          = BUZZER_UNDEF;\r
+u32                              Buzzer_Counter       = 0;\r
+\r
+// For the melody.\r
+const u8*                        CurrentMelody        = 0;\r
+const u8*                        CurrentMelodySTART   = 0;\r
+u8                               DefaultOctave        = OCT_880;\r
+u8                               DefaultDuration      = 4;\r
+u16                              DefaultBeats         = 63;\r
+\r
+u16 Note_Freq [16] = {\r
+   0,    //pause\r
+   440,  //A=LA\r
+   494,  //B=SI\r
+   524,  //C=DO\r
+   588,  //D=RE\r
+   660,  //E=MI\r
+   698,  //F=FA\r
+   784,  //G=SOL\r
+   0,    // "8+n" for "NOTE#"\r
+   466,  //A#=LA#\r
+   0,\r
+   544,  //C#=DO#\r
+   622,  //D#=RE#\r
+   0,\r
+   740,  //F#=FA#\r
+   830   //G#=SOL#\r
+   };\r
+\r
+/* Private function prototypes -----------------------------------------------*/\r
+static void PlayMusic( void );\r
+static void BUZZER_SetFrequency( u16 freq );\r
+\r
+/* Private functions ---------------------------------------------------------*/\r
+\r
+/*******************************************************************************\r
+*\r
+*                                PlayMusic\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Play the next note of the current melody.\r
+*\r
+**/\r
+/******************************************************************************/\r
+static void PlayMusic( void )\r
+   {\r
+   u8 duration = DefaultDuration;\r
+   u8 c;\r
+\r
+   // Discard blank characters\r
+   while ( *CurrentMelody == ' ')\r
+      {\r
+      CurrentMelody++;\r
+      }\r
+\r
+   // Check whether a duration is present.\r
+   if ( (*CurrentMelody > '0') && (*CurrentMelody < '9') )\r
+      {\r
+      duration = *CurrentMelody++ - '0';\r
+\r
+      if ( (*CurrentMelody > '0') && (*CurrentMelody < '9') )\r
+         {\r
+         duration *= 10;\r
+         duration += (*CurrentMelody++ - '0');\r
+         }\r
+      }\r
+\r
+   Buzzer_Counter = ( (32/duration) * 256L * 32L) / DefaultBeats;\r
+   Buzzer_Counter*= (RCC_ClockFreq.SYSCLK_Frequency / 12000000L); //Adapt to HCLK1\r
+\r
+   //read the note\r
+   c = *CurrentMelody++;\r
+\r
+   if ( (c >= 'a') && (c <= 'z') )\r
+      {\r
+      c+=('A'-'a');\r
+      }\r
+\r
+   if ( c == 'P' )\r
+      {\r
+      note = NOTE_PAUSE;\r
+      }\r
+   else if ( (c >= 'A') && (c <= 'G') )\r
+      {\r
+      note = (c - 'A') + NOTE_LA;\r
+\r
+      if ( *CurrentMelody == '#' )\r
+         {\r
+         note|=0x8;\r
+         CurrentMelody++;\r
+         }\r
+      }\r
+\r
+   octave = DefaultOctave;\r
+   c = *CurrentMelody;\r
+\r
+   if ( (c>= '5') && (c<= '8') )\r
+      {\r
+      octave = OCT_440 + (c-'5');\r
+      CurrentMelody++;\r
+      }\r
+\r
+   BUZZER_SetFrequency ( (Note_Freq [ note ] * (1<<octave)));\r
+\r
+   //discard delimiter and ignore special duration\r
+   while ( (c = *CurrentMelody++) != 0 )\r
+      {\r
+      if ( c==',')\r
+         break;\r
+      }\r
+\r
+   if ( *(CurrentMelody-1)==0 )\r
+      {\r
+      CurrentMelody  = 0;\r
+      }\r
+\r
+   if ( c == 0 )\r
+      {\r
+      BUZZER_SetMode ( BUZZER_OFF );\r
+      }\r
+   }\r
+\r
+/***********************************************************************************\r
+*\r
+*                                BUZZER_SetFrequency\r
+*\r
+************************************************************************************/\r
+/**\r
+*\r
+*  Set the buzzer frequency\r
+*\r
+*  @param[in]  freq New frequency.\r
+*\r
+**/\r
+/********************************************************************************/\r
+void BUZZER_SetFrequency ( u16 freq )\r
+   {\r
+   /* Calculate the frequency (depend on the PCLK1 clock value) */\r
+   CCR_Val = (RCC_ClockFreq.PCLK1_Frequency / freq);\r
+\r
+   TIM_TimeBaseStructure.TIM_Period          = CCR_Val * 2;\r
+   TIM_TimeBaseStructure.TIM_Prescaler       = 0x0;\r
+   TIM_TimeBaseStructure.TIM_ClockDivision   = 0x0;\r
+   TIM_TimeBaseStructure.TIM_CounterMode     = TIM_CounterMode_Up;\r
+\r
+   TIM_TimeBaseInit( TIM3, &TIM_TimeBaseStructure );\r
+\r
+   /* Output Compare Toggle Mode configuration: Channel3 */\r
+   TIM_OCInitStructure.TIM_OCMode   = TIM_OCMode_PWM1;\r
+   TIM_OCInitStructure.TIM_Channel  = TIM_Channel_3;\r
+   TIM_OCInitStructure.TIM_Pulse    = CCR_Val;\r
+\r
+   TIM_OCInit( TIM3, &TIM_OCInitStructure );\r
+   TIM_OC3PreloadConfig( TIM3, TIM_OCPreload_Enable );\r
+   }\r
+\r
+/* Public functions for CircleOS ---------------------------------------------*/\r
+\r
+/*******************************************************************************\r
+*\r
+*                                BUZZER_Init\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Buzzer Initialization\r
+*\r
+*  @attention  This function must <b>NOT</b> be called by the user.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void BUZZER_Init( void )\r
+   {\r
+   GPIO_InitTypeDef GPIO_InitStructure;\r
+\r
+   /* Enable GPIOB clock  */\r
+   RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE );\r
+\r
+   /* GPIOB Configuration: TIM3 3in Output */\r
+   GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_0;\r
+   GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF_PP;\r
+   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;\r
+\r
+   GPIO_Init( GPIOB, &GPIO_InitStructure );\r
+\r
+   /* TIM3 Configuration ------------------------------------------------------*/\r
+   /* TIM3CLK = 18 MHz, Prescaler = 0x0, TIM3 counter clock = 18  MHz */\r
+   /* CC update rate = TIM3 counter clock / (2* CCR_Val) ~= 750 Hz */\r
+\r
+   /* Enable TIM3 clock */\r
+   RCC_APB1PeriphClockCmd( RCC_APB1Periph_TIM3, ENABLE );\r
+   TIM_DeInit( TIM3 );\r
+   TIM_TimeBaseStructInit( &TIM_TimeBaseStructure );\r
+   TIM_OCStructInit( &TIM_OCInitStructure );\r
+\r
+   /* Time base configuration */\r
+   TIM_TimeBaseStructure.TIM_Period          = 0xFFFF;\r
+   TIM_TimeBaseStructure.TIM_Prescaler       = 0x0;\r
+   TIM_TimeBaseStructure.TIM_ClockDivision   = 0x0;\r
+   TIM_TimeBaseStructure.TIM_CounterMode     = TIM_CounterMode_Up;\r
+\r
+   TIM_TimeBaseInit( TIM3, &TIM_TimeBaseStructure );\r
+\r
+   /* Output Compare Toggle Mode configuration: Channel3 */\r
+   TIM_OCInitStructure.TIM_OCMode   = TIM_OCMode_Toggle;\r
+   TIM_OCInitStructure.TIM_Channel  = TIM_Channel_3;\r
+   TIM_OCInitStructure.TIM_Pulse    = CCR_Val;\r
+\r
+   TIM_OCInit( TIM3, &TIM_OCInitStructure );\r
+   TIM_OC3PreloadConfig( TIM3, TIM_OCPreload_Disable );\r
+   BUZZER_SetFrequency( 440 );\r
+\r
+   /* Enable TIM3 IT */\r
+   TIM_ITConfig( TIM3, TIM_IT_CC3, ENABLE );\r
+\r
+   Buzzer_Mode  = BUZZER_OFF;\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                BUZZER_Handler\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Called by the CircleOS scheduler to manage Buzzer tasks.\r
+*\r
+*  @attention  This function must <b>NOT</b> be called by the user.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void BUZZER_Handler( void )\r
+   {\r
+   int fSetOFF = 0;\r
+\r
+   if ( Buzzer_Mode == BUZZER_PLAYMUSIC )\r
+      {\r
+      if ( Buzzer_Counter == 0 )\r
+         {\r
+         PlayMusic();\r
+         }\r
+      else \r
+         {\r
+         Buzzer_Counter--;\r
+         }\r
+\r
+      return;\r
+      }\r
+   else if ( Buzzer_Mode == BUZZER_SHORTBEEP )\r
+      {\r
+      if ( Buzzer_Counter++ == (BUZZER_SHORTBEEP_DURATION) ) \r
+         {\r
+         Buzzer_Mode  = BUZZER_OFF;\r
+\r
+         return;\r
+         }\r
+      if ( Buzzer_Counter == (BUZZER_SHORTBEEP_DURATION/2) )\r
+         {\r
+         fSetOFF = 1;\r
+         }\r
+      }\r
+   else if ( Buzzer_Mode == BUZZER_LONGBEEP )\r
+      {\r
+      if ( Buzzer_Counter++ == (BUZZER_LONGBEEP_DURATION) )\r
+         {\r
+         Buzzer_Mode  = BUZZER_OFF;\r
+\r
+         return;\r
+         }\r
+      if ( Buzzer_Counter > (BUZZER_LONGBEEP_DURATION/2) )\r
+         {\r
+         fSetOFF = 1;\r
+         }\r
+      }\r
+\r
+   if ( fSetOFF == 1 )\r
+      {\r
+      TIM_Cmd(TIM3, DISABLE);\r
+      }\r
+   }\r
+\r
+/// @endcond\r
+\r
+/* Public functions ----------------------------------------------------------*/\r
+\r
+/*******************************************************************************\r
+*\r
+*                                BUZZER_GetMode\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Get the current buzzer mode.\r
+*\r
+*  @return  Current buzzer mode.\r
+*\r
+**/\r
+/******************************************************************************/\r
+enum BUZZER_mode BUZZER_GetMode( void )\r
+   {\r
+   return Buzzer_Mode;\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                BUZZER_SetMode\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Set new buzzer mode\r
+*\r
+*  @param[in]  mode  New buzzer mode.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void BUZZER_SetMode( enum BUZZER_mode mode )\r
+   {\r
+   Buzzer_Mode    = mode;\r
+   Buzzer_Counter = 0;\r
+\r
+   switch ( mode )\r
+      {\r
+      case BUZZER_PLAYMUSIC   :\r
+         PlayMusic(); //start melody\r
+         /* no break */\r
+\r
+      case BUZZER_LONGBEEP    :\r
+      case BUZZER_SHORTBEEP   :\r
+      case BUZZER_ON          :\r
+         TIM_Cmd( TIM3, ENABLE );\r
+         break;\r
+\r
+      case BUZZER_OFF         :\r
+         TIM_Cmd( TIM3, DISABLE );\r
+         break;\r
+      }\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                BUZZER_PlayMusic\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Plays the provided melody that follows the RTTTL Format.\r
+*\r
+*  Official Specification\r
+*  @verbatim\r
+<ringing-tones-text-transfer-language> :=\r
+   <name> <sep> [<defaults>] <sep> <note-command>+\r
+<name> := <char>+ ; maximum name length 10 characters\r
+<sep> := ":"\r
+<defaults> :=\r
+   <def-note-duration> |\r
+   <def-note-scale> |\r
+   <def-beats>\r
+<def-note-duration> := "d=" <duration>\r
+<def-note-scale> := "o=" <scale>\r
+<def-beats> := "b=" <beats-per-minute>\r
+<beats-per-minute> := 25,28,...,900 ; decimal value\r
+; If not specified, defaults are\r
+   ;\r
+   ; 4 = duration\r
+   ; 6 = scale\r
+   ; 63 = beats-per-minute\r
+<note-command> :=\r
+   [<duration>] <note> [<scale>] [<special-duration>] <delimiter>\r
+   <duration> :=\r
+   "1" | ; Full 1/1 note\r
+   "2" | ; 1/2 note\r
+   "4" | ; 1/4 note\r
+   "8" | ; 1/8 note\r
+   "16" | ; 1/16 note\r
+   "32" | ; 1/32 note\r
+<note> :=\r
+   "P"  | ; pause\r
+   "C"  |\r
+   "C#" |\r
+   "D"  |\r
+   "D#" |\r
+   "E"  |\r
+   "F"  |\r
+   "F#" |\r
+   "G"  |\r
+   "G#" |\r
+   "A"  |\r
+   "A#" |\r
+   "B"\r
+<scale> :=\r
+   "5" | ; Note A is 440Hz\r
+   "6" | ; Note A is 880Hz\r
+   "7" | ; Note A is 1.76 kHz\r
+   "8" ; Note A is 3.52 kHz\r
+<special-duration> :=\r
+   "." ; Dotted note\r
+<delimiter> := ","\r
+@endverbatim\r
+*\r
+*  @param[in]  melody New melody to play on buzzer.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void BUZZER_PlayMusic (const u8 *melody )\r
+   {\r
+   u8    c;\r
+   u8    default_id  = 0;\r
+   u16   default_val = 0;\r
+\r
+   DefaultOctave      = OCT_880;  // Default for the default Octave.\r
+   DefaultDuration    = 4;        // Default for the default Duration.\r
+   DefaultBeats       = 63;\r
+   CurrentMelody      = melody;\r
+   CurrentMelodySTART = melody;\r
+\r
+   while( *CurrentMelody != RTTTL_SEP )\r
+      {\r
+      if( *CurrentMelody == 0 ) \r
+         {\r
+         return;\r
+         }\r
+\r
+      // Discard the melody name.\r
+      CurrentMelody++; \r
+      }\r
+\r
+   // Now read the defaults if any.\r
+   for( ++CurrentMelody; *CurrentMelody != RTTTL_SEP; CurrentMelody++ )\r
+      {\r
+      if( *CurrentMelody == 0 ) \r
+         {\r
+         return;\r
+         }\r
+\r
+      // Discard any blank.\r
+      while ( *CurrentMelody == ' ' ) \r
+         {\r
+         CurrentMelody++;\r
+         }\r
+\r
+      c = *CurrentMelody;\r
+\r
+      if ( c == RTTTL_SEP )\r
+         {\r
+         break;\r
+         }\r
+\r
+      if ( (c >= 'a') && (c <= 'z') )\r
+         {\r
+         c+=('A'-'a');\r
+         }\r
+\r
+      if ( (c >= 'A') && (c <= 'Z') )\r
+         {\r
+         default_id = c;\r
+         continue;\r
+         }\r
+\r
+      if ( (c >= '0') && (c <= '9') )\r
+         {\r
+         default_val *= 10;\r
+         default_val += (c-'0');\r
+         c = * (CurrentMelody + 1 );\r
+\r
+         if ( (c >= '0') && (c <= '9') )\r
+            {\r
+            continue;\r
+            }\r
+\r
+         if ( default_id == 'D' )\r
+            {\r
+            DefaultDuration = default_val;\r
+            }\r
+         else if ( default_id == 'O' )\r
+            {\r
+            DefaultOctave = default_val - 5;\r
+\r
+            if ( DefaultOctave > OCT_7040 )\r
+               DefaultOctave = OCT_440;\r
+            }\r
+         else if ( default_id == 'B' )\r
+            {\r
+            DefaultBeats = default_val;\r
+\r
+            if ( ( DefaultBeats == 0 ) || ( DefaultBeats > 500 ) )\r
+               DefaultBeats = 63;\r
+            }\r
+\r
+         default_val = 0;\r
+         default_id  = 0;\r
+         }\r
+      }\r
+\r
+   BUZZER_SetMode( BUZZER_PLAYMUSIC );\r
+   }\r
diff --git a/Demo/CORTEX_STM32F103_Primer_GCC/ST_Code/circle.h b/Demo/CORTEX_STM32F103_Primer_GCC/ST_Code/circle.h
new file mode 100644 (file)
index 0000000..0a7c021
--- /dev/null
@@ -0,0 +1,431 @@
+/********************* (C) COPYRIGHT 2007 RAISONANCE S.A.S. *******************/\r
+/**\r
+*\r
+* @file     circle.h\r
+* @brief    General header for the CircleOS project.\r
+* @author   FL\r
+* @date     07/2007\r
+* @version  1.5\r
+*\r
+* It contains the list of the utilities functions organized by sections \r
+* (MEMS, LCD, POINTER, ...)\r
+*\r
+* @date     10/2007\r
+* @version  1.5 types of OutX_F64 and OutX_F256 changed to u32 (same for Y and Z)\r
+**/\r
+/******************************************************************************/\r
+\r
+#include "scheduler.h"\r
+\r
+/* Define to prevent recursive inclusion -------------------------------------*/\r
+#ifndef __CIRCLE_H\r
+#define __CIRCLE_H\r
+\r
+//-------------------------------- General -------------------------------------\r
+/* Defines  ------------------------------------------------------------------*/\r
+#define VDD_VOLTAGE_MV  3300 //Voltage (mV) of the STM32\r
+#define FA_TABLE        0x8006000\r
+#define TIM2            ((TIM_TypeDef *) TIM2_BASE)\r
+#define CIRCLEOS_RAM_BASE 0x20004000\r
+\r
+/* Variables  ----------------------------------------------------------------*/\r
+extern GPIO_InitTypeDef GPIO_InitStructure;\r
+\r
+/* Utilities -----------------------------------------------------------------*/\r
+void UTIL_uint2str( char *ptr , u32 X, u16 digit, int fillwithzero );\r
+void UTIL_int2str( char *ptr , s32 X, u16 digit, int fillwithzero );\r
+u16  UTIL_ReadBackupRegister( u16 BKP_DR );\r
+void UTIL_WriteBackupRegister( u16 BKP_DR, u16 Data );\r
+u16 UTIL_GetBat( void );\r
+u8 UTIL_GetUsb( void );\r
+u16 UTIL_GetTemp ( void ) ;\r
+void UTIL_SetTempMode ( int mode );\r
+//typedef void  (*tHandler)    ( void );\r
+void UTIL_SetIrqHandler ( int , tHandler );\r
+tHandler UTIL_GetIrqHandler ( int  );\r
+extern u16  ADC_ConvertedValue[17];\r
+\r
+\r
+extern enum eSpeed\r
+   {\r
+   SPEED_VERY_LOW    = 1,\r
+   SPEED_LOW         = 2,\r
+   SPEED_MEDIUM      = 3,\r
+   SPEED_HIGH        = 4,\r
+   SPEED_VERY_HIGH   = 5\r
+   } CurrentSpeed;\r
+\r
+enum eSchHandler\r
+   {\r
+   LED_SCHHDL_ID     = 0,\r
+   BUTTON_SCHHDL_ID  = 1,\r
+   BUZZER_SCHHDL_ID  = 2,\r
+   MENU_SCHHDL_ID    = 3,\r
+   POINTER_SCHHDL_ID = 4,\r
+   LCD_SCHHDL_ID     = 5,\r
+   DRAW_SCHHDL_ID    = 6,\r
+   RTC_SCHHDL_ID     = 7,\r
+\r
+   UNUSED0_SCHHDL_ID = 8,\r
+   UNUSED1_SCHHDL_ID = 9,\r
+   UNUSED2_SCHHDL_ID = 10,\r
+   UNUSED3_SCHHDL_ID = 11,\r
+   UNUSED4_SCHHDL_ID = 12,\r
+   UNUSED5_SCHHDL_ID = 13,\r
+   UNUSED6_SCHHDL_ID = 14,\r
+   UNUSED7_SCHHDL_ID = 15   \r
+   } dummy_var ; //for doxygen\r
+\r
+void UTIL_SetSchHandler (  enum eSchHandler , tHandler );\r
+tHandler UTIL_GetSchHandler (  enum eSchHandler  );\r
+#define NULL_SCHHDL (0)\r
+#define LAST_SCHHDL ((tHandler)(-1))\r
+\r
+\r
+void UTIL_SetPll( enum eSpeed speed );\r
+const char* UTIL_GetVersion( void );\r
+enum eSpeed UTIL_GetPll( void );\r
+extern RCC_ClocksTypeDef RCC_ClockFreq;\r
+extern u8 fTemperatureInFahrenheit;  /*!< 1 : Fahrenheit, 0 : Celcius (default). */\r
+\r
+\r
+//---------------------------------   MEMS  ------------------------------------\r
+\r
+/* Exported types ------------------------------------------------------------*/\r
+typedef enum\r
+  {\r
+    V12=0,\r
+    V3=1,\r
+    V6=2,\r
+    V9=3\r
+} Rotate_H12_V_Match_TypeDef;\r
+\r
+typedef struct\r
+   {\r
+   s16 OutX ;\r
+   s16 OutX_F4 ;\r
+   s16 OutX_F16 ;\r
+   s32 OutX_F64 ;\r
+   s32 OutX_F256 ;\r
+   s16 OutY ;\r
+   s16 OutY_F4 ;\r
+   s16 OutY_F16 ;\r
+   s32 OutY_F64 ;\r
+   s32 OutY_F256 ;\r
+   s16 OutZ ;\r
+   s16 OutZ_F4 ;\r
+   s16 OutZ_F16 ;\r
+   s32 OutZ_F64 ;\r
+   s32 OutZ_F256 ;\r
+   s16 Shocked ;\r
+   s16 RELATIVE_X ;\r
+   s16 RELATIVE_Y ;\r
+   s16 DoubleClick ;\r
+   } tMEMS_Info;\r
+\r
+extern tMEMS_Info MEMS_Info;\r
+\r
+/* Exported functions --------------------------------------------------------*/\r
+void MEMS_Init(void);\r
+void MEMS_Handler(void);\r
+void MEMS_GetPosition(s16 * pX, s16* pY);\r
+void MEMS_SetNeutral( void );\r
+void MEMS_GetRotation(Rotate_H12_V_Match_TypeDef * H12);\r
+tMEMS_Info* MEMS_GetInfo (void);\r
+u8 MEMS_ReadID(void);\r
+\r
+//----------------------------------   LED -------------------------------------\r
+\r
+/* Exported types ------------------------------------------------------------*/\r
+enum LED_mode { LED_UNDEF = -1, LED_OFF = 0, LED_ON = 1, LED_BLINKING_LF = 2, LED_BLINKING_HF = 3 };\r
+enum LED_id { LED_GREEN = 0, LED_RED = 1};\r
+\r
+/* Exported functions --------------------------------------------------------*/\r
+void LED_Init (void);\r
+void LED_Handler_hw ( enum LED_id id );\r
+void LED_Handler ( void );\r
+void LED_Set ( enum LED_id id, enum LED_mode mode );\r
+\r
+//--------------------------------   ADC  --------------------------------------\r
+\r
+/* Exported functions --------------------------------------------------------*/\r
+void ADConverter_Init (void);\r
+\r
+\r
+//==============================================================================\r
+//--------------------------------   SHUTDOWN  ---------------------------------\r
+/* Exported functions --------------------------------------------------------*/\r
+void SHUTDOWN_Action (void);\r
+\r
+//--------------------------------   BUTTON  -----------------------------------\r
+/* Exported types ------------------------------------------------------------*/\r
+enum BUTTON_mode  { BUTTON_DISABLED  = -1, BUTTON_ONOFF    = 0,\r
+                     BUTTON_ONOFF_FORMAIN = 1, BUTTON_WITHCLICK  = 2 };\r
+enum BUTTON_state { BUTTON_UNDEF = -1, BUTTON_RELEASED = 0, BUTTON_PUSHED = 1,\r
+                     BUTTON_PUSHED_FORMAIN = 2 , BUTTON_CLICK = 3, BUTTON_DBLCLICK = 4 };\r
+\r
+/* Exported functions -------------------------------------------------------*/\r
+void BUTTON_Init (void);\r
+void BUTTON_Handler(void);\r
+enum BUTTON_state BUTTON_GetState();\r
+void BUTTON_SetMode( enum BUTTON_mode mode);\r
+enum BUTTON_mode BUTTON_GetMode ( void ) ;\r
+void BUTTON_WaitForRelease();\r
+\r
+//--------------------------------   POINTER  ----------------------------------\r
+\r
+/* Exported types ------------------------------------------------------------*/\r
+enum POINTER_mode  { POINTER_UNDEF  = -1, POINTER_OFF = 0, POINTER_ON = 1, POINTER_MENU  = 2, POINTER_APPLICATION = 3, POINTER_RESTORE_LESS = 4 };\r
+enum POINTER_state { POINTER_S_UNDEF  = -1,  POINTER_S_DISABLED = 0, POINTER_S_ENABLED = 1 };\r
+\r
+/* Exported defines ----------------------------------------------------------*/\r
+#define POINTER_WIDTH 7\r
+\r
+typedef struct\r
+   {\r
+   s16 xPos ;\r
+   s16 yPos ;\r
+   s16 shift_PosX ;\r
+   s16 shift_PosY ;\r
+   s16 X_PosMin ;\r
+   s16 Y_PosMin ;\r
+   s16 X_PosMax ;\r
+   s16 Y_PosMax ;\r
+   } tPointer_Info;\r
+\r
+extern tPointer_Info POINTER_Info ;\r
+\r
+/* Exported vars -------------------------------------------------------------*/\r
+extern unsigned char *BallPointerBmpSize;\r
+extern unsigned char BallPointerBmp [POINTER_WIDTH], *CurrentPointerBmp,*CurrentPointerSize;\r
+extern u16 CurrentPointerColor;\r
+extern u16 BallColor;\r
+extern s16 POINTER_X_PosMin;\r
+extern s16 POINTER_Y_PosMin;\r
+extern s16 POINTER_X_PosMax;\r
+extern s16 POINTER_Y_PosMax;\r
+extern unsigned char PointerAreaStore [2*POINTER_WIDTH*POINTER_WIDTH];\r
+\r
+/* Exported functions --------------------------------------------------------*/\r
+extern void POINTER_Init ( void ) ;\r
+void POINTER_Handler(void);\r
+u16  POINTER_GetCurrentAngleStart ( void );\r
+void POINTER_SetCurrentAngleStart ( u16 );\r
+u16  POINTER_GetCurrentSpeedOnAngle ( void );\r
+void POINTER_SetCurrentSpeedOnAngle ( u16  newspeed );\r
+void POINTER_SetMode( enum POINTER_mode mode);\r
+void POINTER_SetCurrentPointer( unsigned char width, unsigned char height, unsigned char *bmp);\r
+enum POINTER_state POINTER_GetState(void);\r
+void POINTER_Draw (u8 Line, u8 Column, u8 Width, u8 Height, u8 *Bmp);\r
+void POINTER_SetRect ( s16 x, s16 y, s16 width, s16 height );  //Restrict the move of the pointer to a rectangle\r
+void POINTER_SetRectScreen ( void );   //Remove any space restriction for the pointer moves.\r
+void POINTER_Save (u8 Line, u8 Column, u8 Width, u8 Height);\r
+void POINTER_Restore (u8 Line, u8 Column, u8 Width, u8 Height);\r
+u16  POINTER_GetPos(void);     //Return the poistion of the cursor (x=lower byte, y = upperbyte)\r
+void POINTER_SetPos ( u16 x, u16 y );\r
+typedef void  (*tAppPtrMgr) ( int , int );\r
+void POINTER_SetApplication_Pointer_Mgr(  tAppPtrMgr mgr );\r
+tPointer_Info* POINTER_GetInfo ( void );\r
+u16 POINTER_GetColor ( void ) ;\r
+void POINTER_SetColor ( u16 color );\r
+enum POINTER_mode POINTER_GetMode( void );\r
+void POINTER_SetCurrentAreaStore ( u8 *ptr );\r
+void LCD_SetRotateScreen ( u8 RotateScreen);\r
+u8 LCD_GetRotateScreen ();\r
+void LCD_SetScreenOrientation (Rotate_H12_V_Match_TypeDef ScreenOrientation);\r
+Rotate_H12_V_Match_TypeDef LCD_GetScreenOrientation ();\r
+\r
+//----------------------------------   LCD   -----------------------------------\r
+\r
+/* Exported defines ----------------------------------------------------------*/\r
+//RGB is 16-bit coded as    G2G1G0B4 B3B2B1B0 R4R3R2R1 R0G5G4G3\r
+#define RGB_MAKE(xR,xG,xB)    ( ( (xG&0x07)<<13 ) + ( (xG)>>5 )  +      \\r
+                                ( ((xB)>>3) << 8 )          +      \\r
+                                ( ((xR)>>3) << 3 ) )\r
+#define RGB_RED         0x00F8\r
+#define RGB_BLACK       0x0000\r
+#define RGB_WHITE       0xffff\r
+#define RGB_BLUE        0x1F00\r
+#define RGB_GREEN       0xE007\r
+#define RGB_YELLOW      (RGB_GREEN|RGB_RED)\r
+#define RGB_MAGENTA     (RGB_BLUE|RGB_RED)\r
+#define RGB_LIGHTBLUE   (RGB_BLUE|RGB_GREEN)\r
+#define RGB_ORANGE      (RGB_RED | 0xE001)   //green/2 + red\r
+#define RGB_PINK        (RGB_MAGENTA | 0xE001)   //green/2 + magenta\r
+\r
+// SCREEN Infos\r
+#define SCREEN_WIDTH        128\r
+#define SCREEN_HEIGHT        128\r
+#define CHIP_SCREEN_WIDTH    132\r
+#define CHIP_SCREEN_HEIGHT 132\r
+\r
+// Characters Infos\r
+#define CHAR_WIDTH            7\r
+#define CHAR_HEIGHT           14\r
+\r
+// PWM rates.\r
+#define BACKLIGHTMIN                0x1000   /*!< Minimal PWM rate.           */\r
+#define DEFAULT_CCR_BACKLIGHTSTART  0x8000   /*!< Default PWM rate.           */\r
+\r
+/* Exported vars -------------------------------------------------------------*/\r
+extern Rotate_H12_V_Match_TypeDef Screen_Orientation;\r
+extern int rotate_screen;\r
+\r
+/* Exported functions --------------------------------------------------------*/\r
+void LCD_Init(void);\r
+void LCD_Handler(void);\r
+void LCD_SetRect_For_Cmd( s16 x, s16 y, s16 width, s16 height );\r
+u16  LCD_GetPixel( u8 x, u8 y );\r
+void LCD_DrawPixel( u8 x, u8 y, u16 Pixel );\r
+void LCD_SendLCDCmd( u8 Cmd );\r
+void LCD_SendLCDData( u8 Data );\r
+u32  LCD_ReadLCDData( void );\r
+void LCD_FillRect( u16 x, u16 y, u16 width, u16 height, u16 color );\r
+void LCD_DrawRect( u16 x, u16 y, u16 width, u16 height, u16 color );\r
+void LCD_DisplayChar( u8 x, u8 y, u8 Ascii, u16 TextColor, u16 BGndColor, u16 CharMagniCoeff );\r
+void LCD_RectRead( u16 x, u16 y, u16 width, u16 height, u8* bmp );\r
+void LCD_SetBackLight (u32 newBacklightStart);\r
+u32  LCD_GetBackLight ( void );\r
+void LCD_SetBackLightOff( void );\r
+void LCD_SetBackLightOn( void );\r
+\r
+#include "lcd.h"\r
+\r
+//----------------------------------   DRAW   ----------------------------------\r
+\r
+/* Exported functions --------------------------------------------------------*/\r
+void DRAW_Init(void);\r
+void DRAW_Clear(void);\r
+void DRAW_Handler(void);\r
+void DRAW_SetDefaultColor (void);\r
+void DRAW_SetImage(const u16 *imageptr, u8 x, u8 y, u8 width, u8 height);\r
+void DRAW_SetImageBW(const u8 *imageptr, u8 x, u8 y, u8 width, u8 height);\r
+void DRAW_SetLogoBW(void);\r
+void DRAW_DisplayVbat(u8 x, u8 y);\r
+void DRAW_DisplayTime(u8 x, u8 y);\r
+void DRAW_DisplayTemp(u8 x, u8 y);\r
+void DRAW_DisplayString( u8 x, u8 y, const u8 *ptr, u8 len );\r
+void DRAW_DisplayStringInverted( u8 x, u8 y, const u8 *ptr, u8 len );\r
+u16  DRAW_GetCharMagniCoeff(void);\r
+void DRAW_SetCharMagniCoeff(u16 Coeff);\r
+u16  DRAW_GetTextColor(void);\r
+void DRAW_SetTextColor(u16 Color);\r
+u16  DRAW_GetBGndColor(void);\r
+void DRAW_SetBGndColor(u16 Color);\r
+void DRAW_Batt( void );\r
+void DRAW_Line (s16 x1, s16 y1, s16 x2, s16 y2, u16 color );\r
+\r
+/* Exported vars -------------------------------------------------------------*/\r
+extern int fDisplayTime;\r
+\r
+\r
+//--------------------------------   BUZZER  -----------------------------------\r
+\r
+/* Exported defines ----------------------------------------------------------*/\r
+#define BUZZER_BEEP  BUZZER_SHORTBEEP\r
+\r
+/* Exported type def ---------------------------------------------------------*/\r
+enum  BUZZER_mode  { BUZZER_UNDEF  = -1, BUZZER_OFF    = 0, BUZZER_ON    = 1,\r
+                        BUZZER_SHORTBEEP  = 2, BUZZER_LONGBEEP  = 3, BUZZER_PLAYMUSIC = 4 };\r
+\r
+/* Exported type functions ---------------------------------------------------*/\r
+void  BUZZER_Init(void);\r
+void  BUZZER_Handler(void);\r
+void  BUZZER_SetMode( enum BUZZER_mode mode);\r
+enum  BUZZER_mode BUZZER_GetMode( void );\r
+void  BUZZER_PlayMusic (const u8 *melody );\r
+\r
+//---------------------------------   MENU   -----------------------------------\r
+\r
+/* Exported defines ----------------------------------------------------------*/\r
+#define MENU_MAXITEM 6\r
+#define APP_VOID ((tMenuItem *)(-1))\r
+#define MAX_APP_MENU_SIZE 10\r
+#define MAXAPP  64\r
+#define MAX_MENUAPP_SIZE 3\r
+#define REMOVE_MENU  0x01\r
+#define APP_MENU     0x02\r
+\r
+enum  MENU_code  {   MENU_LEAVE  = 0, MENU_CONTINUE = 1, MENU_REFRESH = 2,\r
+                        MENU_CHANGE = 3, MENU_CONTINUE_COMMAND = 4};\r
+\r
+/* Exported type def ---------------------------------------------------------*/\r
+typedef struct\r
+   {\r
+   const char *Text;\r
+   enum MENU_code (*Fct_Init)  ( void );\r
+   enum MENU_code (*Fct_Manage)( void );\r
+   int fMenuFlag;\r
+   } tMenuItem;\r
+\r
+typedef struct\r
+   {\r
+   unsigned fdispTitle : 1;\r
+   const char *Title;\r
+   int NbItems;\r
+   int LgMax;\r
+   int XPos, YPos;\r
+   int XSize, YSize;\r
+   unsigned int SelectedItem;\r
+   tMenuItem Items[MENU_MAXITEM];\r
+   } tMenu;\r
+\r
+/* Exported vars -------------------------------------------------------------*/\r
+extern tMenu MainMenu, *CurrentMenu;\r
+extern tMenuItem *CurrentCommand;\r
+extern int BGndColor_Menu;\r
+extern int TextColor_Menu;\r
+\r
+/* Exported type functions ---------------------------------------------------*/\r
+enum  MENU_code fColor ( void ) ;\r
+void  MENU_Set ( tMenu *mptr );\r
+void  MENU_Handler ( void ) ;\r
+extern enum MENU_code MENU_Quit ( void );\r
+void  MENU_Remove ( void ) ;\r
+void  MENU_Question ( char *str, int *answer );\r
+void  MENU_Print ( char *str );\r
+enum  MENU_code MENU_SetLevel_Ini( void );\r
+enum  MENU_code MENU_SetLevel_Mgr( u32 *value, u32 value_range [] ) ;\r
+void  MENU_ClearCurrentCommand( void );\r
+void  MENU_SetLevelTitle(u8* title);\r
+void  MENU_SetTextColor ( int TextColor );\r
+int   MENU_GetTextColor ( void );\r
+void  MENU_SetBGndColor ( int BGndColor );\r
+int   MENU_GetBGndColor ( void );\r
+extern enum MENU_code fQuit ( void ) ;\r
+void MENU_ClearCurrentMenu(void);\r
+\r
+//--------------------------------   BACKLIGHT  --------------------------------\r
+\r
+/* Exported type functions ---------------------------------------------------*/\r
+void  BackLight_Configuration (void);\r
+void  ManageBackLight (void);\r
+void  BackLight_Change (void);\r
+\r
+//--------------------------------   RTC  --------------------------------------\r
+\r
+/* Exported type functions ---------------------------------------------------*/\r
+void  RTC_Init(void);\r
+void  RTC_SetTime (u32 THH, u32 TMM, u32 TSS);\r
+void  RTC_GetTime (u32 * THH, u32 * TMM, u32 * TSS);\r
+void  RTC_DisplayTime ( void );\r
+\r
+//Backup registers\r
+#define BKP_SYS1     1\r
+#define BKP_SYS2     2\r
+#define BKP_SYS3     3\r
+#define BKP_SYS4     4\r
+#define BKP_SYS5     5\r
+#define BKP_SYS6     6\r
+#define BKP_USER1    7\r
+#define BKP_USER2    8\r
+#define BKP_USER3    9\r
+#define BKP_USER4    10\r
+\r
+#define BKP_PLL      (BKP_SYS2)\r
+#define BKP_BKLIGHT  (BKP_SYS3)\r
+\r
+//--------------------------------- Application --------------------------------\r
+void  (*Application_Pointer_Mgr) ( int sposX, int sposY);\r
+\r
+#endif /*__CIRCLE_H */\r
diff --git a/Demo/CORTEX_STM32F103_Primer_GCC/ST_Code/circle_api.h b/Demo/CORTEX_STM32F103_Primer_GCC/ST_Code/circle_api.h
new file mode 100644 (file)
index 0000000..f3cdb8f
--- /dev/null
@@ -0,0 +1,679 @@
+/********************* (C) COPYRIGHT 2007 RAISONANCE S.A.S. *******************/\r
+/**\r
+*\r
+* @file     circle_api.h\r
+* @brief    General header for the STM32-circle projects.\r
+* @author   FL\r
+* @date     07/2007\r
+* @version  1.2\r
+* @date     10/2007\r
+* @version  1.5 types of OutX_F64 and OutX_F256 changed to u32 (same for Y and Z)\r
+* @date     10/2007\r
+* @version  1.6 Add the IRQ handler replacement\r
+*\r
+* It contains the list of the utilities functions organized by sections\r
+* (MEMS, LCD, POINTER, ...)\r
+*\r
+**/\r
+/*******************************************************************************\r
+*\r
+* Use this header with version 1.5 or later of the OS.\r
+*\r
+* For a complete documentation on the CircleOS, please go to:\r
+*  http://www.stm32circle.com\r
+*\r
+*******************************************************************************/\r
+\r
+#include "stm32f10x_lib.h"\r
+\r
+/* Define to prevent recursive inclusion -------------------------------------*/\r
+#ifndef __CIRCLE_API_H\r
+#define __CIRCLE_API_H\r
+\r
+//-------------------------------- General -------------------------------------\r
+\r
+/**\r
+* @enum  eSpeed\r
+* @brief Clock speeds.\r
+*\r
+* Available clock speeds.\r
+**/\r
+extern enum eSpeed\r
+   {\r
+   SPEED_VERY_LOW    = 1,\r
+   SPEED_LOW         = 2,\r
+   SPEED_MEDIUM      = 3,\r
+   SPEED_HIGH        = 4,\r
+   SPEED_VERY_HIGH   = 5\r
+   } CurrentSpeed;\r
+enum eSchHandler\r
+   {\r
+   LED_SCHHDL_ID     = 0,\r
+   BUTTON_SCHHDL_ID  = 1,\r
+   BUZZER_SCHHDL_ID  = 2,\r
+   MENU_SCHHDL_ID    = 3,\r
+   POINTER_SCHHDL_ID = 4,\r
+   LCD_SCHHDL_ID     = 5,\r
+   DRAW_SCHHDL_ID    = 6,\r
+   RTC_SCHHDL_ID     = 7,\r
+\r
+   UNUSED0_SCHHDL_ID = 8,\r
+   UNUSED1_SCHHDL_ID = 9,\r
+   UNUSED2_SCHHDL_ID = 10,\r
+   UNUSED3_SCHHDL_ID = 11,\r
+   UNUSED4_SCHHDL_ID = 12,\r
+   UNUSED5_SCHHDL_ID = 13,\r
+   UNUSED6_SCHHDL_ID = 14,\r
+   UNUSED7_SCHHDL_ID = 15   \r
+   }; \r
+\r
+\r
+/// @cond Internal\r
+\r
+extern RCC_ClocksTypeDef RCC_ClockFreq;\r
+\r
+/* Typedefs ------------------------------------------------------------------*/\r
+typedef u32 (*tCircleFunc0 ) (void);\r
+typedef u32 (*tCircleFunc1 ) (u32 param1);\r
+typedef u32 (*tCircleFunc2 ) (u32 param1, u32 param2);\r
+typedef u32 (*tCircleFunc3 ) (u32 param1, u32 param2, u32 param3);\r
+typedef u32 (*tCircleFunc4 ) (u32 param1, u32 param2, u32 param3, u32 param4);\r
+typedef u32 (*tCircleFunc5 ) (u32 param1, u32 param2, u32 param3, u32 param4, u32 param5);\r
+typedef u32 (*tCircleFunc6 ) (u32 param1, u32 param2, u32 param3, u32 param4, u32 param5, u32 param6);\r
+\r
+extern tCircleFunc0 (*ptrCircle_API) [];\r
+\r
+/* Defines -------------------------------------------------------------------*/\r
+#define Circle_API   (*ptrCircle_API)\r
+\r
+#define POINTER_ID   0x00\r
+#define DRAW_ID      0x20\r
+#define LCD_ID       0x40\r
+#define LED_ID       0x60\r
+#define MEMS_ID      0x70\r
+#define BUTTON_ID    0x80\r
+#define BUZZER_ID    0x90\r
+#define MENU_ID      0xA0\r
+#define UTIL_ID      0xB0\r
+#define RTC_ID       0xC0\r
+\r
+// UTIL functions definition.\r
+#define UTIL_SET_PLL_ID                 (UTIL_ID + 0)    // Set clock frequency.\r
+#define UTIL_GET_PLL_ID                 (UTIL_ID + 1)    // Get clock frequency.\r
+#define UTIL_UINT2STR_ID                (UTIL_ID + 2)    // Convert an unsigned integer into a string.\r
+#define UTIL_INT2STR_ID                 (UTIL_ID + 3)    // Convert a signed integer into a string.\r
+#define UTIL_GET_VERSION_ID             (UTIL_ID + 4)    // Get CircleOS version.\r
+#define UTIL_READ_BACKUPREGISTER_ID     (UTIL_ID + 5)    // Reads data from the specified Data Backup Register.\r
+#define UTIL_WRITE_BACKUPREGISTER_ID    (UTIL_ID + 6)    // Writes data to the specified Data Backup Register.\r
+#define UTIL_GET_BAT_ID                 (UTIL_ID + 7)    // Return the batterie tension in mV.\r
+#define UTIL_GET_USB_ID                 (UTIL_ID + 8)    // Return the USB connexion state.\r
+#define UTIL_SET_IRQ_HANDLER_ID         (UTIL_ID + 9)    // Replace an irq handler\r
+#define UTIL_GET_IRQ_HANDLER_ID         (UTIL_ID + 10)   // Get the current irq handler\r
+#define UTIL_SET_SCH_HANDLER_ID         (UTIL_ID + 11)    // Replace an irq handler\r
+#define UTIL_GET_SCH_HANDLER_ID         (UTIL_ID + 12)   // Get the current irq handler\r
+#define UTIL_GET_TEMP_ID                (UTIL_ID + 13)   // Return the temperature (1/100 C)\r
+#define UTIL_SET_TEMPMODE_ID            (UTIL_ID + 14)   // Set the temperature mode (0: mCelcius, 1: mFahrenheit\r
+typedef void (*tHandler) (void);\r
+\r
+// Prototypes.\r
+#define UTIL_SetPll(a)                          ((tCircleFunc1)(Circle_API [UTIL_SET_PLL_ID])) ((u32)(a))                                    // void UTIL_SetPll( enum eSpeed speed );\r
+#define UTIL_GetPll()                  (u32)    (((tCircleFunc0)(Circle_API [UTIL_GET_PLL_ID])) ())                                          // enum eSpeed UTIL_GetPll( void );\r
+#define UTIL_uint2str(a,b,c,d)                  ((tCircleFunc4)(Circle_API [UTIL_UINT2STR_ID])) ((u32)(a),(u32)(b),(u32)(c),(u32)(d))        // void uint2str( char* ptr , u32 X, u16 digit, int fillwithzero );\r
+#define UTIL_int2str(a,b,c,d)                   ((tCircleFunc4)(Circle_API [UTIL_INT2STR_ID])) ((u32)(a),(u32)(b),(u32)(c),(u32)(d))         // void  int2str( char* ptr , s32 X, u16 digit, int fillwithzero );\r
+#define UTIL_GetVersion()              (u32)    (((tCircleFunc0)(Circle_API [UTIL_GET_VERSION_ID])) ())                                      // char* UTIL_GetVersion( void );\r
+#define UTIL_ReadBackupRegister(a)     (u32)    (((tCircleFunc1)(Circle_API [UTIL_READ_BACKUPREGISTER_ID])) ((u32)(a)))                      // u16 UTIL_ReadBackupRegister( u16 BKP_DR );\r
+#define UTIL_WriteBackupRegister(a,b)           ((tCircleFunc2)(Circle_API [UTIL_WRITE_BACKUPREGISTER_ID])) ((u32)(a),(u32)(b))              // void UTIL_WriteBackupRegister( u16 BKP_DR, u16 Data );\r
+#define UTIL_GetBat()                  (u32)    (((tCircleFunc0)(Circle_API [UTIL_GET_BAT_ID])) ())                                          // u16 UTIL_GetBat( void );\r
+#define UTIL_GetUsb()                  (u32)    (((tCircleFunc0)(Circle_API [UTIL_GET_USB_ID])) ())                                          // u8 UTIL_GetUsb( void );\r
+#define UTIL_SetIrqHandler(a,b)                 (((tCircleFunc2)(Circle_API [UTIL_SET_IRQ_HANDLER_ID])) ((int)a,(tHandler)b))                // void UTIL_SetIrqHandler ( int , tHandler );\r
+#define UTIL_GetIrqHandler(a)          (u32)    (((tCircleFunc1)(Circle_API [UTIL_GET_IRQ_HANDLER_ID])) ((int)a))                            // tHandler* UTIL_GetIrqHandler ( int );\r
+#define UTIL_SetSchHandler(a,b)                 (((tCircleFunc2)(Circle_API [UTIL_SET_SCH_HANDLER_ID])) ((int)a,(tHandler)b))                // void UTIL_SetSchHandler ( int , tHandler );\r
+#define UTIL_GetSchHandler(a)          (u32)    (((tCircleFunc1)(Circle_API [UTIL_GET_SCH_HANDLER_ID])) ((int)a))                            // tHandler* UTIL_GetSchHandler ( int );\r
+#define UTIL_GetTemp()                 (u32)    (((tCircleFunc0)(Circle_API [UTIL_GET_TEMP_ID])) ())                                         // u16 UTIL_GetTemp( void );\r
+#define UTIL_SetTempMode(a)                     (((tCircleFunc1)(Circle_API [UTIL_SET_TEMPMODE_ID])) ((int)a))                               // void UTIL_SetTempMode( int mode );\r
+\r
+/// @endcond\r
+\r
+//---------------------------------   MEMS  ------------------------------------\r
+\r
+/* Exported types ------------------------------------------------------------*/\r
+\r
+/**\r
+* @enum  Rotate_H12_V_Match_TypeDef\r
+* @brief The 4 possible rotations.\r
+*\r
+* The 4 possible MEM rotations.\r
+**/\r
+typedef enum\r
+   {\r
+   V12 = 0,                                        /*!< No rotation.          */\r
+   V3  = 1,                                        /*!< Rotation to the right.*/\r
+   V6  = 2,                                        /*!< Rotation to the left. */\r
+   V9  = 3                                         /*!< Half a rotation.      */\r
+   } Rotate_H12_V_Match_TypeDef;\r
+\r
+/**\r
+* @struct   tMEMS_Info\r
+* @brief    MEMS state description.\r
+**/\r
+typedef struct\r
+   {\r
+   s16 OutX;                     /*!< MEMS X position.                        */\r
+   s16 OutX_F4;                  /*!< MEMS X position filtered on 4 values.   */\r
+   s16 OutX_F16;                 /*!< MEMS X position filtered on 16 values.  */\r
+   s32 OutX_F64;                 /*!< MEMS X position filtered on 64 values.  */\r
+   s32 OutX_F256;                /*!< MEMS X position filtered on 256 values. */\r
+   s16 OutY;                     /*!< MEMS Y position.                        */\r
+   s16 OutY_F4;                  /*!< MEMS Y position filtered on 4 values.   */\r
+   s16 OutY_F16;                 /*!< MEMS Y position filtered on 16 values.  */\r
+   s32 OutY_F64;                 /*!< MEMS Y position filtered on 64 values.  */\r
+   s32 OutY_F256;                /*!< MEMS Y position filtered on 256 values. */\r
+   s16 OutZ;                     /*!< MEMS Z position.                        */\r
+   s16 OutZ_F4;                  /*!< MEMS Z position filtered on 4 values.   */\r
+   s16 OutZ_F16;                 /*!< MEMS Z position filtered on 16 values.  */\r
+   s32 OutZ_F64;                 /*!< MEMS Z position filtered on 64 values.  */\r
+   s32 OutZ_F256;                /*!< MEMS Z position filtered on 256 values. */\r
+   s16 Shocked;                  /*!< MEMS shock counter (incremented...)     */\r
+   s16 RELATIVE_X;               /*!< MEMS relative X position.               */\r
+   s16 RELATIVE_Y;               /*!< MEMS relative Y position.               */\r
+   s16 DoubleClick;              /*!< MEMS DoubleClick counter(incremented...)*/\r
+   } tMEMS_Info;\r
+\r
+/// @cond Internal\r
+\r
+/* Exported defines ----------------------------------------------------------*/\r
+\r
+// MEMS functions definition\r
+#define MEMS_GET_POSITION_ID   (MEMS_ID + 0)       // Return the current (relative) Mems information\r
+#define MEMS_GET_ROTATION_ID   (MEMS_ID + 1)       // Return the current screen orientation of the circle\r
+#define MEMS_SET_NEUTRAL_ID    (MEMS_ID + 2)       // Set the current position as "neutral position"\r
+#define MEMS_GET_INFO_ID       (MEMS_ID + 3)       // Return Mems informations\r
+\r
+// Prototypes\r
+#define MEMS_GetPosition(a,b)             ((tCircleFunc2)(Circle_API [MEMS_GET_POSITION_ID])) ((u32)(a),(u32)(b))      //  void MEMS_GetPosition(s16 * pX, s16* pY);\r
+#define MEMS_GetRotation(a)               ((tCircleFunc1)(Circle_API [MEMS_GET_ROTATION_ID])) ((u32)(a))      //  void MEMS_GetRotation(Rotate_H12_V_Match_TypeDef * H12);\r
+#define MEMS_SetNeutral()                 ((tCircleFunc0)(Circle_API [MEMS_GET_ROTATION_ID])) ()                       //  void MEMS_SetNeutral( void );\r
+#define MEMS_GetInfo()    ( (tMEMS_Info*) (((tCircleFunc0)(Circle_API [MEMS_GET_INFO_ID])) ()))                        //  tMEMS_Info* MEMS_GetInfo (void)\r
+\r
+/// @endcond\r
+\r
+//--------------------------------   POINTER  ----------------------------------\r
+\r
+/* Exported types ------------------------------------------------------------*/\r
+\r
+/**\r
+* @enum  POINTER_mode\r
+* @brief Available pointer modes.\r
+*\r
+* Description of all the available pointer modes in CircleOS.\r
+**/\r
+enum POINTER_mode\r
+   {\r
+   POINTER_UNDEF        = -1,    /*!< Pointer's mode is unknown!              */\r
+   POINTER_OFF          =  0,    /*!< Pointer isn't managed and displayed.    */\r
+   POINTER_ON           =  1,    /*!< Pointer mode used in main screen.       */\r
+   POINTER_MENU         =  2,    /*!< Pointer management is used to select item menu (but pointer isn't displayed).  */\r
+   POINTER_APPLICATION  =  3,    /*!< The managment of pointer depend of extern application.                         */\r
+   POINTER_RESTORE_LESS =  4     /*!< The background isn't restored (to go faster).                                  */\r
+   };\r
+\r
+/**\r
+* @enum  POINTER_state\r
+* @brief The different pointer modes.\r
+*\r
+* Despite beeing in a undefined state, the pointer can be disabled or enable.\r
+**/\r
+enum POINTER_state\r
+   {\r
+   POINTER_S_UNDEF      = -1,                /*!< Pointer state is unknown!   */\r
+   POINTER_S_DISABLED   =  0,                /*!< Pointer is disabled.        */\r
+   POINTER_S_ENABLED    =  1                 /*!< Pointer is enabled.         */\r
+   };\r
+\r
+/**\r
+* @struct   tPointer_Info\r
+* @brief    Pointer position description.\r
+**/\r
+typedef struct\r
+   {\r
+   s16 xPos;                              /*!< X position of pointer.         */\r
+   s16 yPos;                              /*!< Y position of pointer.         */\r
+   s16 shift_PosX;                        /*!< Pointer speed on X axis.       */\r
+   s16 shift_PosY;                        /*!< Pointer speed on Y axis        */\r
+   s16 X_PosMin;                          /*!< Minimum position on X axis.    */\r
+   s16 Y_PosMin;                          /*!< Minimum position on Y axis.    */\r
+   s16 X_PosMax;                          /*!< Maximum position on X axis.    */\r
+   s16 Y_PosMax;                          /*!< Maximum position on Y axis.    */\r
+   } tPointer_Info;\r
+\r
+/// @cond Internal\r
+\r
+/* Exported defines ---------------------------------------------------------*/\r
+#define POINTER_WIDTH 7\r
+\r
+// POINTER functions definition\r
+#define POINTER_SET_RECT_ID                   (POINTER_ID + 0)          // Set new limits for the move of the pointer\r
+#define POINTER_SETRECTSCREEN_ID              (POINTER_ID + 1)          // Remove any space restriction for the pointer moves.\r
+#define POINTER_GETCURRENTANGLESTART_ID       (POINTER_ID + 2)          // Return the current minimum angle to move pointer\r
+#define POINTER_SETCURRENTANGLESTART_ID       (POINTER_ID + 3)          // Set the current minimum angle to move pointer\r
+#define POINTER_GETCURRENTSPEEDONANGLE_ID     (POINTER_ID + 4)          // Return the ratio speed / angle\r
+#define POINTER_SETCURRENTSPEEDONANGLE_ID     (POINTER_ID + 5)          // Set the ratio speed / angle\r
+#define POINTER_SETMODE_ID                    (POINTER_ID + 6)          // Change the current mode of the pointer management\r
+#define POINTER_GETMODE_ID                    (POINTER_ID + 7)          // Return the current mode of the pointer management\r
+#define POINTER_SETCURRENTPOINTER_ID          (POINTER_ID + 8)          // Set the dimention and bitmap of pointer\r
+#define POINTER_GETSTATE_ID                   (POINTER_ID + 9)          // Return the current state\r
+#define POINTER_DRAW_ID                       (POINTER_ID + 10)         // Draw a pointer\r
+#define POINTER_SAVE_ID                       (POINTER_ID + 11)         // Save the background of the pointer\r
+#define POINTER_RESTORE_ID                    (POINTER_ID + 12)         // Restore the background of the pointer\r
+#define POINTER_GETPOSITION_ID                (POINTER_ID + 13)         // Return the poistion of the cursor (x=lower byte, y = upperbyte)\r
+#define POINTER_SETPOSITION_ID                (POINTER_ID + 14)         // Force the position of the pointer in the screen\r
+#define POINTER_SETAPPLICATION_POINTER_MGR_ID (POINTER_ID + 15)         // Set the application pointer manager\r
+#define POINTER_SETCOLOR_ID                   (POINTER_ID + 16)         // Set pointer color\r
+#define POINTER_GETCOLOR_ID                   (POINTER_ID + 17)         // Return pointer color\r
+#define POINTER_GETINFO_ID                    (POINTER_ID + 18)         // Return pointer informations\r
+#define POINTER_SET_CURRENT_AREASTORE_ID      (POINTER_ID + 19)         // Change the current storage area\r
+\r
+// Prototypes\r
+#define POINTER_SetRect(a,b,c,d)                     ((tCircleFunc4)(Circle_API [POINTER_SET_RECT_ID])) ((u32)(a),(u32)(b),(u32)(c),(u32)(d))          //void POINTER_SetRect ( s16 x, s16 y, s16 width, s16 height );  //Restrict the move of the pointer to a rectangle\r
+#define POINTER_SetRectScreen()                      ((tCircleFunc0)(Circle_API [POINTER_SETRECTSCREEN_ID])) ()                                        //void POINTER_SetRectScreen ( void );\r
+#define POINTER_GetCurrentAngleStart()    (u16)      (((tCircleFunc0)(Circle_API [POINTER_GETCURRENTANGLESTART_ID])) ())                               //u16  POINTER_GetCurrentAngleStart ( void );\r
+#define POINTER_SetCurrentAngleStart(a)              ((tCircleFunc1)(Circle_API [POINTER_SETCURRENTANGLESTART_ID])) ((u32)(a))                         //void POINTER_SetCurrentAngleStart ( u16 );\r
+#define POINTER_GetCurrentSpeedOnAngle()  (u16)      (((tCircleFunc0)(Circle_API [POINTER_GETCURRENTSPEEDONANGLE_ID])) ())                             //u16  POINTER_GetCurrentSpeedOnAngle ( void );\r
+#define POINTER_SetCurrentSpeedOnAngle(a)            ((tCircleFunc1)(Circle_API [POINTER_SETCURRENTSPEEDONANGLE_ID])) ((u32)(a))                       //void POINTER_SetCurrentSpeedOnAngle ( u16  newspeed );\r
+#define POINTER_SetMode(a)                           ((tCircleFunc1)(Circle_API [POINTER_SETMODE_ID])) ((u32)(a))                                      //void POINTER_SetMode( enum POINTER_mode mode);\r
+#define POINTER_GetMode()       (enum POINTER_mode)  (((tCircleFunc0)(Circle_API [POINTER_GETMODE_ID])) ())                                            //enum POINTER_mode POINTER_GetMode( void );\r
+#define POINTER_SetCurrentPointer(a,b,c)             ((tCircleFunc3)(Circle_API [POINTER_SETCURRENTPOINTER_ID])) ((u32)(a),(u32)(b),(u32)(c))          //void POINTER_SetCurrentPointer( unsigned char width, unsigned char height, unsigned char *bmp);\r
+#define POINTER_GetState()      (enum POINTER_state) (((tCircleFunc0)(Circle_API [POINTER_GETSTATE_ID])) ())                                           //enum POINTER_state POINTER_GetState(void);\r
+#define POINTER_Draw(a,b,c,d,e)                      ((tCircleFunc5)(Circle_API [POINTER_DRAW_ID])) ((u32)(a),(u32)(b),(u32)(c),(u32)(d),(u32)(e))     //void POINTER_Draw (u8 Line, u8 Column, u8 Width, u8 Height, u8 *Bmp);\r
+#define POINTER_Save(a,b,c,d)                        ((tCircleFunc4)(Circle_API [POINTER_SAVE_ID])) ((u32)(a),(u32)(b),(u32)(c),(u32)(d))              //void POINTER_Save (u8 Line, u8 Column, u8 Width, u8 Height);\r
+#define POINTER_Restore(a,b,c,d)                     ((tCircleFunc4)(Circle_API [POINTER_RESTORE_ID])) ((u32)(a),(u32)(b),(u32)(c),(u32)(d))           //void POINTER_Restore (u8 Line, u8 Column, u8 Width, u8 Height);\r
+#define POINTER_GetPos()                  (u16)      (((tCircleFunc0)(Circle_API [POINTER_GETPOSITION_ID])) ())                                        //u16  POINTER_GetPos(void);\r
+#define POINTER_SetPos(a,b)                          ((tCircleFunc2)(Circle_API [POINTER_SETPOSITION_ID])) ((u32)(a),(u32)(b))                         //void POINTER_SetPos ( u16 x, u16 y );\r
+#define POINTER_SetApplication_Pointer_Mgr(a)        ((tCircleFunc1)(Circle_API [POINTER_SETAPPLICATION_POINTER_MGR_ID])) ((u32)(a))                   //void POINTER_SetApplication_Pointer_Mgr(  tAppPtrMgr mgr );\r
+#define POINTER_SetColor(a)                          ((tCircleFunc1)(Circle_API [POINTER_SETCOLOR_ID])) ((u32)(a))                                     //void POINTER_SetColor ( u16 color )\r
+#define POINTER_GetColor()                (u16)      (((tCircleFunc0)(Circle_API [POINTER_GETCOLOR_ID])) ())                                           //u16  POINTER_GetColor ( void )\r
+#define POINTER_GetInfo()      (tPointer_Info*)      (((tCircleFunc0)(Circle_API [POINTER_GETINFO_ID])) ())                                            //tPointer_Info* POINTER_GetInfo ( void )\r
+#define POINTER_SetCurrentAreaStore(a)               ((tCircleFunc1)(Circle_API [POINTER_SET_CURRENT_AREASTORE_ID])) ((u32)(a))                        //void POINTER_SetCurrentAreaStore ( u8 *ptr )\r
+\r
+/// @endcond\r
+\r
+//--------------------------------   BUTTON  -----------------------------------\r
+\r
+/* Exported types ------------------------------------------------------------*/\r
+\r
+/**\r
+* @enum  BUTTON_mode\r
+* @brief Available button modes.\r
+*\r
+* List of all the available button mode in the CircleOS.\r
+**/\r
+enum BUTTON_mode\r
+   {\r
+   BUTTON_DISABLED      = -1,       /*!< No action on the button is detected. */\r
+   BUTTON_ONOFF         =  0,       /*!< Detect ON/OFF pression type.         */\r
+   BUTTON_ONOFF_FORMAIN =  1,       /*!< Special mode for main screen.        */\r
+   BUTTON_WITHCLICK     =  2        /*!< Currently unused.                    */\r
+   };\r
+\r
+/**\r
+* @enum  BUTTON_state\r
+* @brief CircleOS button states.\r
+*\r
+* Description of the button states provided by CircleOS.\r
+**/\r
+enum BUTTON_state\r
+   {\r
+   BUTTON_UNDEF            = -1,    /*!< Undefined state.                     */\r
+   BUTTON_RELEASED         =  0,    /*!< Button is released.                  */\r
+   BUTTON_PUSHED           =  1,    /*!< Button was just pushed.              */\r
+   BUTTON_PUSHED_FORMAIN   =  2,    /*!< Same as BUTTON_PUSHED when button mode is BUTTON_ONOFF_FORMAIN. */\r
+   BUTTON_CLICK            =  3,    /*!< Currently unused.                    */\r
+   BUTTON_DBLCLICK         =  4     /*!< Currently unused.                    */\r
+   };\r
+\r
+/// @cond Internal\r
+\r
+/* Exported defines ----------------------------------------------------------*/\r
+\r
+// BUTTON functions definition\r
+#define BUTTON_GETSTATE_ID                   (BUTTON_ID + 0)         // Return state of button\r
+#define BUTTON_SETMODE_ID                    (BUTTON_ID + 1)         // Set button mode\r
+#define BUTTON_GETMODE_ID                    (BUTTON_ID + 2)         // Return button mode\r
+#define BUTTON_WAITFORRELEASE_ID             (BUTTON_ID + 3)         // Disable temporarily any new button event\r
+\r
+// Prototypes\r
+#define BUTTON_GetState()       (enum BUTTON_state)   (((tCircleFunc0)(Circle_API [BUTTON_GETSTATE_ID])) ())        // enum BUTTON_state BUTTON_GetState(void);\r
+#define BUTTON_SetMode(a);                            ((tCircleFunc1)(Circle_API [BUTTON_SETMODE_ID])) ((u32)(a))   // void BUTTON_SetMode( enum BUTTON_mode mode);\r
+#define BUTTON_GetMode();       (enum BUTTON_mode)    (((tCircleFunc0)(Circle_API [BUTTON_GETMODE_ID])) ())         // enum BUTTON_mode BUTTON_GetMode ( void ) ;\r
+#define BUTTON_WaitForRelease()                       ((tCircleFunc0)(Circle_API [BUTTON_WAITFORRELEASE_ID])) ()    // void BUTTON_WaitForRelease(void);\r
+\r
+/// @endcond\r
+\r
+//----------------------------------   LCD   -----------------------------------\r
+\r
+/* Exported defines ----------------------------------------------------------*/\r
+\r
+// RGB is 16-bit coded as    G2G1G0B4 B3B2B1B0 R4R3R2R1 R0G5G4G3\r
+#define RGB_MAKE(xR,xG,xB)    ( ( (xG&0x07)<<13 ) + ( (xG)>>5 )  +      \\r
+                                ( ((xB)>>3) << 8 )          +      \\r
+                                ( ((xR)>>3) << 3 ) )                    /*!< Macro to make a LCD compatible color format from RGB.  */\r
+\r
+#define RGB_RED         0x00F8                  /*!<  Predefined color.       */\r
+#define RGB_BLACK       0x0000                  /*!<  Predefined color.       */\r
+#define RGB_WHITE       0xffff                  /*!<  Predefined color.       */\r
+#define RGB_BLUE        0x1F00                  /*!<  Predefined color.       */\r
+#define RGB_GREEN       0xE007                  /*!<  Predefined color.       */\r
+#define RGB_YELLOW      (RGB_GREEN|RGB_RED)     /*!<  Predefined color.       */\r
+#define RGB_MAGENTA     (RGB_BLUE|RGB_RED)      /*!<  Predefined color.       */\r
+#define RGB_LIGHTBLUE   (RGB_BLUE|RGB_GREEN)    /*!<  Predefined color.       */\r
+#define RGB_ORANGE      (RGB_RED | 0xE001)      /*!<  Predefined color ( Green/2 + red ).  */\r
+#define RGB_PINK        (RGB_MAGENTA | 0xE001)  /*!<  Predefined color ( Green/2 + magenta ). */\r
+\r
+// PWM rates.\r
+#define BACKLIGHTMIN                0x1000   /*!< Minimal PWM rate.           */\r
+#define DEFAULT_CCR_BACKLIGHTSTART  0x8000   /*!< Default PWM rate.           */\r
+\r
+// SCREEN Infos\r
+#define SCREEN_WIDTH          128         /*!< Width of visible screen in pixels.   */\r
+#define SCREEN_HEIGHT         128         /*!< Height of visible screen in pixels.  */\r
+#define CHIP_SCREEN_WIDTH     132         /*!< Width of screen driven by LCD controller in pixels.  */\r
+#define CHIP_SCREEN_HEIGHT    132         /*!< Height of screen driven by LCD controller in pixels.  */\r
+\r
+// Characters Infos\r
+#define CHAR_WIDTH            7           /*!< Width of a character.   */\r
+#define CHAR_HEIGHT           14          /*!< Height of a character.   */\r
+\r
+/// @cond Internal\r
+\r
+// LCD functions definition\r
+#define LCD_SETRECTFORCMD_ID                   (LCD_ID + 0)          // Define the rectangle (for the next command to be applied)\r
+#define LCD_GETPIXEL_ID                        (LCD_ID + 1)          // Read the value of one pixel\r
+#define LCD_DRAWPIXEL_ID                       (LCD_ID + 2)          // Draw a Graphic image on slave LCD.\r
+#define LCD_SENDLCDCMD_ID                      (LCD_ID + 3)          // Send one byte command to LCD LCD.\r
+#define LCD_SENDLCDDATA_ID                     (LCD_ID + 4)          // Display one byte data to LCD LCD.\r
+#define LCD_READLCDDATA_ID                     (LCD_ID + 5)          // Read LCD byte data displayed on LCD LCD.\r
+#define LCD_FILLRECT_ID                        (LCD_ID + 6)          // Fill a rectangle with one color\r
+#define LCD_DRAWRECT_ID                        (LCD_ID + 7)          // Draw a rectangle with one color\r
+#define LCD_DISPLAYCHAR_ID                     (LCD_ID + 8)          // Display one character\r
+#define LCD_RECTREAD_ID                        (LCD_ID + 9)          // Save a rectangle of the monitor RAM\r
+#define LCD_SETBACKLIGHT_ID                    (LCD_ID + 10)         // Modify the PWM rate\r
+#define LCD_GETBACKLIGHT_ID                    (LCD_ID + 11)         // Return the PWM rate\r
+#define LCD_SETROTATESCREEN_ID                 (LCD_ID + 12)         // Enable/Disable screen rotation\r
+#define LCD_GETROTATESCREEN_ID                 (LCD_ID + 13)         // Return screen rotation mode\r
+#define LCD_SETSCREENORIENTATION_ID            (LCD_ID + 14)         // Set screen orientation\r
+#define LCD_GETSCREENORIENTATION_ID            (LCD_ID + 15)         // Return screen orientation\r
+#define LCD_SETBACKLIGHT_OFF_ID                (LCD_ID + 16)         // Switch the LCD back light off.\r
+#define LCD_SETBACKLIGHT_ON_ID                 (LCD_ID + 17)         // Switch the LCD back light on.\r
+\r
+// Prototypes\r
+#define LCD_SetRect_For_Cmd(a,b,c,d)                 ((tCircleFunc4)(Circle_API [LCD_SETRECTFORCMD_ID])) ((u32)(a),(u32)(b),(u32)(c),(u32)(d))                  //void  LCD_SetRect_For_Cmd ( s16 x, s16 y, s16 width, s16 height)\r
+#define LCD_GetPixel(a,b)                 (u16)      (((tCircleFunc2)(Circle_API [LCD_GETPIXEL_ID])) ((u32)(a),(u32)(b)))                                       //u16   LCD_GetPixel (u8 x, u8 y)\r
+#define LCD_DrawPixel(a,b,c)                         ((tCircleFunc3)(Circle_API [LCD_DRAWPIXEL_ID])) ((u32)(a),(u32)(b),(u32)(c))                               //void  LCD_SetPixel (u8 x, u8 y, u16 Pixel) ;\r
+#define LCD_SendLCDCmd(a)                            ((tCircleFunc1)(Circle_API [LCD_SENDLCDCMD_ID])) ((u32)(a))                                                //void  LCD_SendLCDCmd(u8 Cmd);\r
+#define LCD_SendLCDData(a)                           ((tCircleFunc1)(Circle_API [LCD_SENDLCDDATA_ID])) ((u32)(a))                                               //void  LCD_SendLCDData(u8 Data);\r
+#define LCD_ReadLCDData()                 (u32)      (((tCircleFunc0)(Circle_API [LCD_READLCDDATA_ID])) ())                                                     //u32   LCD_ReadLCDData(void);\r
+#define LCD_FillRect(a,b,c,d,e)                      ((tCircleFunc5)(Circle_API [LCD_FILLRECT_ID])) ((u32)(a),(u32)(b),(u32)(c),(u32)(d),(u32)(e))              //void  LCD_FillRect ( u16 x, u16 y, u16 width, u16 height, u16 color );\r
+#define LCD_DrawRect(a,b,c,d,e)                      ((tCircleFunc5)(Circle_API [LCD_DRAWRECT_ID])) ((u32)(a),(u32)(b),(u32)(c),(u32)(d),(u32)(e))              //void  LCD_DrawRect ( u16 x, u16 y, u16 width, u16 height, u16 color );\r
+#define LCD_DisplayChar(a,b,c,d,e,f)                 ((tCircleFunc6)(Circle_API [LCD_DISPLAYCHAR_ID])) ((u32)(a),(u32)(b),(u32)(c),(u32)(d),(u32)(e),(u32)(f))  //void  LCD_DisplayChar(u8 x, u8 y, u8 Ascii, u16 TextColor, u16 BGndColor, u16 CharMagniCoeff);\r
+#define LCD_RectRead(a,b,c,d,e)                      ((tCircleFunc5)(Circle_API [LCD_RECTREAD_ID])) ((u32)(a),(u32)(b),(u32)(c),(u32)(d),(u32)(e))              //void  LCD_RectRead ( u16 x, u16 y, u16 width, u16 height, u8* bmp );\r
+#define LCD_SetBackLight(a)                          ((tCircleFunc1)(Circle_API [LCD_SETBACKLIGHT_ID])) ((u32)(a))                                              //void  LCD_SetBackLight(u32 newBaclightStart);\r
+#define LCD_GetBackLight()                (u32)      (((tCircleFunc0)(Circle_API [LCD_GETBACKLIGHT_ID])) ())                                                    //u32   LCD_GetBackLight(void);\r
+#define LCD_SetRotateScreen(a)                       ((tCircleFunc1)(Circle_API [LCD_SETROTATESCREEN_ID])) ((u32)(a))                                           //void  LCD_SetRotateScreen ( u8 RotateScreen)\r
+#define LCD_GetRotateScreen()             (u32)      (((tCircleFunc0)(Circle_API [LCD_GETROTATESCREEN_ID])) ())                                                 //u8    LCD_GetRotateScreen (void)\r
+#define LCD_SetScreenOrientation(a)                  ((tCircleFunc1)(Circle_API [LCD_SETSCREENORIENTATION_ID])) ((u32)(a))                                      //void LCD_SetScreenOrientation (Rotate_H12_V_Match_TypeDef ScreenOrientation)\r
+#define LCD_GetScreenOrientation()        (u32)      (((tCircleFunc0)(Circle_API [LCD_GETSCREENORIENTATION_ID])) ())                                            //Rotate_H12_V_Match_TypeDef LCD_GetScreenOrientation (void)\r
+#define LCD_SetBackLightOff()                        ((tCircleFunc0)(Circle_API [LCD_SETBACKLIGHT_OFF_ID])) ()\r
+#define LCD_SetBackLightOn()                         ((tCircleFunc0)(Circle_API [LCD_SETBACKLIGHT_ON_ID])) ()\r
+\r
+/// @endcond\r
+\r
+//----------------------------------   DRAW   ----------------------------------\r
+\r
+/// @cond Internal\r
+\r
+/* Exported defines ----------------------------------------------------------*/\r
+\r
+// DRAW functions definition\r
+#define DRAW_SETDEFAULTCOLOR_ID                   (DRAW_ID + 0)         // Reset colors (bgnd + text)\r
+#define DRAW_CLEAR_ID                             (DRAW_ID + 1)         // Clear the LCD display\r
+#define DRAW_SETIMAGE_ID                          (DRAW_ID + 2)         // Draw a colored image\r
+#define DRAW_SETIMAGEBW_ID                        (DRAW_ID + 3)         // Draw a black and white image\r
+#define DRAW_SETLOGOBW_ID                         (DRAW_ID + 4)         // Draw logo\r
+#define DRAW_DISPLAYVBAT_ID                       (DRAW_ID + 5)         // Display the voltage of battery in ascii\r
+#define DRAW_DISPLAYTIME_ID                       (DRAW_ID + 6)         // Display time in ascii\r
+#define DRAW_DISPLAYSTRING_ID                     (DRAW_ID + 7)         // Display a 17char max string of characters\r
+#define DRAW_DISPLAYSTRINGINVERTED_ID             (DRAW_ID + 8)         // Display a 17char max string of characters with inverted colors\r
+#define DRAW_GETCHARMAGNICOEFF_ID                 (DRAW_ID + 9)         // Return the magnifying value for the characters\r
+#define DRAW_SETCHARMAGNICOEFF_ID                 (DRAW_ID + 10)        // Set the magnifying value for the characters\r
+#define DRAW_GETTEXTCOLOR_ID                      (DRAW_ID + 11)        // Return the current text color\r
+#define DRAW_SETTEXTCOLOR_ID                      (DRAW_ID + 12)        // Set the current text color\r
+#define DRAW_GETBGNDCOLOR_ID                      (DRAW_ID + 13)        // Return the current background color\r
+#define DRAW_SETBGNDCOLOR_ID                      (DRAW_ID + 14)        // Set the current background color\r
+#define DRAW_LINE_ID                              (DRAW_ID + 15)        // Draw a Line between (using Bresenham algorithm) \r
+\r
+//Prototypes\r
+#define DRAW_SetDefaultColor()                      ((tCircleFunc0)(Circle_API [DRAW_SETDEFAULTCOLOR_ID])) ()                                                 //void  DRAW_SetDefaultColor (void);\r
+#define DRAW_Clear()                                ((tCircleFunc0)(Circle_API [DRAW_CLEAR_ID])) ()                                                           //void  DRAW_Clear(void);\r
+#define DRAW_SetImage(a,b,c,d,e)                    ((tCircleFunc5)(Circle_API [DRAW_SETIMAGE_ID])) ((u32)(a),(u32)(b),(u32)(c),(u32)(d),(u32)(e))            //void  DRAW_SetImage(const u16 *imageptr, u8 x, u8 y, u8 width, u8 height);\r
+#define DRAW_SetImageBW(a,b,c,d,e)                  ((tCircleFunc5)(Circle_API [DRAW_SETIMAGEBW_ID])) ((u32)(a),(u32)(b),(u32)(c),(u32)(d),(u32)(e))          //void  DRAW_SetImageBW(const u8 *imageptr, u8 x, u8 y, u8 width, u8 height);\r
+#define DRAW_SetLogoBW()                            ((tCircleFunc0)(Circle_API [DRAW_SETLOGOBW_ID])) ()                                                       //void  DRAW_SetLogoBW(void);\r
+#define DRAW_DisplayVbat(a,b)                       ((tCircleFunc2)(Circle_API [DRAW_DISPLAYVBAT_ID])) ((u32)(a),(u32)(b))                                    //void  DRAW_DisplayVbat(u8 x, u8 y);\r
+#define DRAW_DisplayTime(a,b)                       ((tCircleFunc2)(Circle_API [DRAW_DISPLAYTIME_ID])) ((u32)(a),(u32)(b))                                    //void  DRAW_DisplayTime(u8 x, u8 y);\r
+#define DRAW_DisplayString(a,b,c,d)                 ((tCircleFunc4)(Circle_API [DRAW_DISPLAYSTRING_ID])) ((u32)(a),(u32)(b),(u32)(c),(u32)(d))                //void  DRAW_DisplayString( u8 x, u8 y, u8 *ptr, u8 len );\r
+#define DRAW_DisplayStringInverted(a,b,c,d)         ((tCircleFunc4)(Circle_API [DRAW_DISPLAYSTRINGINVERTED_ID])) ((u32)(a),(u32)(b),(u32)(c),(u32)(d))        //void  DRAW_DisplayStringInverted( u8 x, u8 y, u8 *ptr, u8 len );\r
+#define DRAW_GetCharMagniCoeff()              (u16) (((tCircleFunc0)(Circle_API [DRAW_GETCHARMAGNICOEFF_ID])) ())                                             //u16   DRAW_GetCharMagniCoeff(void);\r
+#define DRAW_SetCharMagniCoeff(a)                   ((tCircleFunc1)(Circle_API [DRAW_SETCHARMAGNICOEFF_ID])) ((u32)(a))                                       //void  DRAW_SetCharMagniCoeff(u16 Coeff);\r
+#define DRAW_GetTextColor()                   (u16) (((tCircleFunc0)(Circle_API [DRAW_GETTEXTCOLOR_ID])) ())                                                  //u16   DRAW_GetTextColor(void);\r
+#define DRAW_SetTextColor(a)                        ((tCircleFunc1)(Circle_API [DRAW_SETTEXTCOLOR_ID])) ((u32)(a))                                            //void  DRAW_SetTextColor(u16 Color);\r
+#define DRAW_GetBGndColor()                   (u16) (((tCircleFunc0)(Circle_API [DRAW_GETBGNDCOLOR_ID])) ())                                                  //u16   DRAW_GetBGndColor(void);\r
+#define DRAW_SetBGndColor(a)                        ((tCircleFunc1)(Circle_API [DRAW_SETBGNDCOLOR_ID])) ((u32)(a))                                            //void  DRAW_SetBGndColor(u16 Color);\r
+#define DRAW_Line(a,b,c,d,e)                        ((tCircleFunc5)(Circle_API [DRAW_LINE_ID])) ((u32)(a),(u32)(b),(u32)(c),(u32)(d),(u32)(e))                //void  DRAW_Line(s16 x1, s16 y1, s16 x2, s16 y2, u16 color );\r
+/// @endcond\r
+\r
+//--------------------------------   BUZZER  -----------------------------------\r
+\r
+/* Exported type def ---------------------------------------------------------*/\r
+\r
+/**\r
+* @enum  BUZZER_mode\r
+* @brief CircleOS buzzer modes.\r
+*\r
+* Without the undefined mode, the CircleOS provides 5 modes for its buzzer.\r
+**/\r
+enum BUZZER_mode\r
+   {\r
+   BUZZER_UNDEF      = -1,         /*!<  undefined mode for buzzer            */\r
+   BUZZER_OFF        =  0,         /*!<  The buzzer is put off.               */\r
+   BUZZER_ON         =  1,         /*!<  The buzzer is put on.                */\r
+   BUZZER_SHORTBEEP  =  2,         /*!<  Make buzzer to bip for a short time  */\r
+   BUZZER_LONGBEEP   =  3,         /*!<  Make buzzer to bip for a long time   */\r
+   BUZZER_PLAYMUSIC  =  4          /*!<  Make buzzer to play a music          */\r
+   };\r
+\r
+/// @cond Internal\r
+\r
+/* Exported defines ----------------------------------------------------------*/\r
+#define BUZZER_BEEP  BUZZER_SHORTBEEP\r
+\r
+// BUZZER functions definition\r
+#define BUZZER_SETMODE_ID                       (BUZZER_ID + 0)   // Set new buzzer mode\r
+#define BUZZER_GETMODE_ID                       (BUZZER_ID + 1)   // Get the current buzzer mode.\r
+#define BUZZER_PLAY_MUSIC_ID                    (BUZZER_ID + 2)   // Plays the provided melody that follows the RTTTL Format.\r
+\r
+// Prototypes\r
+#define BUZZER_SetMode(a)                            ((tCircleFunc1)(Circle_API [BUZZER_SETMODE_ID])) ((u32)(a))               //void  BUZZER_SetMode( enum BUZZER_mode mode);\r
+#define BUZZER_GetMode()      (enum  BUZZER_mode)    (((tCircleFunc0)(Circle_API [BUZZER_GETMODE_ID])) ())                     //enum  BUZZER_mode BUZZER_GetMode( void );\r
+#define BUZZER_PlayMusic(a)                          ((tCircleFunc1)(Circle_API [BUZZER_PLAY_MUSIC_ID])) ((u32)(a))            //void BUZZER_PlayMusic (const u8 *melody );\r
+\r
+/// @endcond\r
+\r
+//---------------------------------   MENU   -----------------------------------\r
+\r
+/* Exported defines ----------------------------------------------------------*/\r
+#define REMOVE_MENU     0x01  /*!< Menu flag: remove menu when item selected. */\r
+#define APP_MENU        0x02  /*!< Menu flag: item is an application.         */\r
+#define MENU_MAXITEM    8     /*!< Maximum number of item in a menu.          */\r
+\r
+/* Exported type def ---------------------------------------------------------*/\r
+\r
+/**\r
+* @struct   tMenuItem\r
+* @brief    Menu item description.\r
+**/\r
+typedef struct\r
+   {\r
+   const char* Text;                            /*!<  Name of Item displayed in menu   */\r
+   enum MENU_code (*Fct_Init)  ( void );        /*!<  First function launched if item is selected. */\r
+   enum MENU_code (*Fct_Manage)( void );        /*!<  Second function launched after a "return MENU_CONTINU_COMMAND" in the first function   */\r
+   int fRemoveMenu;                             /*!<  Flag to know if remove menu at end  */\r
+   } tMenuItem;\r
+\r
+/**\r
+* @struct   tMenu\r
+* @brief    Menu description.\r
+**/\r
+typedef struct\r
+   {\r
+   unsigned fdispTitle: 1;                /*!< Display title is set.          */\r
+   const char* Title;                     /*!< Menu title.                    */\r
+   int NbItems;                           /*!< Number of items in the menu ( must be <= MENU_MAXITEM )  */\r
+   int LgMax;                             /*!< Unused.                        */\r
+   int XPos;                              /*!< X position of menu bottom-left corner. */\r
+   int YPos;                              /*!< Y position of menu bottom-left corner. */\r
+   int XSize;                             /*!< Unused.                        */\r
+   int YSize;                             /*!< Unused.                        */\r
+   unsigned int SelectedItem;             /*!< ID of selected item (0 for first item, 1 for second item, ...) */\r
+   tMenuItem Items[MENU_MAXITEM];         /*!< Items of menu.  */\r
+   } tMenu;\r
+\r
+/**\r
+* @enum  MENU_code\r
+* @brief Application return values.\r
+*\r
+* List of all the codes available for CircleOS application return values.\r
+**/\r
+enum MENU_code\r
+   {\r
+   MENU_LEAVE              = 0,                    /*!< Leave application.    */\r
+   MENU_CONTINUE           = 1,                    /*!< Continue application. */\r
+   MENU_REFRESH            = 2,                    /*!< Refresh current menu. */\r
+   MENU_CHANGE             = 3,                    /*!< Change current menu.  */\r
+   MENU_CONTINUE_COMMAND   = 4                     /*!< Sent by Ini functions.*/\r
+   };\r
+\r
+/// @cond Internal\r
+\r
+/* Exported defines ----------------------------------------------------------*/\r
+\r
+// MENU functions definition\r
+#define MENU_SET_ID                             (MENU_ID + 0)        // Display a menu\r
+#define MENU_REMOVE_ID                          (MENU_ID + 1)        // Remove the current menu, DRAW_Clear and set pointer mode to "POINTER_ON".\r
+#define MENU_QUESTION_ID                        (MENU_ID + 2)        // Dedicated menu for ask question and yes/no responses\r
+#define MENU_PRINT_ID                           (MENU_ID + 3)        // Display a popup menu with a string.\r
+#define MENU_CLEAR_CURRENT_COMMAND_ID           (MENU_ID + 4)        // Set CurrentCommand to 0\r
+#define MENU_SET_LEVELTITLE_ID                  (MENU_ID + 5)        // Set the title of level menu managed by MENU_SetLevel_Mgr.\r
+#define MENU_SET_TEXTCOLOR_ID                   (MENU_ID + 6)        // Set the color used for text menu.\r
+#define MENU_GET_TEXTCOLOR_ID                   (MENU_ID + 7)        // Return the color used for text menu.\r
+#define MENU_SET_BGNDCOLOR_ID                   (MENU_ID + 8)        // Set the background color used for menu.\r
+#define MENU_GET_BGNDCOLOR_ID                   (MENU_ID + 9)        // Return the background color used for menu.\r
+#define MENU_QUIT_ID                            (MENU_ID + 10)       // Leave the current menu (stand for "cancel" and do a DRAW_Clear)\r
+#define MENU_SET_LEVELINI_ID                    (MENU_ID + 11)       // Initialise a generic function to set a avalue in the range of [0,4]\r
+#define MENU_CLEAR_CURRENT_MENU_ID              (MENU_ID + 12)       // Set CurrentMenu to 0\r
+#define MENU_SET_LEVEL_MGR_ID                   (MENU_ID + 13)       // Generic function to set a avalue in the range of [0,4] (handling of the control)\r
+\r
+// Prototypes\r
+#define MENU_Set(a)                                  ((tCircleFunc1)(Circle_API [MENU_SET_ID])) ((u32)(a))                    //void  MENU_Set ( tMenu *mptr );\r
+#define MENU_Remove()                                ((tCircleFunc0)(Circle_API [MENU_REMOVE_ID])) ()                         //void  MENU_Remove ( void ) ;\r
+#define MENU_Question(a,b)                           ((tCircleFunc2)(Circle_API [MENU_QUESTION_ID])) ((u32)(a),(u32)(b))      //void  MENU_Question ( char *str, int *answer );\r
+#define MENU_Print(a)                                ((tCircleFunc1)(Circle_API [MENU_PRINT_ID])) ((u32)(a))                  //void  MENU_Print ( char *str );\r
+#define MENU_ClearCurrentCommand()                   ((tCircleFunc0)(Circle_API [MENU_CLEAR_CURRENT_COMMAND_ID])) ()          //void MENU_ClearCurrentCommand(void)\r
+#define MENU_SetLevelTitle(a)                        ((tCircleFunc1)(Circle_API [MENU_SET_LEVELTITLE_ID])) ((u32)(a))         //void MENU_SetLevelTitle(u8* title)\r
+#define MENU_SetTextColor(a)                         ((tCircleFunc1)(Circle_API [MENU_SET_TEXTCOLOR_ID])) ((u32)(a))          //void MENU_SetTextColor ( int TextColor )\r
+#define MENU_GetTextColor()                 (u32)    (((tCircleFunc0)(Circle_API [MENU_GET_TEXTCOLOR_ID])) ())                //int MENU_GetTextColor ( void )\r
+#define MENU_SetBGndColor(a)                         ((tCircleFunc1)(Circle_API [MENU_SET_BGNDCOLOR_ID])) ((u32)(a))          //void MENU_SetBGndColor ( int BGndColor )\r
+#define MENU_GetBGndColor()                 (u32)    (((tCircleFunc0)(Circle_API [MENU_GET_BGNDCOLOR_ID])) ())                //int MENU_GetBGndColor ( void )\r
+#define MENU_Quit()              (enum MENU_code)    (((tCircleFunc0)(Circle_API [MENU_QUIT_ID])) ())                         //enum MENU_code MENU_Quit ( void )\r
+#define MENU_SetLevel_Ini()      (enum MENU_code)    (((tCircleFunc0)(Circle_API [MENU_SET_LEVELINI_ID])) ())                 //enum MENU_code MENU_SetLevel_Ini ( void )\r
+#define MENU_ClearCurrentMenu()                       ((tCircleFunc0)(Circle_API [MENU_CLEAR_CURRENT_MENU_ID])) ()            //void MENU_ClearCurrentMenu(void)\r
+#define MENU_SetLevel_Mgr(a,b)   (enum MENU_code)    ((tCircleFunc2)(Circle_API [MENU_SET_LEVEL_MGR_ID])) ((u32)(a),(u32)(b)) //enum MENU_code MENU_SetLevel_Mgr ( u32 *value, u32 value_range [] )\r
+\r
+/// @endcond\r
+\r
+//----------------------------------   LED -------------------------------------\r
+\r
+/* Exported types ------------------------------------------------------------*/\r
+\r
+/**\r
+* @enum  LED_mode\r
+* @brief LED modes.\r
+*\r
+* LEDs may be on, off or blinking slowly or fastly!\r
+**/\r
+enum LED_mode\r
+   {\r
+   LED_UNDEF       = -1,                     /*!< Undefined led mode.         */\r
+   LED_OFF         = 0,                      /*!< Put off the led.            */\r
+   LED_ON          = 1,                      /*!< Put on the led.             */\r
+   LED_BLINKING_LF = 2,                      /*!< Slow blinking led mode.     */\r
+   LED_BLINKING_HF = 3                       /*!< Fast blinking led mode.     */\r
+   };\r
+\r
+/**\r
+* @enum LED_id\r
+* @brief Available LEDs.\r
+*\r
+* List of all the available LEDs.\r
+**/\r
+enum LED_id\r
+   {\r
+   LED_GREEN = 0,                                        /*!< Green led id.   */\r
+   LED_RED = 1                                           /*!< Red led id.     */\r
+   };\r
+\r
+/// @cond Internal\r
+\r
+/* Exported defines ----------------------------------------------------------*/\r
+\r
+// LED functions definition\r
+#define LED_SET_ID            (LED_ID + 0)      // Set a specified LED in a specified mode.\r
+\r
+// Prototypes\r
+#define LED_Set(a,b)          ((tCircleFunc2)(Circle_API [LED_SET_ID])) ((u32)(a),(u32)(b))  //void LED_Set ( enum LED_id id, enum LED_mode mode )               //void LED_Set ( enum LED_id id, enum LED_mode mode );\r
+\r
+/// @endcond\r
+\r
+//--------------------------------   RTC  --------------------------------------\r
+\r
+/* Exported defines ----------------------------------------------------------*/\r
+\r
+// Backup registers\r
+#define BKP_SYS1  1        /*!<  Backup register reserved for OS  */\r
+#define BKP_SYS2  2        /*!<  Backup register reserved for OS  */\r
+#define BKP_SYS3  3        /*!<  Backup register reserved for OS  */\r
+#define BKP_SYS4  4        /*!<  Backup register reserved for OS  */\r
+#define BKP_SYS5  5        /*!<  Backup register reserved for OS  */\r
+#define BKP_SYS6  6        /*!<  Backup register reserved for OS  */\r
+\r
+#define BKP_USER1    7     /*!<  Backup available for users application */\r
+#define BKP_USER2    8     /*!<  Backup available for users application */\r
+#define BKP_USER3    9     /*!<  Backup available for users application */\r
+#define BKP_USER4    10    /*!<  Backup available for users application */\r
+\r
+/// @cond Internal\r
+\r
+//RTC functions definition\r
+#define RTC_SET_TIME_ID       (RTC_ID + 0)      // Set current time.\r
+#define RTC_GET_TIME_ID       (RTC_ID + 1)      // Return current time.\r
+#define RTC_DISPLAY_TIME_ID   (RTC_ID + 2)      // Display current time on the 6th line at column 0.\r
+\r
+// Prototypes\r
+#define RTC_SetTime(a,b,c)    ((tCircleFunc3)(Circle_API [RTC_SET_TIME_ID])) ((u32)(a),(u32)(b),(u32)(c))     //void  RTC_SetTime (u32 THH, u32 TMM, u32 TSS);\r
+#define RTC_GetTime(a,b,c)    ((tCircleFunc3)(Circle_API [RTC_GET_TIME_ID])) ((u32)(a),(u32)(b),(u32)(c))     //void  RTC_GetTime (u32 * THH, u32 * TMM, u32 * TSS);\r
+#define RTC_DisplayTime()     ((tCircleFunc0)(Circle_API [RTC_DISPLAY_TIME_ID])) ()                           //void  RTC_DisplayTime ( void );\r
+\r
+/// @endcond\r
+\r
+//--------------------------------- Application -------------------------------\r
+typedef void  (*tAppPtrMgr) ( int , int );\r
+\r
+#endif /*__CIRCLE_API_H */\r
diff --git a/Demo/CORTEX_STM32F103_Primer_GCC/ST_Code/crt0_STM32x.c b/Demo/CORTEX_STM32F103_Primer_GCC/ST_Code/crt0_STM32x.c
new file mode 100644 (file)
index 0000000..6dfbb2d
--- /dev/null
@@ -0,0 +1,217 @@
+/******************** (C) COPYRIGHT 2007 STMicroelectronics ********************\r
+* File Name          : stm32f10x_vector.c\r
+* Author             : MCD Tools Team\r
+* Date First Issued  : 05/14/2007\r
+* Description        : This file contains the vector table for STM32F10x.\r
+*                       After Reset the Cortex-M3 processor is in Thread mode,\r
+*                       priority is Privileged, and the Stack is set to Main.\r
+********************************************************************************\r
+* History:\r
+* 05/14/2007: V0.2\r
+*\r
+********************************************************************************\r
+* THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS\r
+* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.\r
+* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,\r
+* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE\r
+* CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING\r
+* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.\r
+*******************************************************************************/\r
+\r
+/* Includes ----------------------------------------------------------------------*/\r
+\r
+void NMIException(void);\r
+void HardFaultException(void);\r
+void MemManageException(void);\r
+void BusFaultException(void);\r
+void UsageFaultException(void);\r
+void DebugMonitor(void);\r
+void SVCHandler(void);\r
+void PendSVC(void);\r
+void SysTickHandler(void);\r
+void WWDG_IRQHandler(void);\r
+void PVD_IRQHandler(void);\r
+void TAMPER_IRQHandler(void);\r
+void RTC_IRQHandler(void);\r
+void FLASH_IRQHandler(void);\r
+void RCC_IRQHandler(void);\r
+void EXTI0_IRQHandler(void);\r
+void EXTI1_IRQHandler(void);\r
+void EXTI2_IRQHandler(void);\r
+void EXTI3_IRQHandler(void);\r
+void EXTI4_IRQHandler(void);\r
+void DMAChannel1_IRQHandler(void);\r
+void DMAChannel2_IRQHandler(void);\r
+void DMAChannel3_IRQHandler(void);\r
+void DMAChannel4_IRQHandler(void);\r
+void DMAChannel5_IRQHandler(void);\r
+void DMAChannel6_IRQHandler(void);\r
+void DMAChannel7_IRQHandler(void);\r
+void ADC_IRQHandler(void);\r
+void USB_HP_CAN_TX_IRQHandler(void);\r
+void USB_LP_CAN_RX0_IRQHandler(void);\r
+void CAN_RX1_IRQHandler(void);\r
+void CAN_SCE_IRQHandler(void);\r
+void EXTI9_5_IRQHandler(void);\r
+void TIM1_BRK_IRQHandler(void);\r
+void TIM1_UP_IRQHandler(void);\r
+void TIM1_TRG_COM_IRQHandler(void);\r
+void TIM1_CC_IRQHandler(void);\r
+void TIM2_IRQHandler(void);\r
+void TIM3_IRQHandler(void);\r
+void TIM4_IRQHandler(void);\r
+void I2C1_EV_IRQHandler(void);\r
+void I2C1_ER_IRQHandler(void);\r
+void I2C2_EV_IRQHandler(void);\r
+void I2C2_ER_IRQHandler(void);\r
+void SPI1_IRQHandler(void);\r
+void SPI2_IRQHandler(void);\r
+void USART1_IRQHandler(void);\r
+void USART2_IRQHandler(void);\r
+void USART3_IRQHandler(void);\r
+void EXTI15_10_IRQHandler(void);\r
+void RTCAlarm_IRQHandler(void);\r
+void USBWakeUp_IRQHandler(void);\r
+\r
+\r
+/* Exported types --------------------------------------------------------------*/\r
+/* Exported constants --------------------------------------------------------*/\r
+extern unsigned long _etext;\r
+extern unsigned long _sidata;          /* start address for the initialization values of the .data section. defined in linker script */\r
+extern unsigned long _sdata;           /* start address for the .data section. defined in linker script */\r
+extern unsigned long _edata;           /* end address for the .data section. defined in linker script */\r
+\r
+extern unsigned long _sbss;                    /* start address for the .bss section. defined in linker script */\r
+extern unsigned long _ebss;                    /* end address for the .bss section. defined in linker script */\r
+\r
+extern void _estack;           /* init value for the stack pointer. defined in linker script */\r
+\r
+\r
+\r
+/* Private typedef -----------------------------------------------------------*/\r
+/* function prototypes ------------------------------------------------------*/\r
+void Reset_Handler(void) __attribute__((__interrupt__));\r
+extern int main(void);\r
+extern void xPortPendSVHandler(void);\r
+extern void xPortSysTickHandler(void);\r
+extern void vTimer2IntHandler( void );\r
+\r
+\r
+/******************************************************************************\r
+*\r
+* The minimal vector table for a Cortex M3.  Note that the proper constructs\r
+* must be placed on this to ensure that it ends up at physical address\r
+* 0x0000.0000.\r
+*\r
+******************************************************************************/\r
+\r
+\r
+__attribute__ ((section(".isr_vector")))\r
+void (* const g_pfnVectors[])(void) =\r
+{\r
+  &_estack,            // The initial stack pointer\r
+  Reset_Handler,             // The reset handler\r
+  NMIException,\r
+  HardFaultException,\r
+  MemManageException,\r
+  BusFaultException,\r
+  UsageFaultException,\r
+  0, 0, 0, 0,            /* Reserved */ \r
+  SVCHandler,\r
+  DebugMonitor,\r
+  0,                      /* Reserved */\r
+  xPortPendSVHandler,\r
+  xPortSysTickHandler,\r
+  WWDG_IRQHandler,\r
+  PVD_IRQHandler,\r
+  TAMPER_IRQHandler,\r
+  RTC_IRQHandler,\r
+  FLASH_IRQHandler,\r
+  RCC_IRQHandler,\r
+  EXTI0_IRQHandler,\r
+  EXTI1_IRQHandler,\r
+  EXTI2_IRQHandler,\r
+  EXTI3_IRQHandler,\r
+  EXTI4_IRQHandler,\r
+  DMAChannel1_IRQHandler,\r
+  DMAChannel2_IRQHandler,\r
+  DMAChannel3_IRQHandler,\r
+  DMAChannel4_IRQHandler,\r
+  DMAChannel5_IRQHandler,\r
+  DMAChannel6_IRQHandler,\r
+  DMAChannel7_IRQHandler,\r
+  ADC_IRQHandler,\r
+  USB_HP_CAN_TX_IRQHandler,\r
+  USB_LP_CAN_RX0_IRQHandler,\r
+  CAN_RX1_IRQHandler,\r
+  CAN_SCE_IRQHandler,\r
+  EXTI9_5_IRQHandler,\r
+  TIM1_BRK_IRQHandler,\r
+  TIM1_UP_IRQHandler,\r
+  TIM1_TRG_COM_IRQHandler,\r
+  TIM1_CC_IRQHandler,\r
+  vTimer2IntHandler,\r
+  TIM3_IRQHandler,\r
+  TIM4_IRQHandler,\r
+  I2C1_EV_IRQHandler,\r
+  I2C1_ER_IRQHandler,\r
+  I2C2_EV_IRQHandler,\r
+  I2C2_ER_IRQHandler,\r
+  SPI1_IRQHandler,\r
+  SPI2_IRQHandler,\r
+  USART1_IRQHandler,\r
+  USART2_IRQHandler,\r
+  USART3_IRQHandler,\r
+  EXTI15_10_IRQHandler,\r
+  RTCAlarm_IRQHandler,\r
+  USBWakeUp_IRQHandler,\r
+  0,\r
+  0,\r
+  0,\r
+  0,\r
+  0,\r
+  0,\r
+  0,\r
+  (unsigned long)0xF108F85F //this is a workaround for boot in RAM mode.\r
+};\r
+\r
+/*******************************************************************************\r
+* Function Name  : Reset_Handler\r
+* Description    : This is the code that gets called when the processor first starts execution\r
+*                     following a reset event.  Only the absolutely necessary set is performed,\r
+*                     after which the application supplied main() routine is called. \r
+* Input          :\r
+* Output         :\r
+* Return         :\r
+*******************************************************************************/\r
+void Reset_Handler(void)\r
+{\r
+    unsigned long *pulSrc, *pulDest;\r
+\r
+    //\r
+    // Copy the data segment initializers from flash to SRAM.\r
+    //\r
+    pulSrc = &_sidata;\r
+    for(pulDest = &_sdata; pulDest < &_edata; )\r
+    {\r
+        *(pulDest++) = *(pulSrc++);\r
+    }\r
+\r
+    //\r
+    // Zero fill the bss segment.\r
+    //\r
+    for(pulDest = &_sbss; pulDest < &_ebss; )\r
+    {\r
+        *(pulDest++) = 0;\r
+    }\r
+\r
+    //\r
+    // Call the application's entry point.\r
+    //\r
+    main();\r
+}\r
+\r
+\r
+/********************* (C) COPYRIGHT 2007 STMicroelectronics  *****END OF FILE****/\r
+\r
+\r
diff --git a/Demo/CORTEX_STM32F103_Primer_GCC/ST_Code/draw.c b/Demo/CORTEX_STM32F103_Primer_GCC/ST_Code/draw.c
new file mode 100644 (file)
index 0000000..17b5f51
--- /dev/null
@@ -0,0 +1,545 @@
+/********************* (C) COPYRIGHT 2007 RAISONANCE S.A.S. *******************/\r
+/**\r
+*\r
+* @file     draw.c\r
+* @brief    Various utilities for drawings (characters, ..)\r
+* @author   FL\r
+* @author   IB\r
+* @date     07/2007\r
+*\r
+**/\r
+/******************************************************************************/\r
+\r
+/* Includes ------------------------------------------------------------------*/\r
+#include "circle.h"\r
+\r
+/// @cond Internal\r
+\r
+/* Private define ------------------------------------------------------------*/\r
+#define V9_MADCTRVAL    0x90\r
+#define V12_MADCTRVAL   0x30\r
+#define V3_MADCTRVAL    0x50\r
+#define V6_MADCTRVAL    0xF0\r
+\r
+#define ROTATE_DIVISER  500\r
+\r
+/* Private variables ---------------------------------------------------------*/\r
+\r
+static u16 CharMagniCoeff = 1;   /*!< Current character magnify coefficient.  */\r
+static u16 BGndColor;            /*!< Current background color.               */\r
+static u16 TextColor;            /*!< Current text color.                     */\r
+\r
+int fDisplayTime = 0;\r
+u16 BatState;\r
+u16 OldBatState;\r
+u32 OldTHH;\r
+u32 OldTMM;\r
+u32 OldTSS;\r
+u32 OldTemp;   //FL071107\r
+u16 xBat;\r
+u16 yBat;\r
+u16 widthBat;\r
+u16 heightBat;\r
+u8 UsbState,OldUsbState;\r
+static int divider_coord = 0;\r
+\r
+// Screen orientation management\r
+int                        rotate_counter             = 0;\r
+Rotate_H12_V_Match_TypeDef previous_H12               = V9;\r
+Rotate_H12_V_Match_TypeDef previous_previous_H12      = V9;\r
+Rotate_H12_V_Match_TypeDef H12;\r
+Rotate_H12_V_Match_TypeDef CurrentScreenOrientation;\r
+int                        CurrentRotateScreen        = 1;\r
+\r
+extern s16 XInit;\r
+extern s16 YInit;\r
+\r
+/* Private functions ---------------------------------------------------------*/\r
+\r
+/*******************************************************************************\r
+*\r
+*                                vbattoa\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  This function convert an u16 in ascii radix 10\r
+*\r
+*  @param[out] ptr   A pointer to a string where the converted value will be put.\r
+*  @param[in]  X     The value to convert.\r
+*\r
+*  @see  DRAW_DisplayVbat\r
+*\r
+**/\r
+/******************************************************************************/\r
+static void vbattoa( char* ptr, u16 X )\r
+   {\r
+   u8 c;\r
+   u16 r = 0;\r
+\r
+   // 1 000 digit\r
+   c = ((X-r)/1000);\r
+   r = r + (c*1000);\r
+   *ptr++ = c + 0x30;\r
+\r
+   // dot\r
+   *ptr++ = '.';\r
+\r
+   // 100 digit\r
+   c = ((X-r)/100);\r
+   r = r + (c*100);\r
+   *ptr++ = c + 0x30;\r
+\r
+   // 10 digit\r
+   c = ((X-r)/10);\r
+   r = r + (c*10);\r
+   *ptr++ = c + 0x30;\r
+\r
+   // Volt\r
+   *ptr++ = 'V';\r
+   *ptr++ = 0;\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                DRAW_DisplayStringWithMode\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  This function is used to display a 17char max string of\r
+*  characters on the LCD display on the selected line.\r
+*  Note:\r
+*  this function is the user interface to use the LCD driver.\r
+*\r
+*  @param[in]  x     The horizontal screen coordinate where to draw the string.\r
+*  @param[in]  y     The vertical screen coordinate where to draw the string.\r
+*  @param[in]  ptr   Pointer to string to display.\r
+*  @param[in]  len   String size.\r
+*  @param[in]  mode  Display mode: 0 normal, 1 inverted colors.\r
+*\r
+*  @warning       The (0x0) point in on the low left corner.\r
+*\r
+*  @see           DRAW_DisplayString\r
+*  @see           DRAW_DisplayStringInverted\r
+*\r
+**/\r
+/******************************************************************************/\r
+static void DRAW_DisplayStringWithMode( u8 x, u8 y, const u8* ptr, u8 len, int mode )\r
+   {\r
+   u8 ref_x = x, i = 0;\r
+\r
+   /* Send the string character by character on LCD */\r
+   while ((*ptr!=0)&&(i<18))\r
+      {\r
+      /* Display one character on LCD */\r
+      LCD_DisplayChar( ref_x, y, *ptr, mode ? BGndColor : TextColor,  mode ? TextColor : BGndColor, CharMagniCoeff );\r
+\r
+      /* Increment the column position by 7 */\r
+      ref_x+= (7*CharMagniCoeff);\r
+\r
+      /* Point on the next character */\r
+      ptr++;\r
+\r
+      /* Increment the character counter */\r
+      i++;\r
+      /* If we reach the maximum Line character */\r
+      }\r
+\r
+   while ( i < len )\r
+      {\r
+      /* Display one character on LCD */\r
+      LCD_DisplayChar( ref_x, y, ' ', mode ? BGndColor : TextColor, mode ? TextColor : BGndColor, CharMagniCoeff );\r
+\r
+      /* Increment the column position by 7 */\r
+      ref_x += ( 7 * CharMagniCoeff );\r
+\r
+      /* Increment the character counter */\r
+      i++;\r
+      }\r
+   }\r
+\r
+/* Public functions for CircleOS ---------------------------------------------*/\r
+\r
+/*******************************************************************************\r
+*\r
+*                                DRAW_Init\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Initialize GUI drawing. Called at CircleOS startup.\r
+*\r
+*  @attention  This function must <b>NOT</b> be called by the user.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void DRAW_Init( void )\r
+   {\r
+   LCD_Init();\r
+#ifdef _MEMS\r
+   MEMS_GetRotation( &CurrentScreenOrientation );\r
+#endif\r
+   LCD_SetScreenOrientation( CurrentScreenOrientation );\r
+\r
+   xBat        = 98;\r
+   yBat        = 3;\r
+   OldBatState = 10;\r
+   OldTSS      = 100;\r
+   OldTMM      = 100;\r
+   OldTHH      = 100;\r
+   OldTemp     = -1;\r
+\r
+   // Clear LCD and draw black and white logo\r
+   DRAW_SetDefaultColor();\r
+       LCD_FillRect( 0, 0, CHIP_SCREEN_WIDTH, CHIP_SCREEN_HEIGHT, BGndColor );\r
+//   POINTER_Init();\r
+   }\r
+\r
+\r
+\r
+\r
+/* Public functions ----------------------------------------------------------*/\r
+\r
+/*******************************************************************************\r
+*\r
+*                                DRAW_SetCharMagniCoeff\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Set the magnifying value for the characters (should be 1 or 2)\r
+*\r
+*  @param[in]  Coeff The new magnifying coefficent.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void DRAW_SetCharMagniCoeff( u16 Coeff )\r
+   {\r
+   CharMagniCoeff = Coeff;\r
+   }\r
+\r
+ /******************************************************************************\r
+*\r
+*                                DRAW_GetCharMagniCoeff\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Return the current magnifying value for the characters\r
+*\r
+*  @return  Current magnifying value.\r
+*\r
+**/\r
+/******************************************************************************/\r
+u16 DRAW_GetCharMagniCoeff( void )\r
+   {\r
+   return CharMagniCoeff;\r
+   }\r
+\r
+ /******************************************************************************\r
+*\r
+*                                DRAW_GetTextColor\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Return current text color.\r
+*\r
+*  @return  The current RGB color used to draw text.\r
+*\r
+**/\r
+/******************************************************************************/\r
+u16 DRAW_GetTextColor( void )\r
+   {\r
+   return TextColor;\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                DRAW_SetTextColor\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Set current text color.\r
+*\r
+*  @param[in]  Color The new RGB color used when drawing text.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void DRAW_SetTextColor( u16 Color )\r
+   {\r
+   TextColor = Color ;\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                DRAW_GetBGndColor\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Return current background color.\r
+*\r
+*  @return  The current RGB color used for the background.\r
+*\r
+**/\r
+/******************************************************************************/\r
+u16 DRAW_GetBGndColor( void )\r
+   {\r
+   return BGndColor;\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                DRAW_SetBGndColor\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Set current background color\r
+*\r
+*  @param[in]  Color The new RGB color for background.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void DRAW_SetBGndColor(u16 Color)\r
+   {\r
+   BGndColor = Color;\r
+   }\r
+\r
+\r
+/*******************************************************************************\r
+*\r
+*                                DRAW_SetImage\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  The provided bitmap is made width * height 2 byte words. Each 2 byte word contains\r
+*  the RGB color of a pixel.\r
+*\r
+*  @brief      Draw a color bitmap at the provided coordinates.\r
+*  @param[in]  imageptr    A pointer to an array of width * height 2 byte words.\r
+*  @param[in]  x           The horizontal coordinate of the low left corner of the bitmap.\r
+*  @param[in]  y           The vertical coordinate of the low left corner of the bitmap.\r
+*  @param[in]  width       The bitmap width.\r
+*  @param[in]  height      The bitmap height.\r
+*\r
+*  @warning       The (0x0) point in on the low left corner.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void DRAW_SetImage( const u16* imageptr, u8 x, u8 y, u8 width, u8 height )\r
+   {\r
+   int i;\r
+\r
+   // Select screen area to access.\r
+   LCD_SetRect_For_Cmd( x, y, width, height );\r
+\r
+   // Send command to write data on the LCD screen.\r
+   LCD_SendLCDCmd(ST7637_RAMWR);\r
+\r
+   for( i = 0; i < ( width * height ); i++ )\r
+      {\r
+      LCD_SendLCDData( imageptr[ i ] & 0xff );\r
+      LCD_SendLCDData( ( imageptr[ i ] >> 8 ) & 0xff );\r
+      }\r
+   }\r
+\r
+\r
+\r
+/*******************************************************************************\r
+*\r
+*                                DRAW_DisplayString\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  This function is used to display a 17 character max string of\r
+*  characters on the LCD display at the provided coordinates.\r
+*\r
+*  @param[in] x      The horizontal coordinate of the displayed string.\r
+*  @param[in] y      The vertical coordinate of the display string.\r
+*  @param[in] *ptr   Pointer to the string to display on LCD.\r
+*  @param[in] len    String length.\r
+*\r
+*  @warning       The (0x0) point in on the low left corner.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void DRAW_DisplayString( u8 x, u8 y, const u8* ptr, u8 len )\r
+   {\r
+   DRAW_DisplayStringWithMode( x, y, ptr, len, 0 );\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                DRAW_DisplayStringInverted\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  This function is used to display a 17 character max string of\r
+*  characters on the LCD display at the provided coordinates with inverted colors.\r
+*\r
+*  @param[in] x      The horizontal coordinate of the displayed string.\r
+*  @param[in] y      The vertical coordinate of the display string.\r
+*  @param[in] *ptr   Pointer to the string to display on LCD.\r
+*  @param[in] len    String length.\r
+*\r
+*  @warning       The (0x0) point in on the low left corner.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void DRAW_DisplayStringInverted( u8 x, u8 y, const u8* ptr, u8 len )\r
+   {\r
+   //BackGround and Text Colors are inverted\r
+   DRAW_DisplayStringWithMode( x, y, ptr, len, 1 );\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                DRAW_SetDefaultColor\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Reset text and background colors to their default values.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void DRAW_SetDefaultColor (void)\r
+   {\r
+   BGndColor = RGB_WHITE;\r
+   TextColor = RGB_BLACK;\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                DRAW_DisplayTemp\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  This function is used to display the current temperature in ascii.\r
+*  The choice between Celcius and Fahrenheit is fixed by UTIL_SetModeTemp()\r
+*\r
+*  @param[in]  x  The horizontal coordinate of the displayed string.\r
+*  @param[in]  y  The vertical coordinate of the display string.\r
+*\r
+*  @warning       The (0x0) point in on the low left corner.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void DRAW_DisplayTemp( u8 x, u8 y )\r
+   {\r
+   u32 Temp = 0;\r
+   u8  TextBuffer[5] = { 0,0,0,0,0};\r
+   \r
+   // Get Time\r
+   Temp = UTIL_GetTemp() ;\r
+\r
+   if( Temp != OldTemp ) \r
+      {\r
+      // Display C (if modified).\r
+      UTIL_uint2str( TextBuffer, Temp/10, 2, 1 );\r
+      TextBuffer[ 2 ] = '.';\r
+      DRAW_DisplayString( x + ( 0 * CharMagniCoeff * 7 ), y, TextBuffer, 3 );\r
+\r
+      // Display C/10 (if modified).\r
+      UTIL_uint2str( TextBuffer, Temp%10, 1, 1 );\r
+      TextBuffer[ 1 ] = fTemperatureInFahrenheit ? 'F' : 'C'; TextBuffer[ 2 ] = 0;\r
+      DRAW_DisplayString( x + ( 3 * CharMagniCoeff * 7 ), y, TextBuffer, 2 );\r
+      }\r
+   OldTemp = Temp;\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                DRAW_Line\r
+*\r
+*******************************************************************************/\r
+/**\r
+*  Draw a line on the LCD screen. Optimized for horizontal/vertical lines, \r
+*  and use the Bresenham algorithm for other cases.\r
+*\r
+*  @param[in]  x1          The x-coordinate of the first line endpoint.\r
+*  @param[in]  x2          The x-coordinate of the second line endpoint.\r
+*  @param[in]  y1          The y-coordinate of the first line endpoint.\r
+*  @param[in]  y2          The y-coordinate of the second line endpoint.\r
+*  @param[in]  color       The line color.\r
+*\r
+**/\r
+void DRAW_Line (s16 x1, s16 y1, s16 x2, s16 y2, u16 color )\r
+   {\r
+   int i,dx,dy,sdx,sdy,dxabs,dyabs,x,y,px,py;\r
+\r
+   #define abs(X) ( ( (X) < 0 ) ? -(X) : (X) )\r
+   #define sgn(X) ( ( (X) < 0 ) ? -1 : 1 )\r
+\r
+   if ( x1==x2 )  //Vertical Line\r
+      {\r
+      if ( y1 > y2 ) //We assume y2>y1 and invert if not\r
+         {\r
+         i = y2;\r
+         y2 = y1;\r
+         y1 = i;\r
+         }\r
+      LCD_FillRect( x1, y1, 1, y2-y1+1, color );\r
+      return;\r
+      }\r
+   else if ( y1==y2 )  //Horizontal Line\r
+      {\r
+      if ( x1 > x2 ) //We assume x2>x1 and we swap them if not\r
+         {\r
+         i = x2;\r
+         x2 = x1;\r
+         x1 = i;\r
+         }\r
+      LCD_FillRect( x1, y1, x2-x1+1, 1, color );\r
+      return;\r
+      }\r
+   \r
+   dx=x2-x1;      /* the horizontal distance of the line */\r
+   dy=y2-y1;      /* the vertical distance of the line */\r
+   dxabs=abs(dx);\r
+   dyabs=abs(dy);\r
+   sdx=sgn(dx);\r
+   sdy=sgn(dy);\r
+   x=dyabs>>1;\r
+   y=dxabs>>1;\r
+   px=x1;\r
+   py=y1;\r
+\r
+   if (dxabs>=dyabs) /* the line is more horizontal than vertical */\r
+      {\r
+      for(i=0;i<dxabs;i++)\r
+         {\r
+         y+=dyabs;\r
+         if (y>=dxabs)\r
+            {\r
+            y-=dxabs;\r
+            py+=sdy;\r
+            }\r
+         px+=sdx;\r
+         LCD_DrawPixel(px,py,color);\r
+         }\r
+      }\r
+   else /* the line is more vertical than horizontal */\r
+      {\r
+      for(i=0;i<dyabs;i++)\r
+         {\r
+         x+=dxabs;\r
+         if (x>=dyabs)\r
+            {\r
+            x-=dyabs;\r
+            px+=sdx;\r
+            }\r
+         py+=sdy;\r
+         LCD_DrawPixel(px,py,color);\r
+         }\r
+      }\r
+   }\r
+\r
diff --git a/Demo/CORTEX_STM32F103_Primer_GCC/ST_Code/lcd.c b/Demo/CORTEX_STM32F103_Primer_GCC/ST_Code/lcd.c
new file mode 100644 (file)
index 0000000..0f39b47
--- /dev/null
@@ -0,0 +1,1189 @@
+/********************* (C) COPYRIGHT 2007 RAISONANCE S.A.S. *******************/\r
+/**\r
+*\r
+* @file     lcd.c\r
+* @brief    The LCD driver for the ST7637.\r
+* @author   FL\r
+* @date     07/2007\r
+*\r
+**/\r
+/******************************************************************************/\r
+\r
+/* Includes ------------------------------------------------------------------*/\r
+#include "lcd.h"\r
+#include "circle.h"\r
+\r
+/// @cond Internal\r
+\r
+/* Private define ------------------------------------------------------------*/\r
+#define V9_MADCTRVAL                0x90     /*!< Left orientation value.     */\r
+#define V12_MADCTRVAL               0x30     /*!< Up orientation value.       */\r
+#define V3_MADCTRVAL                0x50     /*!< Right orientation value.    */\r
+#define V6_MADCTRVAL                0xF0     /*!< Bottom orientation value.   */\r
+#define BACKLIGHT_DIVIDER           500      /*!< LCD handler step.           */\r
+\r
+/* Private variables ---------------------------------------------------------*/\r
+\r
+// vars for timer dedicated for lcd backlight\r
+static TIM_TimeBaseInitTypeDef      TIM_TimeBaseStructure;\r
+static TIM_OCInitTypeDef            TIM_OCInitStructure;\r
+static int                          HandlerDivider             = 0;\r
+\r
+int                                 Current_CCR_BackLightStart = DEFAULT_CCR_BACKLIGHTSTART;\r
+\r
+/* External variable ---------------------------------------------------------*/\r
+extern GPIO_InitTypeDef             GPIO_InitStructure;\r
+extern u16                          CCR_BackLight_Tab[5];\r
+extern int                          CurrentRotateScreen;\r
+extern Rotate_H12_V_Match_TypeDef   CurrentScreenOrientation;\r
+\r
+/*! ASCII Table. Each character is 7 column (7dots large) on two pages (16dots high)\r
+    7 column character: Two 8 bit data to display one column*/\r
+static const u8 AsciiDotsTable[95 * 14 ] = {\r
+  /* ASCII 32  */  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+  /* ASCII 33  */  0x00,0x00,0x00,0x00,0x00,0x00,0x13,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,\r
+  /* ASCII 34  */  0x00,0x00,0x00,0xe0,0x00,0x20,0x00,0x00,0x00,0xe0,0x00,0x20,0x00,0x00,\r
+  /* ASCII 35  */  0x00,0x00,0x35,0x00,0x0f,0x80,0x35,0x60,0x0f,0x80,0x05,0x60,0x00,0x00,\r
+  /* ASCII 36  */  0x00,0x00,0x0d,0x80,0x0a,0x40,0x3a,0x60,0x06,0x40,0x00,0x00,0x00,0x00,\r
+  /* ASCII 37  */  0x00,0x00,0x02,0x40,0x02,0xa0,0x0a,0x40,0x15,0x00,0x09,0x00,0x00,0x00,\r
+  /* ASCII 38  */  0x00,0x00,0x0c,0x00,0x13,0x00,0x14,0x80,0x08,0x80,0x14,0x00,0x00,0x00,\r
+  /* ASCII 39  */  0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,\r
+  /* ASCII 40  */  0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0x80,0x60,0x60,0x00,0x00,0x00,0x00,\r
+  /* ASCII 41  */  0x00,0x00,0x00,0x00,0x60,0x60,0x1f,0x80,0x00,0x00,0x00,0x00,0x00,0x00,\r
+  /* ASCII 42  */  0x00,0x00,0x00,0x40,0x03,0x40,0x00,0xe0,0x03,0x40,0x00,0x40,0x00,0x00,\r
+  /* ASCII 43  */  0x02,0x00,0x02,0x00,0x02,0x00,0x1f,0xc0,0x02,0x00,0x02,0x00,0x02,0x00,\r
+  /* ASCII 44  */  0x00,0x00,0x00,0x00,0x60,0x00,0x38,0x00,0x08,0x00,0x00,0x00,0x00,0x00,\r
+  /* ASCII 45  */  0x00,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x00,0x00,\r
+  /* ASCII 46  */  0x00,0x00,0x00,0x00,0x18,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\r
+  /* ASCII 47  */  0x00,0x00,0x20,0x00,0x18,0x00,0x06,0x00,0x01,0x80,0x00,0x60,0x00,0x00,\r
+  /* ASCII 48  */  0x00,0x00,0x0f,0xc0,0x10,0x20,0x10,0x20,0x10,0x20,0x0f,0xc0,0x00,0x00,\r
+  /* ASCII 49  */  0x00,0x00,0x10,0x00,0x10,0x20,0x1f,0xe0,0x10,0x00,0x10,0x00,0x00,0x00,\r
+  /* ASCII 50  */  0x00,0x00,0x18,0x40,0x14,0x20,0x12,0x20,0x11,0x20,0x18,0xc0,0x00,0x00,\r
+  /* ASCII 51  */  0x00,0x00,0x08,0x40,0x10,0x20,0x11,0x20,0x11,0x20,0x0e,0xc0,0x00,0x00,\r
+  /* ASCII 52  */  0x00,0x00,0x06,0x00,0x05,0x00,0x04,0xc0,0x14,0x20,0x1f,0xe0,0x14,0x00,\r
+  /* ASCII 53  */  0x00,0x00,0x08,0x00,0x11,0xe0,0x11,0x20,0x11,0x20,0x0e,0x20,0x00,0x00,\r
+  /* ASCII 54  */  0x00,0x00,0x0f,0x80,0x11,0x40,0x11,0x20,0x11,0x20,0x0e,0x20,0x00,0x00,\r
+  /* ASCII 55  */  0x00,0x00,0x00,0x60,0x00,0x20,0x18,0x20,0x07,0x20,0x00,0xe0,0x00,0x00,\r
+  /* ASCII 56  */  0x00,0x00,0x0e,0xc0,0x11,0x20,0x11,0x20,0x11,0x20,0x0e,0xc0,0x00,0x00,\r
+  /* ASCII 57  */  0x00,0x00,0x11,0xc0,0x12,0x20,0x12,0x20,0x0a,0x20,0x07,0xc0,0x00,0x00,\r
+  /* ASCII 58  */  0x00,0x00,0x00,0x00,0x19,0x80,0x19,0x80,0x00,0x00,0x00,0x00,0x00,0x00,\r
+  /* ASCII 59  */  0x00,0x00,0x00,0x00,0x30,0x00,0x19,0x80,0x09,0x80,0x00,0x00,0x00,0x00,\r
+  /* ASCII 60  */  0x02,0x00,0x05,0x00,0x05,0x00,0x08,0x80,0x10,0x40,0x10,0x40,0x00,0x00,\r
+  /* ASCII 61  */  0x00,0x00,0x05,0x00,0x05,0x00,0x05,0x00,0x05,0x00,0x05,0x00,0x00,0x00,\r
+  /* ASCII 62  */  0x10,0x40,0x10,0x40,0x08,0x80,0x05,0x00,0x05,0x00,0x02,0x00,0x00,0x00,\r
+  /* ASCII 63  */  0x00,0x00,0x00,0x00,0x10,0x80,0x14,0x40,0x02,0x40,0x01,0x80,0x00,0x00,\r
+  /* ASCII 64  */  0x00,0x00,0x1f,0xe0,0x20,0x10,0x23,0x10,0x24,0x90,0x17,0xe0,0x00,0x00,\r
+  /* ASCII 65  */  0x10,0x00,0x1c,0x00,0x17,0xa0,0x04,0x60,0x17,0x80,0x1c,0x00,0x10,0x00,\r
+  /* ASCII 66  */  0x10,0x20,0x1f,0xe0,0x11,0x20,0x11,0x20,0x11,0x20,0x0e,0xc0,0x00,0x00,\r
+  /* ASCII 67  */  0x00,0x00,0x0f,0xc0,0x10,0x20,0x10,0x20,0x10,0x20,0x08,0x60,0x00,0x00,\r
+  /* ASCII 68  */  0x10,0x20,0x1f,0xe0,0x10,0x20,0x10,0x20,0x08,0x40,0x07,0x80,0x00,0x00,\r
+  /* ASCII 69  */  0x10,0x20,0x1f,0xe0,0x11,0x20,0x13,0xa0,0x10,0x20,0x18,0x60,0x00,0x00,\r
+  /* ASCII 70  */  0x00,0x00,0x10,0x20,0x1f,0xe0,0x11,0x20,0x03,0xa0,0x00,0x20,0x00,0x60,\r
+  /* ASCII 71  */  0x00,0x00,0x0f,0xc0,0x10,0x20,0x10,0x20,0x12,0x20,0x0e,0x60,0x02,0x00,\r
+  /* ASCII 72  */  0x10,0x20,0x1f,0xe0,0x11,0x20,0x01,0x00,0x11,0x20,0x1f,0xe0,0x10,0x20,\r
+  /* ASCII 73  */  0x00,0x00,0x10,0x20,0x10,0x20,0x1f,0xe0,0x10,0x20,0x10,0x20,0x00,0x00,\r
+  /* ASCII 74  */  0x00,0x00,0x0e,0x00,0x10,0x20,0x10,0x20,0x0f,0xe0,0x00,0x20,0x00,0x00,\r
+  /* ASCII 75  */  0x10,0x20,0x1f,0xe0,0x12,0x20,0x03,0x00,0x04,0xa0,0x18,0x60,0x10,0x20,\r
+  /* ASCII 76  */  0x00,0x00,0x10,0x20,0x1f,0xe0,0x10,0x20,0x10,0x00,0x1c,0x00,0x00,0x00,\r
+  /* ASCII 77  */  0x10,0x20,0x1f,0xe0,0x10,0xe0,0x03,0x00,0x10,0xe0,0x1f,0xe0,0x10,0x20,\r
+  /* ASCII 78  */  0x10,0x20,0x1f,0xe0,0x10,0xe0,0x07,0x00,0x18,0x20,0x1f,0xe0,0x00,0x20,\r
+  /* ASCII 79  */  0x00,0x00,0x0f,0xc0,0x10,0x20,0x10,0x20,0x10,0x20,0x0f,0xc0,0x00,0x00,\r
+  /* ASCII 80  */  0x00,0x00,0x10,0x20,0x1f,0xe0,0x12,0x20,0x02,0x20,0x01,0xc0,0x00,0x00,\r
+  /* ASCII 81  */  0x00,0x00,0x0f,0xc0,0x10,0x20,0x30,0x20,0x30,0x20,0x2f,0xc0,0x00,0x00,\r
+  /* ASCII 82  */  0x10,0x20,0x1f,0xe0,0x12,0x20,0x02,0x20,0x06,0x20,0x09,0xc0,0x10,0x00,\r
+  /* ASCII 83  */  0x00,0x00,0x18,0xc0,0x09,0x20,0x11,0x20,0x11,0x40,0x0e,0x60,0x00,0x00,\r
+  /* ASCII 84  */  0x00,0x60,0x00,0x20,0x10,0x20,0x1f,0xe0,0x10,0x20,0x00,0x20,0x00,0x60,\r
+  /* ASCII 85  */  0x00,0x20,0x0f,0xe0,0x10,0x20,0x10,0x00,0x10,0x20,0x0f,0xe0,0x00,0x20,\r
+  /* ASCII 86  */  0x00,0x20,0x00,0xe0,0x07,0x20,0x18,0x00,0x07,0x20,0x00,0xe0,0x00,0x20,\r
+  /* ASCII 87  */  0x00,0x20,0x0f,0xe0,0x10,0x20,0x0f,0x00,0x10,0x20,0x0f,0xe0,0x00,0x20,\r
+  /* ASCII 88  */  0x10,0x20,0x18,0x60,0x04,0x80,0x03,0x00,0x04,0x80,0x18,0x60,0x10,0x20,\r
+  /* ASCII 89  */  0x00,0x20,0x00,0x60,0x11,0xa0,0x1e,0x00,0x11,0xa0,0x00,0x60,0x00,0x20,\r
+  /* ASCII 90  */  0x00,0x00,0x18,0x60,0x14,0x20,0x13,0x20,0x10,0xa0,0x18,0x60,0x00,0x00,\r
+  /* ASCII 91  */  0x00,0x00,0x00,0x00,0x7f,0xe0,0x40,0x20,0x40,0x20,0x00,0x00,0x00,0x00,\r
+  /* ASCII 92  */  0x00,0x00,0x00,0x20,0x01,0xc0,0x06,0x00,0x38,0x00,0x00,0x00,0x00,0x00,\r
+  /* ASCII 93  */  0x00,0x00,0x00,0x00,0x40,0x20,0x40,0x20,0x7f,0xe0,0x00,0x00,0x00,0x00,\r
+  /* ASCII 94  */  0x00,0x00,0x01,0x00,0x00,0x80,0x00,0x60,0x00,0x80,0x01,0x00,0x00,0x00,\r
+  /* ASCII 95  */  0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,\r
+  /* ASCII 96  */  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x40,0x00,0x00,0x00,0x00,\r
+  /* ASCII 97  */  0x00,0x00,0x0d,0x00,0x12,0x80,0x12,0x80,0x12,0x80,0x1f,0x00,0x10,0x00,\r
+  /* ASCII 98  */  0x10,0x20,0x1f,0xe0,0x11,0x00,0x10,0x80,0x10,0x80,0x0f,0x00,0x00,0x00,\r
+  /* ASCII 99  */  0x00,0x00,0x0f,0x00,0x10,0x80,0x10,0x80,0x10,0x80,0x09,0x80,0x00,0x00,\r
+  /* ASCII 100 */  0x00,0x00,0x0f,0x00,0x10,0x80,0x10,0x80,0x11,0x20,0x1f,0xe0,0x10,0x00,\r
+  /* ASCII 101 */  0x00,0x00,0x0f,0x00,0x12,0x80,0x12,0x80,0x12,0x80,0x13,0x00,0x00,0x00,\r
+  /* ASCII 102 */  0x00,0x00,0x10,0x80,0x1f,0xc0,0x10,0xa0,0x10,0xa0,0x10,0xa0,0x00,0x00,\r
+  /* ASCII 103 */  0x00,0x00,0x0f,0x00,0x50,0x80,0x50,0x80,0x51,0x00,0x3f,0x80,0x00,0x80,\r
+  /* ASCII 104 */  0x10,0x20,0x1f,0xe0,0x11,0x00,0x00,0x80,0x10,0x80,0x1f,0x00,0x10,0x00,\r
+  /* ASCII 105 */  0x00,0x00,0x10,0x80,0x10,0x80,0x1f,0xa0,0x10,0x00,0x10,0x00,0x00,0x00,\r
+  /* ASCII 106 */  0x00,0x00,0x40,0x80,0x40,0x80,0x40,0xa0,0x3f,0x80,0x00,0x00,0x00,0x00,\r
+  /* ASCII 107 */  0x10,0x20,0x1f,0xe0,0x02,0x00,0x16,0x80,0x19,0x80,0x10,0x80,0x00,0x00,\r
+  /* ASCII 108 */  0x00,0x00,0x10,0x00,0x10,0x20,0x1f,0xe0,0x10,0x00,0x10,0x00,0x00,0x00,\r
+  /* ASCII 109 */  0x10,0x80,0x1f,0x80,0x10,0x80,0x1f,0x00,0x10,0x80,0x1f,0x00,0x10,0x00,\r
+  /* ASCII 110 */  0x10,0x80,0x1f,0x80,0x11,0x00,0x00,0x80,0x10,0x80,0x1f,0x00,0x10,0x00,\r
+  /* ASCII 111 */  0x00,0x00,0x0f,0x00,0x10,0x80,0x10,0x80,0x10,0x80,0x0f,0x00,0x00,0x00,\r
+  /* ASCII 112 */  0x40,0x80,0x7f,0x80,0x51,0x00,0x10,0x80,0x10,0x80,0x0f,0x00,0x00,0x00,\r
+  /* ASCII 113 */  0x00,0x00,0x0f,0x00,0x10,0x80,0x10,0x80,0x51,0x00,0x7f,0x80,0x40,0x80,\r
+  /* ASCII 114 */  0x00,0x00,0x10,0x80,0x1f,0x80,0x11,0x00,0x10,0x80,0x10,0x80,0x00,0x00,\r
+  /* ASCII 115 */  0x00,0x00,0x19,0x00,0x12,0x80,0x12,0x80,0x12,0x80,0x0d,0x80,0x00,0x00,\r
+  /* ASCII 116 */  0x00,0x00,0x00,0x80,0x0f,0xc0,0x10,0x80,0x10,0x80,0x10,0x80,0x08,0x00,\r
+  /* ASCII 117 */  0x00,0x80,0x0f,0x80,0x10,0x00,0x10,0x00,0x08,0x80,0x1f,0x80,0x10,0x00,\r
+  /* ASCII 118 */  0x00,0x80,0x03,0x80,0x0c,0x80,0x10,0x00,0x0c,0x80,0x03,0x80,0x00,0x80,\r
+  /* ASCII 119 */  0x00,0x80,0x0f,0x80,0x10,0x80,0x0e,0x00,0x10,0x80,0x0f,0x80,0x00,0x80,\r
+  /* ASCII 120 */  0x10,0x80,0x19,0x80,0x06,0x00,0x06,0x00,0x19,0x80,0x10,0x80,0x00,0x00,\r
+  /* ASCII 121 */  0x00,0x80,0x41,0x80,0x46,0x80,0x78,0x00,0x4c,0x80,0x03,0x80,0x00,0x80,\r
+  /* ASCII 122 */  0x00,0x00,0x19,0x80,0x14,0x80,0x12,0x80,0x11,0x80,0x18,0x80,0x00,0x00,\r
+  /* ASCII 123 */  0x00,0x00,0x00,0x00,0x04,0x00,0x3b,0xc0,0x40,0x20,0x00,0x00,0x00,0x00,\r
+  /* ASCII 124 */  0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,\r
+  /* ASCII 125 */  0x00,0x00,0x00,0x00,0x40,0x20,0x3b,0xc0,0x04,0x00,0x00,0x00,0x00,0x00,\r
+  /* ASCII 126 */  0x00,0x00,0x04,0x00,0x02,0x00,0x04,0x00,0x04,0x00,0x02,0x00,0x00,0x00};\r
+\r
+int OrientationOffsetX [] = { 0 /* V12*/,0 /* V3*/,+4 /* V6*/,+4 /* V9*/ };\r
+int OrientationOffsetY [] = { +4 /* V12*/,0 /* V3*/,0 /* V6*/,+4 /* V9*/ };\r
+\r
+/* Private function prototypes -----------------------------------------------*/\r
+static void LCD_7637_Controller( void );\r
+static void LCD_DrawChar( u8 x, u8 y, u8 width, const u8 *bmp, u16 textColor, u16 bGndColor, u16 charMagniCoeff );\r
+static void LCD_BackLightChange( void );\r
+static void LCD_BackLightConfig( void );\r
+static void LCD_CtrlLinesWrite( GPIO_TypeDef* GPIOx, u32 CtrlPins, BitAction BitVal );\r
+\r
+/* Private functions ---------------------------------------------------------*/\r
+\r
+/*******************************************************************************\r
+*\r
+*                                LCD_DataLinesConfig\r
+*\r
+*******************************************************************************/\r
+/**\r
+*  Configure data lines D0~D7 in Input Floating mode for read from LCD or in\r
+*  Output Push-Pull mode for write on LCD\r
+*\r
+*  @param[in]  Mode Specifies the configuration mode for data lines D0~D7.\r
+*                @n @c Input: configure in Input Floating mode\r
+*                @n @c Output: configure in Output Push-Pul mode\r
+*\r
+**/\r
+/******************************************************************************/\r
+static void LCD_DataLinesConfig( DataConfigMode_TypeDef Mode )\r
+   {\r
+   GPIO_InitTypeDef             GPIO_InitStructure;\r
+          \r
+   GPIO_InitStructure.GPIO_Pin   =  LCD_DATA_PINS;\r
+   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;\r
+\r
+   if( Mode == Input )\r
+      {\r
+      /* Configure D0~D7 lines as Input */\r
+      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;\r
+      }\r
+   else\r
+      {\r
+      /* Configure D0~D7 lines in Output Push-Pull mode */\r
+      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;\r
+      }\r
+\r
+   GPIO_Init( GPIOx_D_LCD, &GPIO_InitStructure );\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                LCD_DataLinesWrite\r
+*\r
+*******************************************************************************/\r
+/**\r
+*  Write a value on D0~D7\r
+*\r
+*  @param[in]  GPIOx    GPIO port to write on.\r
+*  @param[in]  PortVal  The value to write. Only the lowest 8 bits are taken into\r
+*                       account.\r
+*\r
+**/\r
+/******************************************************************************/\r
+static void LCD_DataLinesWrite( GPIO_TypeDef* GPIOx, u32 PortVal )\r
+   {\r
+   // Write only the lowest 8 bits!\r
+   GPIOx->ODR = ( (GPIOx->ODR) & 0xFF00 ) | (u8)PortVal;\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                LCD_CtrlLinesConfig\r
+*\r
+*******************************************************************************/\r
+/**\r
+*  Configure control lines in Output Push-Pull mode.\r
+*\r
+**/\r
+/******************************************************************************/\r
+static void LCD_CtrlLinesConfig( void )\r
+   {\r
+   GPIO_InitTypeDef             GPIO_InitStructure;\r
+          \r
+   GPIO_InitStructure.GPIO_Pin   =  LCD_CTRL_PINS;\r
+   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;\r
+   GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP;\r
+\r
+   GPIO_Init( GPIOx_CTRL_LCD, &GPIO_InitStructure );\r
+\r
+   GPIO_InitStructure.GPIO_Pin   =  CtrlPin_CS;\r
+   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;\r
+   GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP;\r
+\r
+   GPIO_Init( GPIOx_CS_LCD, &GPIO_InitStructure );\r
+\r
+   LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RS,  Bit_SET );    /* RS = 1   */\r
+   LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RD,  Bit_SET );    /* RD = 1   */\r
+   LCD_CtrlLinesWrite( GPIOx_CS_LCD,   CtrlPin_CS,  Bit_SET );    /* CS = 1   */\r
+   LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_WR,  Bit_SET );    /* WR = 1   */\r
+   LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RST, Bit_RESET );  /* RST = 0  */\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                LCD_CtrlLinesWrite\r
+*\r
+*******************************************************************************/\r
+/**\r
+*  Set or reset control lines.\r
+*\r
+*  @param[in]  GPIOx       Where x can be 0, 1 or 2 to select the GPIO peripheral.\r
+*  @param[in]  CtrlPins    The Control line.\r
+*  @param[in]  BitVal\r
+*\r
+**/\r
+/******************************************************************************/\r
+static void LCD_CtrlLinesWrite( GPIO_TypeDef* GPIOx, u32 CtrlPins, BitAction BitVal )\r
+   {\r
+   /* Set or Reset the control line */\r
+   GPIO_WriteBit( GPIOx, CtrlPins, BitVal );\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                LCD_CheckLCDStatus\r
+*\r
+*******************************************************************************/\r
+/**\r
+*  Check whether LCD LCD is busy or not.\r
+*\r
+**/\r
+/******************************************************************************/\r
+static void LCD_CheckLCDStatus( void )\r
+   {\r
+   unsigned char ID1;\r
+   unsigned char ID2;\r
+   unsigned char ID3;\r
+\r
+   LCD_SendLCDCmd( ST7637_RDDID );\r
+\r
+   /* Configure Data lines as Input */\r
+   LCD_DataLinesConfig (Input );\r
+\r
+   /* Start the LCD send data sequence */\r
+   LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RS, Bit_RESET );     /* RS = 0 */\r
+   LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RD, Bit_RESET );     /* RD = 0 */\r
+   LCD_CtrlLinesWrite( GPIOx_CS_LCD,   CtrlPin_CS, Bit_RESET );     /* CS = 0 */\r
+   LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_WR, Bit_SET );       /* WR = 1 */\r
+\r
+   /* Read data to the LCD */\r
+   GPIO_ReadInputData( GPIOx_D_LCD );\r
+   LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RD, Bit_SET );       /* RD = 1 */\r
+   LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RD, Bit_RESET );     /* RD = 0 */\r
+\r
+   ID1 = GPIO_ReadInputData( GPIOx_D_LCD );\r
+\r
+   LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RD, Bit_SET );       /* RD = 1 */\r
+   LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RD, Bit_RESET );     /* RD = 0 */\r
+\r
+   ID2 = GPIO_ReadInputData( GPIOx_D_LCD );\r
+\r
+   LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RD, Bit_SET );       /* RD = 1 */\r
+   LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RD, Bit_RESET );     /* RD = 0 */\r
+\r
+   ID3 = GPIO_ReadInputData( GPIOx_D_LCD );\r
+\r
+   LCD_DataLinesConfig( Output );\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                LCD_DrawChar\r
+*\r
+*******************************************************************************/\r
+/**\r
+*  Draw a character on the LCD screen.\r
+*\r
+*  @param[in]  x           The line where to display the character shape.\r
+*  @param[in]  y           The column start address.\r
+*  @param[in]  width       The number of columns (dots) in a character width.\r
+*  @param[in]  bmp         The character (monochrome) bitmap. A pointer of the dot matrix data.\r
+*  @param[in]  textColor   The character color.\r
+*  @param[in]  bGndColor   The character background color.\r
+*  @param[in]  charMagniCoeff The character magnifying coefficient.\r
+*\r
+*  @warning    The (0x0) point in on the low left corner.\r
+*\r
+**/\r
+/******************************************************************************/\r
+static void LCD_DrawChar( u8 x, u8 y, u8 width, const u8* bmp, u16 textColor, u16 bGndColor, u16 charMagniCoeff )\r
+   {\r
+   int i;\r
+   int j;\r
+   int k1;\r
+   int k2;\r
+\r
+   // Select the area for LCD output.\r
+   LCD_SetRect_For_Cmd( x, y, 7 * charMagniCoeff, 14 * charMagniCoeff );\r
+\r
+   // Select LCD output mode.\r
+   LCD_SendLCDCmd( ST7637_RAMWR );\r
+\r
+   for( i = 0; i < 7; i++ )\r
+      {\r
+      for( k1 = 0; k1 < charMagniCoeff; k1++ )\r
+         {\r
+         for( j = 0x80; j; j >>= 1 ) // 8\r
+            {\r
+            for( k2 = 0; k2 < charMagniCoeff; k2++ )\r
+               {\r
+               LCD_SendLCDData( ( bmp[2*i] & j ) ? ( textColor & 255 ) : ( bGndColor &  255 ) );\r
+               LCD_SendLCDData( ( bmp[2*i] & j ) ? ( textColor >> 8  ) : ( bGndColor >> 8 ) );\r
+               }\r
+            }\r
+\r
+         for( j = 0x80; j > 2; j >>= 1 )  // 8\r
+            {\r
+            for( k2 = 0; k2 < charMagniCoeff; k2++ )\r
+               {\r
+               LCD_SendLCDData( ( bmp[2*i+1] & j ) ? ( textColor & 255 ) : ( bGndColor & 255 ) );\r
+               LCD_SendLCDData( ( bmp[2*i+1] & j ) ? ( textColor >> 8  ) : ( bGndColor >> 8 ) );\r
+               }\r
+            }\r
+         }\r
+      }\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                LCD_DisplayRotate\r
+*\r
+*******************************************************************************/\r
+/**\r
+*  Configure the LCD controller for a given orientation.\r
+*\r
+*  @param[in]  H12 The new screen orientation.\r
+*\r
+**/\r
+/******************************************************************************/\r
+static void LCD_DisplayRotate( Rotate_H12_V_Match_TypeDef H12 )\r
+   {\r
+   // Memory Access Control 0x36\r
+   LCD_SendLCDCmd( ST7637_MADCTR );\r
+\r
+   switch( H12 )\r
+      {\r
+      case V3  :\r
+         LCD_SendLCDData( V3_MADCTRVAL );\r
+         break;\r
+\r
+      case V6  :\r
+         LCD_SendLCDData( V6_MADCTRVAL );\r
+         break;\r
+\r
+      case V9  :\r
+         LCD_SendLCDData( V9_MADCTRVAL );\r
+         break;\r
+\r
+      case V12 :\r
+      default  :\r
+         LCD_SendLCDData( V12_MADCTRVAL );\r
+         break;\r
+      }\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                LCD_7637_Controller\r
+*\r
+*******************************************************************************/\r
+/**\r
+*  Initialization of the controller registers.\r
+*\r
+*  @note See ST7637.PDF for more information.\r
+*\r
+**/\r
+/******************************************************************************/\r
+static void LCD_7637_Controller( void )\r
+   {\r
+   extern void starting_delay ( long unsigned  );\r
+\r
+   /** Apply hardware reset **/\r
+   LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RST, Bit_SET );    /* RST = 1  */\r
+   LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RST, Bit_RESET );  /* RST = 0  */\r
+   starting_delay( 0x500 );\r
+\r
+   LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RST, Bit_SET );    /* RST = 1  */\r
+   starting_delay( 0x500 );\r
+\r
+   //default mode is output\r
+   LCD_DataLinesConfig( Output );\r
+\r
+   LCD_CheckLCDStatus();\r
+\r
+   LCD_SendLCDCmd( ST7637_SWRESET );\r
+\r
+   //-----------disable autoread + Manual read once ----------------------------\r
+   LCD_SendLCDCmd( ST7637_AUTOLOADSET );  // Auto Load Set 0xD7\r
+   LCD_SendLCDData( 0xBF );               // Auto Load Disable\r
+\r
+   LCD_SendLCDCmd( ST7637_EPCTIN );       // EE Read/write mode 0xE0\r
+   LCD_SendLCDData( 0x00 );               // Set read mode\r
+\r
+   LCD_SendLCDCmd( ST7637_EPMRD );        // Read active 0xE3\r
+   LCD_SendLCDCmd( ST7637_EPCTOUT );      // Cancel control 0xE1\r
+\r
+   //---------------------------------- Sleep OUT ------------------------------\r
+   LCD_SendLCDCmd( ST7637_DISPOFF );      // display off 0x28\r
+   LCD_SendLCDCmd( ST7637_SLPOUT );       // Sleep Out 0x11\r
+\r
+   //--------------------------------Vop setting--------------------------------\r
+   LCD_SendLCDCmd( ST7637_VOPSET );       // Set Vop by initial Module 0xC0\r
+   LCD_SendLCDData( 0xFB );               // Vop = 13.64\r
+   LCD_SendLCDData( 0x00 );               // base on Module\r
+\r
+   //----------------------------Set Register-----------------------------------\r
+   LCD_SendLCDCmd( ST7637_BIASSEL );      // Bias select 0xC3\r
+   LCD_SendLCDData( 0x00 );               // 1/12 Bias, base on Module\r
+\r
+   LCD_SendLCDCmd( ST7637_BSTBMPXSEL );   // Setting Booster times 0xC4\r
+   LCD_SendLCDData( 0x05 );               // Booster X 8\r
+\r
+   LCD_SendLCDCmd( ST7637_BSTEFFSEL );    // Booster eff 0xC5\r
+   LCD_SendLCDData( 0x11 );               // BE = 0x01 (Level 2)\r
+\r
+   LCD_SendLCDCmd( ST7637_VGSORCSEL );    // Vg with booster x2 control 0xcb\r
+   LCD_SendLCDData( 0x01 );               // Vg from Vdd2\r
+\r
+   LCD_SendLCDCmd( ST7637_ID1SET );       // ID1 = 00 0xcc\r
+   LCD_SendLCDData( 0x00 );               //\r
+\r
+   LCD_SendLCDCmd( ST7637_ID3SET );       // ID3 = 00 0xce\r
+   LCD_SendLCDData( 0x00 );               //\r
+\r
+   LCD_SendLCDCmd( 0xB7 );                // Glass direction\r
+   LCD_SendLCDData( 0xC0 );               //\r
+\r
+   LCD_SendLCDCmd( ST7637_ANASET );       // Analog circuit setting 0xd0\r
+   LCD_SendLCDData( 0x1D );               //\r
+\r
+   LCD_SendLCDCmd( 0xB4 );                // PTL mode set\r
+   LCD_SendLCDData( 0x18 );               // power normal mode\r
+   LCD_SendLCDCmd( ST7637_INVOFF );       // Display Inversion OFF 0x20\r
+\r
+   LCD_SendLCDCmd( 0x2A );                // column range\r
+   LCD_SendLCDData( 0x04 );               //\r
+   LCD_SendLCDData( 0x83 );               //\r
+\r
+   LCD_SendLCDCmd( 0x2B );                // raw range\r
+   LCD_SendLCDData( 0x04 );               //\r
+   LCD_SendLCDData( 0x83 );               //\r
+\r
+\r
+   LCD_SendLCDCmd( ST7637_COLMOD );       // Color mode = 65k 0x3A\r
+   LCD_SendLCDData( 0x05 );               //\r
+\r
+   LCD_SendLCDCmd( ST7637_MADCTR );       // Memory Access Control 0x36\r
+   LCD_SendLCDData( V9_MADCTRVAL );\r
+\r
+   LCD_SendLCDCmd( ST7637_DUTYSET );      // Duty = 132 duty 0xb0\r
+   LCD_SendLCDData( 0x7F );\r
+\r
+   LCD_SendLCDCmd( 0x29 );                // Display ON\r
+   LCD_SendLCDCmd( 0xF9 );                // Gamma\r
+   LCD_SendLCDData( 0x00 );               //\r
+   LCD_SendLCDData( 0x03 );               //\r
+   LCD_SendLCDData( 0x05 );               //\r
+   LCD_SendLCDData( 0x07 );               //\r
+   LCD_SendLCDData( 0x09 );               //\r
+   LCD_SendLCDData( 0x0B );               //\r
+   LCD_SendLCDData( 0x0D );               //\r
+   LCD_SendLCDData( 0x0F );               //\r
+   LCD_SendLCDData( 0x11 );               //\r
+   LCD_SendLCDData( 0x13 );               //\r
+   LCD_SendLCDData( 0x15 );               //\r
+   LCD_SendLCDData( 0x17 );               //\r
+   LCD_SendLCDData( 0x19 );               //\r
+   LCD_SendLCDData( 0x1B );               //\r
+   LCD_SendLCDData( 0x1D );               //\r
+   LCD_SendLCDData( 0x1F );               //\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                LCD_BackLightConfig\r
+*\r
+*******************************************************************************/\r
+/**\r
+*  Setting of the PWM that drives the backlight intensity.\r
+*\r
+**/\r
+/******************************************************************************/\r
+static void LCD_BackLightConfig( void )\r
+   {\r
+   GPIO_InitTypeDef GPIO_InitStructure;\r
+\r
+   /* Enable GPIOB clock  */\r
+   RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE );\r
+\r
+   /* GPIOB Configuration:TIM4 2 in Output */\r
+   GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_7;\r
+   GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF_PP;\r
+   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;\r
+\r
+   GPIO_Init( GPIOB, &GPIO_InitStructure );\r
+\r
+   /* TIM4 Configuration -----------------------------------------------------*/\r
+   /* TIM4CLK = 12 MHz, Prescaler = 0x0 */\r
+\r
+   /* Enable TIM4 clock */\r
+   RCC_APB1PeriphClockCmd( RCC_APB1Periph_TIM4, ENABLE );\r
+\r
+   TIM_DeInit( TIM4 );\r
+   TIM_TimeBaseStructInit( &TIM_TimeBaseStructure );\r
+   TIM_OCStructInit( &TIM_OCInitStructure );\r
+\r
+   /* Time base configuration */\r
+   TIM_TimeBaseStructure.TIM_Period          = 0xFFFF;\r
+   TIM_TimeBaseStructure.TIM_Prescaler       = 0x0;\r
+   TIM_TimeBaseStructure.TIM_ClockDivision   = 0x0;\r
+   TIM_TimeBaseStructure.TIM_CounterMode     = TIM_CounterMode_Up;\r
+\r
+   TIM_TimeBaseInit( TIM4, &TIM_TimeBaseStructure );\r
+\r
+   /* Output Compare Toggle Mode configuration: Channel2 */\r
+   TIM_OCInitStructure.TIM_OCMode   = TIM_OCMode_PWM1;\r
+   TIM_OCInitStructure.TIM_Channel  = TIM_Channel_2;\r
+   TIM_OCInitStructure.TIM_Pulse    = Current_CCR_BackLightStart;\r
+\r
+   TIM_OCInit( TIM4, &TIM_OCInitStructure );\r
+   TIM_OC4PreloadConfig( TIM4, TIM_OCPreload_Disable );\r
+\r
+   TIM_ARRPreloadConfig( TIM4, ENABLE );\r
+\r
+   /* Enable TIM4 IT */\r
+   TIM_ITConfig( TIM4, TIM_IT_CC2, ENABLE );\r
+\r
+   // Go !!!\r
+   TIM_Cmd( TIM4, ENABLE );\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                LCD_BackLightChange\r
+*\r
+*******************************************************************************/\r
+/**\r
+*  Modify the PWM rate.\r
+*\r
+**/\r
+/******************************************************************************/\r
+static void LCD_BackLightChange( void )\r
+   {\r
+   /* Output Compare Toggle Mode configuration: Channel2 */\r
+   TIM_OCInitStructure.TIM_Pulse = Current_CCR_BackLightStart;\r
+\r
+   TIM_OCInit( TIM4, &TIM_OCInitStructure );\r
+   }\r
+\r
+/* Public functions for CircleOS ---------------------------------------------*/\r
+\r
+/*******************************************************************************\r
+*\r
+*                                LCD_Init\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Initialize LCD. Called at CircleOS startup.\r
+*\r
+*  @attention  This function must <b>NOT</b> be called by the user.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void LCD_Init( void )\r
+   {\r
+   LCD_SetBackLight( UTIL_ReadBackupRegister( BKP_BKLIGHT ) );\r
+\r
+   /* Do some gpio configs*/\r
+   GPIO_InitTypeDef GPIO_InitStructure;\r
+\r
+   /* Enable GPIO clock for LCD */\r
+   RCC_APB2PeriphClockCmd( GPIO_LCD_CTRL_PERIPH, ENABLE );\r
+   RCC_APB2PeriphClockCmd( GPIO_LCD_D_PERIPH, ENABLE );\r
+   RCC_APB2PeriphClockCmd( GPIO_LCD_CS_PERIPH, ENABLE );\r
+\r
+   /* Enable GPIOC clock */\r
+   RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC, ENABLE );\r
+\r
+   /* Init BackLight*/\r
+   LCD_BackLightConfig();\r
+\r
+   /* Configure control lines signals as output mode */\r
+   LCD_CtrlLinesConfig();\r
+\r
+   /* LCD LCD Init */\r
+   LCD_7637_Controller();\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                LCD_Handler\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Called by the CircleOS scheduler to manage LCD tasks.\r
+*\r
+*  @attention  This function must <b>NOT</b> be called by the user.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void LCD_Handler( void )\r
+   {\r
+   if( ++HandlerDivider % BACKLIGHT_DIVIDER )\r
+      {\r
+      return;\r
+      }\r
+\r
+   LCD_BackLightChange();\r
+   }\r
+\r
+\r
+/// @endcond\r
+\r
+/* Public functions ----------------------------------------------------------*/\r
+\r
+/*******************************************************************************\r
+*\r
+*                                LCD_SendLCDCmd\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Send on command byte to the LCD.\r
+*\r
+*  @param[in]  Cmd   An unsigned char containing the user command to send to the LCD.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void LCD_SendLCDCmd( u8 Cmd )\r
+   {\r
+   /* Start the LCD send data sequence */\r
+   LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RS, Bit_RESET );     /* RS = 0 */\r
+   LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RD, Bit_SET );       /* RD = 1 */\r
+   LCD_CtrlLinesWrite( GPIOx_CS_LCD,   CtrlPin_CS, Bit_RESET );     /* CS = 0 */\r
+   LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_WR, Bit_RESET );     /* WR = 0 */\r
+\r
+   /* Write data to the LCD */\r
+   LCD_DataLinesWrite( GPIOx_D_LCD, (u32)Cmd );\r
+   LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_WR, Bit_SET );       /* WR = 1 */\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                LCD_SendLCDData\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Send one data byte to the LCD.\r
+*\r
+*  @param[in]  Data  An unsigned character containing the data to send to the LCD.\r
+*  @pre        An LCD_SendLCDCmd was done with a command waiting for data.\r
+*\r
+*\r
+**/\r
+/******************************************************************************/\r
+void LCD_SendLCDData( u8 Data )\r
+   {\r
+   /* Configure Data lines as Output */\r
+   LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RS, Bit_SET );\r
+   LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RD, Bit_SET );\r
+   LCD_CtrlLinesWrite( GPIOx_CS_LCD,   CtrlPin_CS, Bit_RESET );\r
+   LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_WR, Bit_RESET );\r
+\r
+   /* Write data to the LCD */\r
+   LCD_DataLinesWrite( GPIOx_D_LCD,(u32)Data );\r
+   LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_WR, Bit_SET );\r
+   }\r
+\r
+/***********************************************************************************\r
+*\r
+*                                LCD_ReadLCDData\r
+*\r
+************************************************************************************/\r
+/**\r
+*\r
+*  Read one data byte from the LCD.\r
+*\r
+*  @return     An unsigned 32 bit word containing the data returned by a LCD command.\r
+*  @pre        An LCD_SendLCDCmd was done with a command returning data.\r
+*\r
+**/\r
+/********************************************************************************/\r
+u32 LCD_ReadLCDData( void )\r
+   {\r
+   u32 LCDData = 0;\r
+\r
+   /* Configure Data lines as Input */\r
+   LCD_DataLinesConfig(Input);\r
+\r
+   /* Start the LCD send data sequence */\r
+   LCD_CtrlLinesWrite( GPIOx_D_LCD,  CtrlPin_RS, Bit_SET );         /* RS = 1 */\r
+   LCD_CtrlLinesWrite( GPIOx_D_LCD,  CtrlPin_WR, Bit_SET );         /* WR = 1 */\r
+   LCD_CtrlLinesWrite( GPIOx_CS_LCD, CtrlPin_CS, Bit_RESET );       /* CS = 0 */\r
+   LCD_CtrlLinesWrite( GPIOx_D_LCD,  CtrlPin_RD, Bit_RESET );       /* RD = 0 */\r
+\r
+   /* Read data from the LCD */\r
+   LCDData = (GPIO_ReadInputData( GPIOx_D_LCD ) & LCD_DATA_PINS );\r
+\r
+   LCD_CtrlLinesWrite( GPIOx_D_LCD, CtrlPin_RD, Bit_SET );          /* RD = 1 */\r
+\r
+   /* Read the LCD returned data */\r
+   LCD_DataLinesConfig( Output );\r
+\r
+   return LCDData;\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                LCD_FillRect\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Fill a rectangle with a provided color.\r
+*\r
+*  @param[in]  x        The horizontal coordinate of the rectangle low left corner.\r
+*  @param[in]  y        The vertical coordinate of the rectangle low left corner.\r
+*  @param[in]  width    The rectangle width in pixels.\r
+*  @param[in]  height   The rectangle height in pixels.\r
+*  @param[in]  color    The RGB color to fill the rectangle with.\r
+*\r
+*  @warning    The (0x0) point in on the low left corner.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void LCD_FillRect( u16 x, u16 y, u16 width, u16 height, u16 color )\r
+   {\r
+   u8 Line;\r
+   u8 Column;\r
+\r
+   /* Select LCD screen area. */\r
+   LCD_SetRect_For_Cmd( x, y, width, height );\r
+\r
+   /* Send LCD RAM write command. */\r
+   LCD_SendLCDCmd( ST7637_RAMWR );\r
+\r
+   /* Fill selected LCD screen area with provided color. */\r
+   for( Line = 0; Line < width; Line++ )\r
+      {\r
+      for( Column = 0; Column < height; Column++ )\r
+         {\r
+         LCD_SendLCDData( color & 0xff );\r
+         LCD_SendLCDData( ( color >> 8 ) & 0xff );\r
+         }\r
+      }\r
+\r
+   #ifdef TESTLCD\r
+   /* Configure Data lines as Input */\r
+   LCD_DataLinesConfig( Input );\r
+\r
+   LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RST, Bit_SET );    /* RST = 1  */\r
+   LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RST, Bit_RESET );  /* RST = 0  */\r
+   LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RST, Bit_SET );    /* RST = 1  */\r
+\r
+   /* Start the LCD send data sequence */\r
+   LCD_CtrlLinesWrite( GPIOx_D_LCD,  CtrlPin_RS, Bit_SET );       /* RS = 1   */\r
+   LCD_CtrlLinesWrite( GPIOx_D_LCD,  CtrlPin_RS, Bit_RESET );     /* RS = 0   */\r
+   LCD_CtrlLinesWrite( GPIOx_D_LCD,  CtrlPin_RS, Bit_SET );       /* RS = 1   */\r
+\r
+   LCD_CtrlLinesWrite( GPIOx_D_LCD,  CtrlPin_RS, Bit_SET );       /* RS = 1   */\r
+   LCD_CtrlLinesWrite( GPIOx_D_LCD,  CtrlPin_RS, Bit_RESET );     /* RS = 0   */\r
+   LCD_CtrlLinesWrite( GPIOx_D_LCD,  CtrlPin_RS, Bit_SET );       /* RS = 1   */\r
+\r
+   LCD_CtrlLinesWrite( GPIOx_D_LCD,  CtrlPin_WR, Bit_SET );       /* WR = 1   */\r
+   LCD_CtrlLinesWrite( GPIOx_D_LCD,  CtrlPin_WR, Bit_RESET );     /* WR = 1   */\r
+   LCD_CtrlLinesWrite( GPIOx_D_LCD,  CtrlPin_WR, Bit_SET );       /* WR = 1   */\r
+\r
+   LCD_CtrlLinesWrite( GPIOx_D_LCD,  CtrlPin_RD, Bit_SET );       /* RD = 1   */\r
+   LCD_CtrlLinesWrite( GPIOx_D_LCD,  CtrlPin_RD, Bit_RESET );     /* RD = 0   */\r
+   LCD_CtrlLinesWrite( GPIOx_D_LCD,  CtrlPin_RD, Bit_SET );       /* RD = 1   */\r
+\r
+   LCD_CtrlLinesWrite( GPIOx_D_LCD,  CtrlPin_RD, Bit_SET );       /* RD = 1   */\r
+   LCD_CtrlLinesWrite( GPIOx_D_LCD,  CtrlPin_RD, Bit_RESET );     /* RD = 0   */\r
+   LCD_CtrlLinesWrite( GPIOx_D_LCD,  CtrlPin_RD, Bit_SET );       /* RD = 1   */\r
+\r
+   /* Configure Data lines as Input */\r
+   LCD_DataLinesConfig( Output );\r
+\r
+   LCD_DataLinesWrite( GPIOx_D_LCD, ~0 );\r
+   LCD_DataLinesWrite( GPIOx_D_LCD, 0 );\r
+   LCD_DataLinesWrite( GPIOx_D_LCD, ~1 );\r
+   LCD_DataLinesWrite( GPIOx_D_LCD, 1 );\r
+   LCD_DataLinesWrite( GPIOx_D_LCD, ~2 );\r
+   LCD_DataLinesWrite( GPIOx_D_LCD, 2 );\r
+   LCD_DataLinesWrite( GPIOx_D_LCD, ~4 );\r
+   LCD_DataLinesWrite( GPIOx_D_LCD, 4 );\r
+   LCD_DataLinesWrite( GPIOx_D_LCD, ~8 );\r
+   LCD_DataLinesWrite( GPIOx_D_LCD, 8 );\r
+   LCD_DataLinesWrite( GPIOx_D_LCD, ~0x10 );\r
+   LCD_DataLinesWrite( GPIOx_D_LCD, 0x10 );\r
+   LCD_DataLinesWrite( GPIOx_D_LCD, ~0x20 );\r
+   LCD_DataLinesWrite( GPIOx_D_LCD, 0x20 );\r
+   LCD_DataLinesWrite( GPIOx_D_LCD, ~0x40 );\r
+   LCD_DataLinesWrite( GPIOx_D_LCD, 0x40 );\r
+   LCD_DataLinesWrite( GPIOx_D_LCD, ~0x80 );\r
+   LCD_DataLinesWrite( GPIOx_D_LCD, 0x80 );\r
+\r
+   LCD_DataLinesConfig( Input );\r
+\r
+   #endif\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                LCD_DrawRect\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Draw a rectangle with a provided color.\r
+*\r
+*  @param[in]  x        The horizontal coordinate of the rectangle low left corner.\r
+*  @param[in]  y        The vertical coordinate of the rectangle low left corner.\r
+*  @param[in]  width    The rectangle width in pixels.\r
+*  @param[in]  height   The rectangle height in pixels.\r
+*  @param[in]  color    The RGB color to draw the rectangle with.\r
+*\r
+*  @warning    The (0x0) point in on the low left corner.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void LCD_DrawRect( u16 x, u16 y, u16 width, u16 height, u16 color )\r
+   {\r
+   // Draw horizontal sides.\r
+   LCD_FillRect( x, y,              width, 1, color );\r
+   LCD_FillRect( x, y + height - 1, width, 1, color );\r
+\r
+   // Draw vertical sides.\r
+   LCD_FillRect( x,              y, 1, height, color );\r
+   LCD_FillRect( x + width - 1,  y, 1, height, color );\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                LCD_DrawPixel\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Draw a pixel on the LCD with the provided color.\r
+*\r
+*  @param[in]  XPos     The horizontal coordinate of the pixel.\r
+*  @param[in]  YPos     The vertical coordinate of the pixel.\r
+*  @param[in]  Color    The RGB color to draw the pixel with.\r
+*\r
+*  @warning    The (0x0) point in on the low left corner.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void LCD_DrawPixel( u8 XPos, u8 YPos, u16 Color )\r
+   {\r
+   /* Select LCD screen area. */\r
+   LCD_SetRect_For_Cmd( XPos, YPos, 1, 1 );\r
+\r
+   /* Send LCD RAM write command. */\r
+   LCD_SendLCDCmd( ST7637_RAMWR );\r
+\r
+   // Draw pixel.\r
+   LCD_SendLCDData( Color );\r
+   LCD_SendLCDData( Color >> 8 );\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                LCD_RectRead\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Save the pixels of a rectangle part of the LCD into a RAM variable.\r
+*\r
+*  @param[in]  x        The horizontal coordinate of the rectangle low left corner.\r
+*  @param[in]  y        The vertical coordinate of the rectangle low left corner.\r
+*  @param[in]  width    The rectangle width in pixels.\r
+*  @param[in]  height   The rectangle height in pixels.\r
+*  @param[out] bmp      The variable to store the read data into.\r
+*\r
+*  @warning    One pixel weights 2 bytes.\r
+*  @warning    The (0x0) point in on the low left corner.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void LCD_RectRead( u16 x, u16 y, u16 width, u16 height, u8* bmp )\r
+   {\r
+   int i;\r
+   int bytesize = (width * height) *2; // 2 bytes per pixel.\r
+\r
+   /* Select LCD screen area. */\r
+   LCD_SetRect_For_Cmd( x, y, width, height );\r
+\r
+   /* Send LCD RAM write command. */\r
+   LCD_SendLCDCmd(ST7637_RAMRD);\r
+\r
+   // First read byte is dummy!\r
+   LCD_ReadLCDData();\r
+\r
+   // Read pixels from LCD screen.\r
+   for( i = 0; i < bytesize; i++ )\r
+      {\r
+      *bmp++ = LCD_ReadLCDData();\r
+      }\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                LCD_GetPixel\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Read the RGB color of the pixel the coordinate are provided in parameter.\r
+*\r
+*  @param[in]  x        The horizontal coordinate of the pixel.\r
+*  @param[in]  y        The vertical coordinate of the pixel.\r
+*  @return              An unsigned 16 bit word containing the RGB color of the pixel.\r
+*\r
+*  @warning    The (0x0) point in on the low left corner.\r
+*  @see        LCD_RectRead\r
+*\r
+**/\r
+/******************************************************************************/\r
+u16 LCD_GetPixel( u8 x, u8 y )\r
+   {\r
+   u16 val;\r
+\r
+   LCD_RectRead( x, y, 1, 1, (u8*)&val );\r
+\r
+   return val;\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                LCD_DisplayChar\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Display at provided coordinates the provided ASCII character with the provided\r
+*  text and background colors and with the provided magnify coefficient.\r
+*\r
+*  @param[in]  x              The horizontal coordinate of the character.\r
+*  @param[in]  y              The vertical coordinate of the character.\r
+*  @param[in]  Ascii          The ASCII code of the character to display.\r
+*                             @n Ascii must be higher than 31 and lower than 127.\r
+*  @param[in]  TextColor      The color used to draw the character.\r
+*  @param[in]  BGndColor      The background color of the drawn character.\r
+*  @param[in]  CharMagniCoeff The magnify coefficient used to draw the character.\r
+*\r
+*  @warning    The (0x0) point in on the low left corner.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void LCD_DisplayChar( u8 x, u8 y, u8 Ascii, u16 TextColor, u16 BGndColor, u16 CharMagniCoeff)\r
+   {\r
+   // Display the selected bitmap according to the provided ASCII character.\r
+   LCD_DrawChar( x, y, 7, (u8*)&AsciiDotsTable[ (Ascii-32) * 14 ], TextColor, BGndColor, CharMagniCoeff );\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                LCD_SetRect_For_Cmd\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Define the rectangle for the next command to be applied.\r
+*\r
+*  @param[in]  x        The horizontal coordinate of the rectangle low left corner.\r
+*  @param[in]  y        The vertical coordinate of the rectangle low left corner.\r
+*  @param[in]  width    The rectangle width in pixels.\r
+*  @param[in]  height   The rectangle height in pixels.\r
+*\r
+*  @warning    The (0x0) point in on the low left corner.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void LCD_SetRect_For_Cmd( s16 x, s16 y, s16 width, s16 height )\r
+   {\r
+   LCD_SendLCDCmd( ST7637_CASET );\r
+   LCD_SendLCDData( y + OrientationOffsetX[ CurrentScreenOrientation ] );\r
+   LCD_SendLCDData( y + OrientationOffsetX[ CurrentScreenOrientation ] + height - 1 );\r
+\r
+   LCD_SendLCDCmd( ST7637_RASET );\r
+   LCD_SendLCDData( x + OrientationOffsetY[ CurrentScreenOrientation ] );\r
+   LCD_SendLCDData( x + OrientationOffsetY[ CurrentScreenOrientation ] + width - 1 );\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                LCD_SetBackLight\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Modify the PWM rate. Any value below BACKLIGHTMIN reset the value to the\r
+*  default value (DEFAULT_CCR_BACKLIGHTSTART).\r
+*\r
+*  @param[in]  newBacklightStart The new PWM rate.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void LCD_SetBackLight( u32 newBacklightStart )\r
+   {\r
+   if( newBacklightStart >= BACKLIGHTMIN )\r
+      {\r
+      Current_CCR_BackLightStart = newBacklightStart;\r
+      }\r
+   else\r
+      {\r
+      Current_CCR_BackLightStart = DEFAULT_CCR_BACKLIGHTSTART;\r
+      }\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                LCD_SetBackLightOff\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Switch the LCD back light off.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void LCD_SetBackLightOff( void )\r
+   {\r
+   Current_CCR_BackLightStart = 0;\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                LCD_SetBackLightOn\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Switch the LCD back light on.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void LCD_SetBackLightOn( void )\r
+   {\r
+   Current_CCR_BackLightStart = DEFAULT_CCR_BACKLIGHTSTART;\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                LCD_GetBackLight\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Returns le LCD PWM rate.\r
+*\r
+*  @return The current LCD PWM rate.\r
+*\r
+**/\r
+/******************************************************************************/\r
+u32 LCD_GetBackLight( void )\r
+   {\r
+   return Current_CCR_BackLightStart;\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                LCD_SetRotateScreen\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Enable or disable the ability of the screen display to rotate according to\r
+*  the MEMs information.\r
+*\r
+*  @param[in]  RotateScreen 0 to disable screen rotation and 1 to enable.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void LCD_SetRotateScreen( u8 RotateScreen)\r
+   {\r
+   CurrentRotateScreen = RotateScreen;\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                LCD_GetRotateScreen\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Return the screen rotation mode.\r
+*\r
+*  @retval 0 screen rotation is disabled.\r
+*  @retval 1 screen rotation is enabled.\r
+*\r
+**/\r
+/******************************************************************************/\r
+u8 LCD_GetRotateScreen( void )\r
+   {\r
+   return CurrentRotateScreen;\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                LCD_SetScreenOrientation\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Set the screen orientation.\r
+*\r
+*  @param[in]  ScreenOrientation The new screen orientation.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void LCD_SetScreenOrientation( Rotate_H12_V_Match_TypeDef ScreenOrientation )\r
+   {\r
+   CurrentScreenOrientation = ScreenOrientation;\r
+\r
+   LCD_DisplayRotate( CurrentScreenOrientation );\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                LCD_GetScreenOrientation\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Return current screen orientation.\r
+*\r
+*  @return   A Rotate_H12_V_Match_TypeDef telling the current screen orientation.\r
+*\r
+**/\r
+/******************************************************************************/\r
+Rotate_H12_V_Match_TypeDef LCD_GetScreenOrientation( void )\r
+   {\r
+   return CurrentScreenOrientation;\r
+   }\r
+\r
diff --git a/Demo/CORTEX_STM32F103_Primer_GCC/ST_Code/lcd.h b/Demo/CORTEX_STM32F103_Primer_GCC/ST_Code/lcd.h
new file mode 100644 (file)
index 0000000..478f438
--- /dev/null
@@ -0,0 +1,154 @@
+/********************* (C) COPYRIGHT 2007 RAISONANCE S.A.S. *******************/\r
+/**\r
+*\r
+* @file     lcd.h\r
+* @brief    The header file for ST7637 driver.\r
+* @author   IB\r
+* @date     07/2007\r
+*\r
+**/\r
+/******************************************************************************/\r
+\r
+/* Define to prevent recursive inclusion -------------------------------------*/\r
+#ifndef __LCD_H\r
+#define __LCD_H\r
+\r
+/* Includes ------------------------------------------------------------------*/\r
+#include "stm32f10x_lib.h"\r
+\r
+/* Type def  -----------------------------------------------------------------*/\r
+\r
+/* Data lines configuration mode */\r
+typedef enum\r
+   {\r
+   Input,\r
+   Output\r
+   } DataConfigMode_TypeDef;\r
+\r
+/* Constants -----------------------------------------------------------------*/\r
+\r
+/* LCD Control pins */\r
+#define CtrlPin_RS               GPIO_Pin_8\r
+#define CtrlPin_RD               GPIO_Pin_9\r
+#define CtrlPin_WR               GPIO_Pin_10\r
+#define CtrlPin_RST              GPIO_Pin_12\r
+#define LCD_CTRL_PINS            (CtrlPin_RS|CtrlPin_RD|CtrlPin_WR|CtrlPin_RST)\r
+#define GPIOx_CTRL_LCD           GPIOC\r
+#define GPIO_LCD_CTRL_PERIPH     RCC_APB2Periph_GPIOC\r
+\r
+#define CtrlPin_CS               GPIO_Pin_2\r
+#define GPIOx_CS_LCD             GPIOD\r
+#define GPIO_LCD_CS_PERIPH       RCC_APB2Periph_GPIOD\r
+\r
+#define LCD_D0                   GPIO_Pin_0\r
+#define LCD_D1                   GPIO_Pin_1\r
+#define LCD_D2                   GPIO_Pin_2\r
+#define LCD_D3                   GPIO_Pin_3\r
+#define LCD_D4                   GPIO_Pin_4\r
+#define LCD_D5                   GPIO_Pin_5\r
+#define LCD_D6                   GPIO_Pin_6\r
+#define LCD_D7                   GPIO_Pin_7\r
+#define LCD_DATA_PINS            (LCD_D0|LCD_D1|LCD_D2|LCD_D3|LCD_D4|LCD_D5|LCD_D6|LCD_D7)\r
+#define GPIOx_D_LCD              GPIOC\r
+#define GPIO_LCD_D_PERIPH        RCC_APB2Periph_GPIOC\r
+\r
+/* LCD Commands */\r
+#define DISPLAY_ON               0xAF\r
+#define DISPLAY_OFF              0xAE\r
+#define START_LINE               0xC0\r
+#define START_COLUMN             0x00\r
+#define CLOCKWISE_OUTPUT         0xA0\r
+#define DYNAMIC_DRIVE            0xA4\r
+#define DUTY_CYCLE               0xA9\r
+#define READ_MODIFY_WRITE_OFF    0xEE\r
+#define SOFTWARE_RESET           0xE2\r
+\r
+#define ST7637_NOP               0x00\r
+#define ST7637_SWRESET           0x01\r
+#define ST7637_RDDID             0x04\r
+#define ST7637_RDDST             0x09\r
+#define ST7637_RDDPM             0x0A\r
+#define ST7637_RDDMADCTR         0x0B\r
+#define ST7637_RDDCOLMOD         0x0C\r
+#define ST7637_RDDIM             0x0D\r
+#define ST7637_RDDSM             0x0E\r
+#define ST7637_RDDSDR            0x0F\r
+\r
+#define ST7637_SLPIN             0x10\r
+#define ST7637_SLPOUT            0x11\r
+#define ST7637_PTLON             0x12\r
+#define ST7637_NORON             0x13\r
+\r
+#define ST7637_INVOFF            0x20\r
+#define ST7637_INVON             0x21\r
+#define ST7637_APOFF             0x22\r
+#define ST7637_APON              0x23\r
+#define ST7637_WRCNTR            0x25\r
+#define ST7637_DISPOFF           0x28\r
+#define ST7637_DISPON            0x29\r
+#define ST7637_CASET             0x2A\r
+#define ST7637_RASET             0x2B\r
+#define ST7637_RAMWR             0x2C\r
+#define ST7637_RGBSET            0x2D\r
+#define ST7637_RAMRD             0x2E\r
+\r
+#define ST7637_PTLAR             0x30\r
+#define ST7637_SCRLAR            0x33\r
+#define ST7637_TEOFF             0x34\r
+#define ST7637_TEON              0x35\r
+#define ST7637_MADCTR            0x36\r
+#define ST7637_VSCSAD            0x37\r
+#define ST7637_IDMOFF            0x38\r
+#define ST7637_IDMON             0x39\r
+#define ST7637_COLMOD            0x3A\r
+\r
+#define ST7637_RDID1             0xDA\r
+#define ST7637_RDID2             0xDB\r
+#define ST7637_RDID3             0xDC\r
+\r
+#define ST7637_DUTYSET           0xB0\r
+#define ST7637_FIRSTCOM          0xB1\r
+#define ST7637_OSCDIV            0xB3\r
+#define ST7637_PTLMOD            0xB4\r
+#define ST7637_NLINVSET          0xB5\r
+#define ST7637_COMSCANDIR        0xB7\r
+#define ST7637_RMWIN             0xB8\r
+#define ST7637_RMWOUT            0xB9\r
+\r
+#define ST7637_VOPSET            0xC0\r
+#define ST7637_VOPOFSETINC       0xC1\r
+#define ST7637_VOPOFSETDEC       0xC2\r
+#define ST7637_BIASSEL           0xC3\r
+#define ST7637_BSTBMPXSEL        0xC4\r
+#define ST7637_BSTEFFSEL         0xC5\r
+#define ST7637_VOPOFFSET         0xC7\r
+#define ST7637_VGSORCSEL         0xCB\r
+\r
+#define ST7637_ID1SET            0xCC\r
+#define ST7637_ID2SET            0xCD\r
+#define ST7637_ID3SET            0xCE\r
+\r
+#define ST7637_ANASET            0xD0\r
+#define ST7637_AUTOLOADSET       0xD7\r
+#define ST7637_RDTSTSTATUS       0xDE\r
+\r
+#define ST7637_EPCTIN            0xE0\r
+#define ST7637_EPCTOUT           0xE1\r
+#define ST7637_EPMWR             0xE2\r
+#define ST7637_EPMRD             0xE3\r
+#define ST7637_MTPSEL            0xE4\r
+#define ST7637_ROMSET            0xE5\r
+#define ST7637_HPMSET            0xEB\r
+\r
+#define ST7637_FRMSEL            0xF0\r
+#define ST7637_FRM8SEL           0xF1\r
+#define ST7637_TMPRNG            0xF2\r
+#define ST7637_TMPHYS            0xF3\r
+#define ST7637_TEMPSEL           0xF4\r
+#define ST7637_THYS              0xF7\r
+#define ST7637_FRAMESET          0xF9\r
+                                 \r
+#define ST7637_MAXCOL            0x83\r
+#define ST7637_MAXPAG            0x83\r
+\r
+#endif /*__LCD_H */\r
diff --git a/Demo/CORTEX_STM32F103_Primer_GCC/ST_Code/led.c b/Demo/CORTEX_STM32F103_Primer_GCC/ST_Code/led.c
new file mode 100644 (file)
index 0000000..107ac66
--- /dev/null
@@ -0,0 +1,210 @@
+/********************* (C) COPYRIGHT 2007 RAISONANCE S.A.S. *******************/\r
+/**\r
+*\r
+* @file     led.c\r
+* @brief    LED management.\r
+* @author   IB\r
+* @date     07/2007\r
+*\r
+**/\r
+/******************************************************************************/\r
+\r
+/* Includes ------------------------------------------------------------------*/\r
+#include "circle.h"\r
+\r
+/// @cond Internal\r
+\r
+/* Private variables ---------------------------------------------------------*/\r
+\r
+int            GreenLED_Counter  = 0;\r
+int            RedLED_Counter    = 0;\r
+enum LED_mode  GreenLED_mode     = LED_UNDEF;\r
+enum LED_mode  RedLED_mode       = LED_UNDEF;\r
+enum LED_mode  GreenLED_newmode  = LED_OFF;\r
+enum LED_mode  RedLED_newmode    = LED_OFF;\r
+const int      HalfPeriod_LF     = 200;\r
+const int      HalfPeriod_HF     = 50;\r
+const int      Period_LF         = 200 * 2;\r
+const int      Period_HF         = 50 * 2;\r
+\r
+/* Public functions for CircleOS ---------------------------------------------*/\r
+\r
+/*******************************************************************************\r
+*\r
+*                                LED_Init\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Initialization of the GPIOs for the LEDs\r
+*\r
+*  @note    Is called by CircleOS startup.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void LED_Init( void )\r
+   {\r
+   GPIO_InitTypeDef GPIO_InitStructure;\r
+\r
+   /* Enable LED GPIO clock */\r
+   RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE );\r
+\r
+   /* Configure LED pins as output push-pull */\r
+   GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_8 | GPIO_Pin_9 ;\r
+   GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP;\r
+   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;\r
+\r
+   GPIO_Init( GPIOB, &GPIO_InitStructure );\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                LED_Handler\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Called by the CircleOS scheduler to manage the states of the LEDs.\r
+*  LEDs may be on, off or blinking according to their state.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void LED_Handler( void )\r
+   {\r
+   LED_Handler_hw(LED_GREEN);\r
+   LED_Handler_hw(LED_RED);\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                LED_Handler\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Called by the CircleOS scheduler to manage the states of the LEDs.\r
+*  LEDs may be on, off or blinking according to their state.\r
+*\r
+*  @param[in]  id       A LED_id indicating the LED to take care of.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void LED_Handler_hw( enum LED_id id )\r
+   {\r
+   int            counter;\r
+   enum LED_mode  mode;\r
+   \r
+   // Choose the right LED parameters.\r
+   if( id == LED_GREEN )\r
+      {\r
+      counter = GreenLED_Counter;\r
+      mode    = GreenLED_newmode;\r
+      }\r
+   else\r
+      {\r
+      counter = RedLED_Counter;\r
+      mode    = RedLED_newmode;\r
+      }\r
+\r
+   switch( mode )\r
+      {\r
+      case LED_OFF         :\r
+      case LED_ON          :\r
+         if( ( ( id == LED_GREEN ) && ( GreenLED_mode == mode ) ) ||\r
+             ( ( id == LED_RED   ) && ( RedLED_mode   == mode ) ) )\r
+            {\r
+            return;\r
+            }\r
+\r
+         if( id == LED_GREEN )\r
+            {\r
+            GPIO_WriteBit( GPIOB, GPIO_Pin_8, ( mode == LED_OFF ) ? Bit_RESET : Bit_SET );\r
+\r
+            GreenLED_mode = mode;\r
+            }\r
+         else if( id == LED_RED )\r
+            {\r
+            GPIO_WriteBit( GPIOB, GPIO_Pin_9, ( mode == LED_OFF ) ? Bit_RESET : Bit_SET );\r
+\r
+            RedLED_mode = mode;\r
+            }\r
+\r
+         counter = -1;\r
+         break;\r
+\r
+      case LED_BLINKING_HF :\r
+         counter++;\r
+\r
+         if( counter == HalfPeriod_HF )\r
+            {\r
+            GPIO_WriteBit( GPIOB, ( id == LED_RED ) ? GPIO_Pin_9 : GPIO_Pin_8, Bit_SET );\r
+            }\r
+         else if( ( counter < 0 ) || ( counter >= Period_HF ) )\r
+            {\r
+            GPIO_WriteBit( GPIOB, ( id == LED_RED ) ? GPIO_Pin_9 : GPIO_Pin_8, Bit_RESET );\r
+\r
+            counter = 0;\r
+            }\r
+         break;\r
+\r
+      case LED_BLINKING_LF :\r
+         counter++;\r
+\r
+         if( counter == HalfPeriod_LF )\r
+            {\r
+            GPIO_WriteBit( GPIOB, ( id == LED_RED ) ? GPIO_Pin_9 : GPIO_Pin_8, Bit_SET );\r
+            }\r
+\r
+         else if( ( counter < 0 ) || ( counter >= Period_LF ) )\r
+            {\r
+            GPIO_WriteBit( GPIOB, ( id == LED_RED ) ? GPIO_Pin_9 : GPIO_Pin_8, Bit_RESET );\r
+\r
+            counter = 0;\r
+            }\r
+         break;\r
+\r
+      default              :\r
+         break;\r
+      }\r
+\r
+   if( id == LED_GREEN )\r
+      {\r
+      GreenLED_Counter = counter;\r
+      GreenLED_mode    = mode;\r
+      }\r
+   else\r
+      {\r
+      RedLED_Counter = counter;\r
+      RedLED_mode    = mode;\r
+      }\r
+   }\r
+\r
+/// @endcond\r
+\r
+/* Public functions ----------------------------------------------------------*/\r
+\r
+/*******************************************************************************\r
+*\r
+*                                LED_Set\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Set a specified LED in a specified mode.\r
+*\r
+*  @param[in]  id    A LED_id specifying the LED to change the mode.\r
+*  @param[in]  mode  A LED_mode describing the new LED mode.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void LED_Set( enum LED_id id, enum LED_mode mode )\r
+   {\r
+   if( id == LED_GREEN )\r
+      {\r
+      GreenLED_newmode = mode;\r
+      }\r
+   else if( id == LED_RED )\r
+      {\r
+      RedLED_newmode = mode;\r
+      }\r
+   }\r
diff --git a/Demo/CORTEX_STM32F103_Primer_GCC/ST_Code/mems.c b/Demo/CORTEX_STM32F103_Primer_GCC/ST_Code/mems.c
new file mode 100644 (file)
index 0000000..e226cd9
--- /dev/null
@@ -0,0 +1,605 @@
+/********************* (C) COPYRIGHT 2007 RAISONANCE S.A.S. *******************/\r
+/**\r
+*\r
+* @file     mems.c\r
+* @brief    Mems Initialization and management\r
+* @author   FL\r
+* @date     07/2007\r
+* @version  1.1\r
+* @date     10/2007\r
+* @version  1.5 various corrections reported by Ron Miller \r
+*\r
+**/\r
+/******************************************************************************/\r
+\r
+/* Includes ------------------------------------------------------------------*/\r
+#include "circle.h"\r
+\r
+/// @cond Internal\r
+\r
+/* Private define ------------------------------------------------------------*/\r
+#define RDOUTXL               0xE8  /*!< Multiple Read from OUTXL             */\r
+#define WRCTRL_REG1           0x20  /*!< Single Write CTRL_REG                */\r
+#define RDCTRL_REG1           0xA0  /*!< Single Read CTRL_REG                 */\r
+#define RDID                  0x8F  /*!< Single Read WHO_AM_I                 */\r
+#define LOW                   0x00  /*!< ChipSelect line low                  */\r
+#define HIGH                  0x01  /*!< ChipSelect line high                 */\r
+#define DUMMY_BYTE            0xA5\r
+#define MEMS_DIVIDER          1\r
+#define MEMS_TESTING_DIVIDER  101\r
+#define MARGIN                500\r
+#define DELAY_REACT           20\r
+#define MIN_REACT             15\r
+#define DIV_REACT             10\r
+#define GRAD_SHOCK            200000\r
+\r
+/* Private variables ---------------------------------------------------------*/\r
+tMEMS_Info                          MEMS_Info                        = {0};   // structure definition in circle.h\r
+int                                 TestingActive                    = 0;\r
+int                                 StartingFromResetOrShockCounter  = 1000;\r
+int                                 TimeCounterForDoubleClick        = 0;\r
+int                                 TimeLastShock                    = 0;\r
+static int                          divider                          = 0;\r
+static Rotate_H12_V_Match_TypeDef   previous_Screen_Orientation;\r
+u32                                 Gradient2;\r
+\r
+//Filtering\r
+unsigned                            N_filtering                      = 0;\r
+\r
+//Gradient\r
+s16                                 GradX                            = 0;\r
+s16                                 GradY                            = 0;\r
+s16                                 GradZ                            = 0;\r
+\r
+// Pointer move:\r
+// each coordinate (X, Y and Z) is described by 3 variables where suffix means:\r
+//  f = flag to indicate that a move has been done. Cleared by the Ptr Manager when acknowledged.\r
+//  i = amplitude of the move (Grad / 10)\r
+//  t = delay to accept the counter reaction\r
+int fMovePtrX; \r
+int iMovePtrX;\r
+int tMovePtrX;\r
+int fMovePtrY;\r
+int iMovePtrY;\r
+int tMovePtrY;\r
+int fMovePtrZ;\r
+int iMovePtrZ;\r
+int tMovePtrZ;\r
+\r
+s16 XInit      = 0;\r
+s16 YInit      = 0;\r
+s16 ZInit      = 0;\r
+\r
+/* Private function prototypes -----------------------------------------------*/\r
+static void MEMS_ChipSelect( u8 State );\r
+static u8 MEMS_SendByte( u8 byte );\r
+static void MEMS_WriteEnable( void );\r
+static u32 MEMS_ReadOutXY( void );\r
+static void MEMS_WakeUp( void );\r
+\r
+/* Private functions ---------------------------------------------------------*/\r
+\r
+/*******************************************************************************\r
+*\r
+*                                MEMS_WakeUp\r
+*\r
+*******************************************************************************/\r
+/**\r
+*  Wake Up Mems.\r
+*\r
+**/\r
+/******************************************************************************/\r
+static void MEMS_WakeUp( void )\r
+   {\r
+   u8 reg_val;\r
+\r
+   /* read RDCTRL_REG1 */\r
+\r
+   /* Chip Select low */\r
+   MEMS_ChipSelect( LOW );\r
+\r
+   /* Send "RDCTRL_REG1" instruction */\r
+   MEMS_SendByte( RDCTRL_REG1 );\r
+\r
+   reg_val = MEMS_SendByte( DUMMY_BYTE );\r
+\r
+   /* Chip Select high */\r
+   MEMS_ChipSelect( HIGH );\r
+\r
+   /* SET P0:P1 to '11' */\r
+   /* 0xC0 to wake up and 0x30 for full speed frequency (640 Hz). */\r
+   reg_val = reg_val | 0xC0 | 0x30;\r
+\r
+   /* Chip Select low */\r
+   MEMS_ChipSelect( LOW );\r
+\r
+   /* Send "WRCTRL_REG1" instruction */\r
+   MEMS_SendByte( WRCTRL_REG1 );\r
+   MEMS_SendByte( reg_val );\r
+\r
+   /* Chip Select high */\r
+   MEMS_ChipSelect( HIGH );\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                MEMS_ReadOutXY\r
+*\r
+*******************************************************************************/\r
+/**\r
+*  Reads X and Y Out.\r
+*\r
+*  @return An unsigned 32 bit word with the highest 16 bits containing the Y\r
+*          and the lowest 16 bits the X.\r
+*\r
+**/\r
+/******************************************************************************/\r
+static u32 MEMS_ReadOutXY( void )\r
+   {\r
+   u8 OutXL;\r
+   u8 OutXH;\r
+   u8 OutYL;\r
+   u8 OutYH;\r
+   u8 OutZL;\r
+   u8 OutZH;\r
+\r
+   /* Chip Select low */\r
+   MEMS_ChipSelect( LOW );\r
+\r
+   /* Send "RDOUTXL" instruction */\r
+   MEMS_SendByte( RDOUTXL );\r
+\r
+   /* Read a byte */\r
+   OutXL = MEMS_SendByte( DUMMY_BYTE );\r
+\r
+   /* Read a byte */\r
+   OutXH = MEMS_SendByte( DUMMY_BYTE );\r
+\r
+   /* Read a byte */\r
+   OutYL = MEMS_SendByte( DUMMY_BYTE );\r
+\r
+   /* Read a byte */\r
+   OutYH = MEMS_SendByte( DUMMY_BYTE );\r
+\r
+   /* Read a byte */\r
+   OutZL = MEMS_SendByte( DUMMY_BYTE );\r
+\r
+   /* Read a byte */\r
+   OutZH = MEMS_SendByte( DUMMY_BYTE );\r
+\r
+   MEMS_Info.OutX =  OutXL + ( OutXH << 8 );\r
+   MEMS_Info.OutY =  OutYL + ( OutYH << 8 );\r
+   MEMS_Info.OutZ =  OutZL + ( OutZH << 8 );\r
+\r
+   /* Chip Select high */\r
+   MEMS_ChipSelect( HIGH );\r
+\r
+   MEMS_Info.OutX_F4 += ( MEMS_Info.OutX - ( MEMS_Info.OutX_F4 >> 2 ) ); // Filter on 4 values.\r
+   MEMS_Info.OutY_F4 += ( MEMS_Info.OutY - ( MEMS_Info.OutY_F4 >> 2 ) ); // Filter on 4 values.\r
+   MEMS_Info.OutZ_F4 += ( MEMS_Info.OutZ - ( MEMS_Info.OutZ_F4 >> 2 ) ); // Filter on 4 values.\r
+\r
+   MEMS_Info.OutX_F16 += ( MEMS_Info.OutX - ( MEMS_Info.OutX_F16 >> 4 ) ); // Filter on 16 values.\r
+   MEMS_Info.OutY_F16 += ( MEMS_Info.OutY - ( MEMS_Info.OutY_F16 >> 4 ) ); // Filter on 16 values.\r
+   MEMS_Info.OutZ_F16 += ( MEMS_Info.OutZ - ( MEMS_Info.OutZ_F16 >> 4 ) ); // Filter on 16 values.\r
+\r
+   MEMS_Info.OutX_F64 += ( MEMS_Info.OutX - ( MEMS_Info.OutX_F64 >> 6 ) ); // Filter on 64 values.\r
+   MEMS_Info.OutY_F64 += ( MEMS_Info.OutY - ( MEMS_Info.OutY_F64 >> 6 ) ); // Filter on 64 values.\r
+   MEMS_Info.OutZ_F64 += ( MEMS_Info.OutZ - ( MEMS_Info.OutZ_F64 >> 6 ) ); // Filter on 64 values.\r
+\r
+   MEMS_Info.OutX_F256 += ( MEMS_Info.OutX - ( MEMS_Info.OutX_F256 >> 8) ); // Filter on 256 values.\r
+   MEMS_Info.OutY_F256 += ( MEMS_Info.OutY - ( MEMS_Info.OutY_F256 >> 8) ); // Filter on 256 values.\r
+   MEMS_Info.OutZ_F256 += ( MEMS_Info.OutZ - ( MEMS_Info.OutZ_F256 >> 8) ); // Filter on 256 values.\r
+\r
+   if( N_filtering < 256 )\r
+      {\r
+      // Just to validate the calculated average values.\r
+      N_filtering++; \r
+      }\r
+\r
+   return ( MEMS_Info.OutX + ( MEMS_Info.OutY << 16 ) );\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                MEMS_ChipSelect\r
+*\r
+*******************************************************************************/\r
+/**\r
+*  Selects or deselects the MEMS device.\r
+*\r
+*  @param[in]  State Level to be applied on ChipSelect pin.\r
+*\r
+**/\r
+/******************************************************************************/\r
+static void MEMS_ChipSelect( u8 State )\r
+   {\r
+   /* Set High or low the chip select line on PA.4 pin */\r
+   GPIO_WriteBit( GPIOD, GPIO_Pin_2, (BitAction)State );\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                MEMS_SendByte\r
+*\r
+*******************************************************************************/\r
+/**\r
+*  Sends a byte through the SPI interface and return the byte received from \r
+*  the SPI bus.\r
+*\r
+*  @param[in]  byte The byte to send to the SPI interface.                  \r
+*\r
+*  @return The byte returned by the SPI bus.\r
+*\r
+**/\r
+/******************************************************************************/\r
+static u8 MEMS_SendByte( u8 byte )\r
+   {\r
+   /* Loop while DR register in not emplty */\r
+   while( SPI_GetFlagStatus( SPI2, SPI_FLAG_TXE ) == RESET );\r
+\r
+   /* Send byte through the SPI2 peripheral */\r
+   SPI_SendData( SPI2, byte );\r
+\r
+   /* Wait to receive a byte */\r
+   while( SPI_GetFlagStatus( SPI2, SPI_FLAG_RXNE ) == RESET );\r
+\r
+   /* Return the byte read from the SPI bus */\r
+   return SPI_ReceiveData( SPI2 );\r
+   }\r
+\r
+/* Public functions for CircleOS ---------------------------------------------*/\r
+\r
+/*******************************************************************************\r
+*\r
+*                                MEMS_Init\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Initializes the peripherals used by the SPI MEMS driver.\r
+*\r
+*  @attention  This function must <b>NOT</b> be called by the user.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void MEMS_Init(void)\r
+{\r
+   SPI_InitTypeDef  SPI_InitStructure;\r
+   GPIO_InitTypeDef GPIO_InitStructure;\r
+\r
+   /* Configure PC6 and PC7 as Output push-pull For MEMS*/\r
+   GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_6 | GPIO_Pin_7;\r
+   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;\r
+   GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP;\r
+\r
+   GPIO_Init( GPIOC, &GPIO_InitStructure );\r
+\r
+   /* Enable SPI2 and GPIOA clocks */\r
+   RCC_APB1PeriphClockCmd( RCC_APB1Periph_SPI2,  ENABLE );\r
+   RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE );\r
+   RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOD, ENABLE );\r
+\r
+   /* Configure SPI2 pins: SCK, MISO and MOSI */\r
+   GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;\r
+   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;\r
+   GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF_PP;\r
+\r
+   GPIO_Init( GPIOB, &GPIO_InitStructure );\r
+\r
+   /* Configure PD2 as Output push-pull, used as MEMS Chip select */\r
+   GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_2;\r
+   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;\r
+   GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP;\r
+\r
+   GPIO_Init( GPIOD, &GPIO_InitStructure );\r
+\r
+   /* SPI2 configuration */\r
+   SPI_InitStructure.SPI_Direction           = SPI_Direction_2Lines_FullDuplex;\r
+   SPI_InitStructure.SPI_Mode                = SPI_Mode_Master;\r
+   SPI_InitStructure.SPI_DataSize            = SPI_DataSize_8b;\r
+   SPI_InitStructure.SPI_CPOL                = SPI_CPOL_High;\r
+   SPI_InitStructure.SPI_CPHA                = SPI_CPHA_2Edge;\r
+   SPI_InitStructure.SPI_NSS                 = SPI_NSS_Soft;\r
+   SPI_InitStructure.SPI_BaudRatePrescaler   = SPI_BaudRatePrescaler_256;\r
+   SPI_InitStructure.SPI_FirstBit            = SPI_FirstBit_MSB;\r
+   SPI_InitStructure.SPI_CRCPolynomial       = 7;\r
+\r
+   SPI_Init( SPI2, &SPI_InitStructure );\r
+\r
+   /* Enable SPI2  */\r
+   SPI_Cmd( SPI2, ENABLE );\r
+\r
+   if( MEMS_ReadID() != 0x3A )\r
+      {\r
+      int i;\r
+\r
+      // Try to resynchronize\r
+      for( i = 0 ; i < 17 ; i++ )\r
+         {\r
+         /* Configure SPI2 pins: SCK, MISO and MOSI */\r
+         GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_13 | GPIO_Pin_15;\r
+         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;\r
+         GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP;\r
+\r
+         GPIO_Init( GPIOB, &GPIO_InitStructure );\r
+         GPIO_WriteBit( GPIOB, GPIO_Pin_15, HIGH );\r
+         MEMS_ChipSelect( LOW );\r
+\r
+         GPIO_WriteBit( GPIOB, GPIO_Pin_13, LOW );\r
+         GPIO_WriteBit( GPIOB, GPIO_Pin_13, HIGH );\r
+         MEMS_ChipSelect( HIGH );\r
+\r
+         /* Configure again PB. SCK as SPI2 pin */\r
+         GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_13 | GPIO_Pin_15;\r
+         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;\r
+         GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF_PP;\r
+\r
+         GPIO_Init( GPIOB, &GPIO_InitStructure );\r
+         if ( MEMS_ReadID() == 0x3A )\r
+            {\r
+            break;\r
+            }\r
+         }\r
+\r
+      if( i == 17 )\r
+         {\r
+         DRAW_DisplayString( 1, 50, "Test MEM ID Failed", 17 );\r
+         }\r
+      }\r
+\r
+   /* Read for the first time */\r
+   N_filtering = 0;\r
+\r
+   MEMS_ReadOutXY();\r
+\r
+   MEMS_Info.OutX_F4 = MEMS_Info.OutX_F16 = MEMS_Info.OutX_F64 = MEMS_Info.OutX_F256 = MEMS_Info.OutX;\r
+   MEMS_Info.OutY_F4 = MEMS_Info.OutY_F16 = MEMS_Info.OutY_F64 = MEMS_Info.OutY_F256 = MEMS_Info.OutY;\r
+   MEMS_Info.OutZ_F4 = MEMS_Info.OutZ_F16 = MEMS_Info.OutZ_F64 = MEMS_Info.OutZ_F256 = MEMS_Info.OutZ;\r
+\r
+   /* Init X and Y*/\r
+   MEMS_GetPosition( &XInit, &YInit );\r
+\r
+   /* Wake Up Mems*/\r
+   MEMS_WakeUp();\r
+}\r
+\r
+/*******************************************************************************\r
+*\r
+*                                MEMS_Handler\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Called by the CircleOS scheduler to manage the MEMS. The Circle beeps if the\r
+*  MEMS is shocked.\r
+*\r
+*  @attention  This function must <b>NOT</b> be called by the user.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void MEMS_Handler( void )\r
+   {\r
+   char buffer [20];\r
+   int  i;\r
+   int  ofs_disp = 0;\r
+\r
+   if( StartingFromResetOrShockCounter )\r
+      {\r
+      StartingFromResetOrShockCounter--;\r
+      }\r
+   TimeCounterForDoubleClick++;\r
+\r
+   MEMS_ReadOutXY();\r
+\r
+   // Evaluate gradients\r
+   GradX = ( MEMS_Info.OutX_F4 >> 2 ) - MEMS_Info.OutX;\r
+   GradY = ( MEMS_Info.OutY_F4 >> 2 ) - MEMS_Info.OutY;\r
+   GradZ = ( MEMS_Info.OutZ_F4 >> 2 ) - MEMS_Info.OutZ;\r
+\r
+   // Decide whether a direction is selected\r
+   if( tMovePtrX == 0 )\r
+      {\r
+      if( ( GradX > MIN_REACT ) || ( GradX < -MIN_REACT ) )\r
+         {\r
+         iMovePtrX = GradX / DIV_REACT; \r
+         tMovePtrX = DELAY_REACT;\r
+         fMovePtrX = 1;\r
+         }\r
+      }\r
+   else\r
+      {\r
+      tMovePtrX--;\r
+      }\r
+\r
+   if( tMovePtrY == 0 )\r
+      {\r
+      if( ( GradY > MIN_REACT ) || ( GradY < -MIN_REACT ) )\r
+         {\r
+         iMovePtrY = GradY / DIV_REACT;   //FL071012 rrm fix\r
+         tMovePtrY = DELAY_REACT;\r
+         fMovePtrY = 1;\r
+         }\r
+      }\r
+   else\r
+      {\r
+      tMovePtrY--;\r
+      }\r
+\r
+   if( tMovePtrZ==0 )\r
+      {\r
+      if( ( GradZ > MIN_REACT ) || ( GradY < -MIN_REACT ) )\r
+         {\r
+         iMovePtrZ = GradZ / DIV_REACT;\r
+         tMovePtrZ = DELAY_REACT;\r
+         fMovePtrZ = 1;\r
+         }\r
+      }\r
+   else\r
+      {\r
+      tMovePtrZ--;\r
+      }\r
+\r
+   Gradient2 = (s32)GradX * (s32)GradX + (s32)GradY * (s32)GradY + (s32)GradZ * (s32)GradZ;\r
+\r
+   // MEMS is shocked, let's beep!\r
+   if( ( Gradient2 > GRAD_SHOCK ) && ( BUZZER_GetMode() == BUZZER_OFF ) && ( StartingFromResetOrShockCounter == 0 ) )\r
+      {\r
+      MEMS_Info.Shocked++;\r
+/*FL071007       = 1;\r
+      Suggested by Bob Seabrook:  a further posiblity is to increment Shocked rather than just setting it\r
+      So it can still be tested for non zero as before but one can  get more\r
+      info from the int without extra cost. */\r
+\r
+#define DELAY_BETWEEN_TWO_SHOCK      20\r
+#define MAX_DELAY_FOR_DOUBLECLICK    150\r
+      StartingFromResetOrShockCounter  = DELAY_BETWEEN_TWO_SHOCK; //< filter: short delay before detecting the next shock\r
+      if ( (TimeCounterForDoubleClick - TimeLastShock) < MAX_DELAY_FOR_DOUBLECLICK )\r
+         {\r
+         MEMS_Info.DoubleClick++;\r
+         TimeLastShock = 0;\r
+         }\r
+      else\r
+         {\r
+         TimeLastShock = TimeCounterForDoubleClick;\r
+         }    \r
+      BUZZER_SetMode( BUZZER_SHORTBEEP );\r
+      }\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                MEMS_ReadID\r
+*\r
+*******************************************************************************/\r
+/**\r
+*  Reads SPI chip identification.\r
+*\r
+*  @return The SPI chip identification.\r
+*\r
+**/\r
+/******************************************************************************/\r
+u8 MEMS_ReadID( void )\r
+   {\r
+   u8 Temp = 0;\r
+\r
+   /* Chip Select low */\r
+   MEMS_ChipSelect( LOW );\r
+\r
+   /* Send "RDID" instruction */\r
+   MEMS_SendByte( RDID );\r
+\r
+   /* Read a byte from the MEMS */\r
+   Temp = MEMS_SendByte( DUMMY_BYTE );\r
+\r
+   /* Chip Select low */\r
+   MEMS_ChipSelect( HIGH );\r
+\r
+   return Temp;\r
+   }\r
+\r
+/// @endcond\r
+\r
+/* Public functions ----------------------------------------------------------*/\r
+\r
+/*******************************************************************************\r
+*\r
+*                                MEMS_GetPosition\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Returns the current (relative) position of the Primer.\r
+*  Only X-Y axis are considered here. \r
+*\r
+*  @param[out] pX    Current horizontal coordinate.\r
+*  @param[out] pY    Current vertical coordinate.\r
+*\r
+*  @warning    The (0x0) point in on the low left corner.\r
+*  @note       For absolute position information use MEMS_GetInfo()\r
+*\r
+**/\r
+/******************************************************************************/\r
+void MEMS_GetPosition( s16* pX, s16* pY )\r
+   {\r
+   *pX = MEMS_Info.OutX - XInit;\r
+   *pY = MEMS_Info.OutY - YInit;\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                MEMS_GetRotation\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Returns current screen orientation.\r
+*\r
+*  @param[out]  pH12 Current screen orientation.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void MEMS_GetRotation( Rotate_H12_V_Match_TypeDef* pH12 )\r
+   {\r
+   s16 sX = MEMS_Info.OutX;\r
+   s16 sY = MEMS_Info.OutY;\r
+\r
+   if( ( ( sX <= -MARGIN ) && ( sY <= 0 ) && (sX<=sY ) ) || \r
+       ( ( sX <=- MARGIN ) && ( sY > 0) && (sX <= (-sY ) ) ) )\r
+      {\r
+      // 1st case: x<0, |x|>y => H12 = V9\r
+      *pH12 = V9;\r
+      }\r
+   else if( ( ( sY <= -MARGIN ) && ( sX <= 0 ) && ( sY <= sX ) ) ||\r
+            ( ( sY <= -MARGIN ) && ( sX > 0 ) && ( sY <= (-sX ) ) ) ) \r
+      {\r
+      // 2nd case: y<0, |y|>x => H12 = V12\r
+      *pH12 = V12;\r
+      }\r
+   else if( ( ( sX >= MARGIN ) && ( sY <= 0 ) && ( sX >= (-sY) ) ) || \r
+            ( ( sX >= MARGIN ) && ( sY > 0 ) && ( sX >= sY ) ) )\r
+      {\r
+      // 3rd case: x>0, |x|>y => H12=V3\r
+      *pH12 = V3;\r
+      }\r
+   else if( ( ( sY >= MARGIN ) && ( sX <= 0 ) && ( sY >= (-sX ) ) ) ||\r
+            ( ( sY >= MARGIN ) && ( sX > 0 ) && ( sY >= sX ) ) )\r
+      {\r
+      // 4th case: y>0,  |y|>x => H12=V6\r
+      *pH12 = V6;\r
+      }\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                MEMS_SetNeutral\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Set current position as "neutral position".\r
+*\r
+**/\r
+/******************************************************************************/\r
+void MEMS_SetNeutral( void )\r
+   {\r
+   // Set Neutral position.\r
+   MEMS_GetPosition( &XInit, &YInit );\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                MEMS_GetInfo\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Return the current MEMS information (state, absolute position...).\r
+*\r
+*  @return  a pointer to tMEMS_Info\r
+*\r
+**/\r
+/******************************************************************************/\r
+tMEMS_Info* MEMS_GetInfo( void )\r
+   {\r
+   return &MEMS_Info;\r
+   }\r
diff --git a/Demo/CORTEX_STM32F103_Primer_GCC/ST_Code/pointer.c b/Demo/CORTEX_STM32F103_Primer_GCC/ST_Code/pointer.c
new file mode 100644 (file)
index 0000000..02fe983
--- /dev/null
@@ -0,0 +1,901 @@
+/********************* (C) COPYRIGHT 2007 RAISONANCE S.A.S. *******************/\r
+/**\r
+*\r
+* @file     pointer.c\r
+* @brief    Various utilities for the pointer management for STM32-primer.\r
+* @author   FL\r
+* @date     07/2007\r
+* @version  1.1\r
+* @date     10/2007\r
+* @version  1.5 various corrections reported by Ron Miller to suppress jittery\r
+*\r
+*\r
+**/\r
+/******************************************************************************/\r
+\r
+/* Includes ------------------------------------------------------------------*/\r
+#include "circle.h"\r
+\r
+/// @cond Internal\r
+\r
+/* Private define ------------------------------------------------------------*/\r
+#define POS_MIN                     0\r
+#define POS_MAX                     (SCREEN_WIDTH - POINTER_WIDTH - 1)\r
+#define POINTER_DIVIDER             50\r
+#define POINTER_DEFAULT_COLOR       RGB_BLUE\r
+\r
+// defines for pointer move\r
+#define ANGLEPAUSE                  500 \r
+#define DEFAULT_ANGLESTART          25\r
+#define MIN_ANGLE_FOR_SHIFT_UP      (ANGLEPAUSE+CurrentAngleStart)\r
+#define MIN_ANGLE_FOR_SHIFT_DOWN    (ANGLEPAUSE-CurrentAngleStart)\r
+#define MIN_ANGLE_FOR_SHIFT_RIGHT   (signed)(0+CurrentAngleStart)\r
+#define MIN_ANGLE_FOR_SHIFT_LEFT    (signed)(0-CurrentAngleStart)\r
+#define DEFAULT_SPEED_ON_ANGLE      60\r
+\r
+/* Private variables ---------------------------------------------------------*/\r
+static int           divider                          = 0;\r
+\r
+unsigned char        BallPointerBmp[ POINTER_WIDTH ]  = { 0x38, 0x7C, 0xFF, 0xFF, 0xFF, 0x7C, 0x38 } ;\r
+unsigned char        locbuf[ POINTER_WIDTH ];\r
+unsigned char        DefaultAreaStore[ 2 * POINTER_WIDTH * POINTER_WIDTH ];\r
+\r
+// Variables for pointer.\r
+u8*                  CurrentPointerBmp                = 0;\r
+u8                   CurrentPointerWidth              = 0;\r
+u8                   CurrentPointerHeight             = 0;\r
+u16                  CurrentSpeedOnAngle              = DEFAULT_SPEED_ON_ANGLE;\r
+u32                  CurrentAngleStart                = DEFAULT_ANGLESTART  ;\r
+unsigned char*       ptrAreaStore                     = DefaultAreaStore;\r
+u16                  CurrentPointerColor              = POINTER_DEFAULT_COLOR;\r
+enum POINTER_mode    Pointer_Mode                     = POINTER_UNDEF;\r
+enum POINTER_state   Pointer_State                    = POINTER_S_UNDEF;\r
+\r
+s16                  OUT_X;\r
+s16                  OUT_Y;\r
+\r
+// Init pointer Info Structure (structure definition in circle.h)\r
+tPointer_Info POINTER_Info = {\r
+         SCREEN_WIDTH - POINTER_WIDTH / 2,\r
+         SCREEN_WIDTH - POINTER_WIDTH / 2,\r
+         0,\r
+         0} ;\r
+\r
+/* Private function prototypes -----------------------------------------------*/\r
+static int   POINTER_Move ( void );\r
+\r
+/* Private functions ---------------------------------------------------------*/\r
+\r
+/*******************************************************************************\r
+*\r
+*                                Pointer_Move\r
+*\r
+*******************************************************************************/\r
+/**\r
+*  Moves LCD pointer according to Mems indications.\r
+*\r
+*  @retval  0  The pointer resides in the screen\r
+*  @retval  -1 The pointer touche the screen edges.\r
+*\r
+**/\r
+/******************************************************************************/\r
+static int POINTER_Move( void )\r
+   {\r
+   int res                    = 0;\r
+   s16 oldPointer_xPos        = POINTER_Info.xPos;\r
+   s16 oldPointer_yPos        = POINTER_Info.yPos;\r
+   s16 unmodied_shift_PosX;\r
+   s16 unmodied_shift_PosY;\r
+   signed outx                = MEMS_Info.OutX_F16 >> 4;\r
+   signed outy                = MEMS_Info.OutY_F16 >> 4;\r
+\r
+   POINTER_Info.shift_PosX  =  POINTER_Info.shift_PosY  = 0;\r
+\r
+   // The move depends on the screen orientation\r
+   switch( LCD_GetScreenOrientation() )\r
+      {\r
+      // north\r
+      case V12 :\r
+         MEMS_Info.RELATIVE_X = outx;\r
+         MEMS_Info.RELATIVE_Y = outy;\r
+\r
+         if( outx > MIN_ANGLE_FOR_SHIFT_RIGHT )\r
+            {\r
+            POINTER_Info.shift_PosX = ( outx - MIN_ANGLE_FOR_SHIFT_RIGHT );\r
+            }\r
+         else if( outx < MIN_ANGLE_FOR_SHIFT_LEFT )\r
+            {\r
+            POINTER_Info.shift_PosX  = ( outx - MIN_ANGLE_FOR_SHIFT_LEFT );\r
+            }               \r
+\r
+         if( outy < -MIN_ANGLE_FOR_SHIFT_UP )\r
+            {\r
+            POINTER_Info.shift_PosY = ( outy + MIN_ANGLE_FOR_SHIFT_UP  );\r
+            }\r
+         else if( outy > -MIN_ANGLE_FOR_SHIFT_DOWN )\r
+            {\r
+            POINTER_Info.shift_PosY = ( outy + MIN_ANGLE_FOR_SHIFT_DOWN );\r
+            }\r
+         break;\r
+\r
+      // West\r
+      case V9 :   \r
+         MEMS_Info.RELATIVE_X = -( outy );\r
+         MEMS_Info.RELATIVE_Y = outx;\r
+\r
+         if( outy > MIN_ANGLE_FOR_SHIFT_RIGHT )\r
+            {\r
+            POINTER_Info.shift_PosX = -( outy - MIN_ANGLE_FOR_SHIFT_RIGHT );\r
+            }\r
+         else if( outy < MIN_ANGLE_FOR_SHIFT_LEFT )\r
+            {\r
+            POINTER_Info.shift_PosX = -( outy - MIN_ANGLE_FOR_SHIFT_LEFT );\r
+            }\r
+\r
+         if( outx < -MIN_ANGLE_FOR_SHIFT_UP )\r
+            {\r
+            POINTER_Info.shift_PosY = ( outx + MIN_ANGLE_FOR_SHIFT_UP );\r
+            }\r
+         else if( outx > -MIN_ANGLE_FOR_SHIFT_DOWN )\r
+            {\r
+            POINTER_Info.shift_PosY = ( outx + MIN_ANGLE_FOR_SHIFT_DOWN );\r
+            }\r
+         break;\r
+\r
+      // South\r
+      case V6 :   \r
+         MEMS_Info.RELATIVE_X = -( outx );\r
+         MEMS_Info.RELATIVE_Y = -( outy );\r
+\r
+         if( outx > MIN_ANGLE_FOR_SHIFT_RIGHT )\r
+            {\r
+            POINTER_Info.shift_PosX = ( MIN_ANGLE_FOR_SHIFT_RIGHT - outx );\r
+            }\r
+         else if( outx < MIN_ANGLE_FOR_SHIFT_LEFT )\r
+            {\r
+            POINTER_Info.shift_PosX = ( MIN_ANGLE_FOR_SHIFT_LEFT - outx );\r
+            }\r
+\r
+         if( outy > MIN_ANGLE_FOR_SHIFT_UP )\r
+            {\r
+            POINTER_Info.shift_PosY = -( outy - MIN_ANGLE_FOR_SHIFT_UP );\r
+            }\r
+         else if( outy < MIN_ANGLE_FOR_SHIFT_DOWN )\r
+            {\r
+            POINTER_Info.shift_PosY = +( MIN_ANGLE_FOR_SHIFT_DOWN - outy );\r
+            }\r
+         break;\r
+\r
+      // East\r
+      case V3 :   \r
+         MEMS_Info.RELATIVE_X = outy;\r
+         MEMS_Info.RELATIVE_Y = -( outx );\r
+\r
+         if( outy > MIN_ANGLE_FOR_SHIFT_RIGHT )\r
+            {\r
+            POINTER_Info.shift_PosX = ( outy - MIN_ANGLE_FOR_SHIFT_RIGHT );\r
+            }\r
+         else if( outy < MIN_ANGLE_FOR_SHIFT_LEFT )\r
+            {\r
+            POINTER_Info.shift_PosX = ( outy - MIN_ANGLE_FOR_SHIFT_LEFT );\r
+            }\r
+\r
+         if( outx > MIN_ANGLE_FOR_SHIFT_UP )\r
+            {\r
+            POINTER_Info.shift_PosY = ( MIN_ANGLE_FOR_SHIFT_UP - outx);\r
+            }\r
+         else if( outx < MIN_ANGLE_FOR_SHIFT_DOWN )\r
+            {\r
+            POINTER_Info.shift_PosY = ( MIN_ANGLE_FOR_SHIFT_DOWN - outx );\r
+            }\r
+\r
+      default :\r
+         break;\r
+      }\r
+\r
+   unmodied_shift_PosX = POINTER_Info.shift_PosX;\r
+   unmodied_shift_PosY = POINTER_Info.shift_PosY;\r
+\r
+   POINTER_Info.shift_PosX /= CurrentSpeedOnAngle;\r
+   POINTER_Info.shift_PosY /= CurrentSpeedOnAngle;\r
+\r
+   if( Pointer_Mode == POINTER_APPLICATION )\r
+      {\r
+      if ( Application_Pointer_Mgr )\r
+         {\r
+         Application_Pointer_Mgr( POINTER_Info.shift_PosX, POINTER_Info.shift_PosY );\r
+         }\r
+\r
+      return 0;\r
+      }\r
+\r
+   POINTER_Info.xPos += POINTER_Info.shift_PosX;\r
+   POINTER_Info.yPos += POINTER_Info.shift_PosY;\r
+\r
+   if( POINTER_Info.xPos < POINTER_Info.X_PosMin )\r
+      {\r
+      POINTER_Info.xPos = POINTER_Info.X_PosMin;\r
+      }\r
+\r
+   if( POINTER_Info.xPos > POINTER_Info.X_PosMax )\r
+      {\r
+      POINTER_Info.xPos = POINTER_Info.X_PosMax;\r
+      }\r
+\r
+   if( POINTER_Info.yPos < POINTER_Info.Y_PosMin )\r
+      {\r
+      POINTER_Info.yPos = POINTER_Info.Y_PosMin;\r
+      }\r
+\r
+   if( POINTER_Info.yPos > POINTER_Info.Y_PosMax )\r
+      {\r
+      POINTER_Info.yPos = POINTER_Info.Y_PosMax;\r
+      }\r
+\r
+   if( ( Pointer_Mode != POINTER_MENU ) && ( Pointer_Mode != POINTER_RESTORE_LESS ) &&\r
+       ( ( oldPointer_xPos != POINTER_Info.xPos ) || ( oldPointer_yPos != POINTER_Info.yPos ) )  )\r
+      {\r
+      // Use default area.\r
+      POINTER_SetCurrentAreaStore( 0 );\r
+\r
+      // Restore previously drawn area.\r
+      POINTER_Restore( oldPointer_xPos, oldPointer_yPos, POINTER_WIDTH, POINTER_WIDTH );\r
+\r
+      // Save new area and draw pointer\r
+      POINTER_Save( POINTER_Info.xPos, POINTER_Info.yPos, POINTER_WIDTH, POINTER_WIDTH );\r
+      POINTER_Draw( POINTER_Info.xPos, POINTER_Info.yPos, POINTER_WIDTH, POINTER_WIDTH, CurrentPointerBmp );\r
+      }\r
+\r
+   if( ( Pointer_Mode == POINTER_RESTORE_LESS ) &&\r
+       ( ( oldPointer_xPos != POINTER_Info.xPos ) || ( oldPointer_yPos != POINTER_Info.yPos ) )  )\r
+      {\r
+      // Use default area.\r
+      POINTER_SetCurrentAreaStore( 0 );\r
+\r
+      // Restore previously drawn area.\r
+      POINTER_Restore( oldPointer_xPos, oldPointer_yPos, CurrentPointerWidth, CurrentPointerHeight );\r
+\r
+      // Save new area and draw pointer\r
+      POINTER_Save( POINTER_Info.xPos, POINTER_Info.yPos, CurrentPointerWidth, CurrentPointerHeight );\r
+      POINTER_Draw( POINTER_Info.xPos, POINTER_Info.yPos, CurrentPointerWidth, CurrentPointerHeight, CurrentPointerBmp );\r
+      }\r
+\r
+   // Is the pointer touching one edge of the screen ?\r
+   if( ( POINTER_Info.xPos == POS_MIN ) || ( POINTER_Info.yPos == POS_MIN ) ||\r
+       ( POINTER_Info.xPos == POS_MAX ) || ( POINTER_Info.yPos == POS_MAX ) )\r
+      {\r
+      res = -1;\r
+      }\r
+\r
+   return res;\r
+   }\r
+\r
+/* Public functions for CircleOS ---------------------------------------------*/\r
+\r
+/*******************************************************************************\r
+*\r
+*                                POINTER_Init\r
+*\r
+*******************************************************************************/\r
+/**\r
+*  Initialize pointer. Called at CircleOS startup. Set default pointer at the\r
+*  middle of the screen and allows it to move into the whole screen.\r
+*\r
+*  @attention  This function must <b>NOT</b> be called by the user.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void POINTER_Init( void )\r
+   {\r
+   // Increase pointer sensibility.\r
+   POINTER_SetCurrentSpeedOnAngle( DEFAULT_SPEED_ON_ANGLE );\r
+   POINTER_SetCurrentAngleStart( DEFAULT_ANGLESTART );\r
+   POINTER_SetCurrentPointer( POINTER_WIDTH, POINTER_WIDTH, BallPointerBmp );\r
+   POINTER_SetMode( POINTER_ON );\r
+   POINTER_SetPos( 56, 56 );\r
+   POINTER_SetRectScreen();\r
+\r
+   CurrentPointerColor = POINTER_DEFAULT_COLOR;\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                POINTER_Handler\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Called by the CircleOS scheduler to manage the pointer.\r
+*\r
+*  @attention  This function must <b>NOT</b> be called by the user.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void POINTER_Handler( void )\r
+   {\r
+   switch( Pointer_Mode )\r
+      {\r
+      // Nothing to do!\r
+      case POINTER_OFF  :\r
+      case POINTER_UNDEF:\r
+         return;\r
+      }\r
+\r
+   // Where is the MEMS ?\r
+   MEMS_GetPosition( &OUT_X, &OUT_Y );\r
+\r
+   POINTER_Move();\r
+   }\r
+\r
+/// @endcond\r
+\r
+/* Public functions ----------------------------------------------------------*/\r
+\r
+/*******************************************************************************\r
+*\r
+*                                POINTER_SetCurrentPointer\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Set the dimension and the bitmap of the pointer.\r
+*  @note The bitmap is a monochrome one!\r
+*\r
+*  @param[in]  width    width of the pointer  (u8)\r
+*  @param[in]  height   height of the pointer (u8)\r
+*  @param[in]  bmp      pointer to an array of width * height bits.\r
+*\r
+**/\r
+/********************************************************************************/\r
+void POINTER_SetCurrentPointer( u8 width, u8 height, u8* bmp )\r
+   {\r
+   if( !bmp )\r
+      {\r
+      bmp = BallPointerBmp;\r
+      }\r
+\r
+   CurrentPointerWidth  = width;\r
+   CurrentPointerHeight = height;\r
+   CurrentPointerBmp    = bmp;\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                POINTER_GetCurrentAngleStart\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Get the current minimal angle to move pointer\r
+*\r
+*  @return  current minimal angle.\r
+*\r
+**/\r
+/******************************************************************************/\r
+u16 POINTER_GetCurrentAngleStart( void )\r
+   {\r
+   return CurrentAngleStart;\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                POINTER_SetCurrentAngleStart\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Set the current minimal angle to move pointer\r
+*\r
+*  @param[in]  newangle The new minimal angle to move pointer.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void POINTER_SetCurrentAngleStart( u16 newangle )\r
+   {\r
+   CurrentAngleStart = newangle;\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                POINTER_GetCurrentSpeedOnAngle\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Return the current speed/angle ratio.\r
+*\r
+*  @return  current ratio.\r
+*\r
+**/\r
+/******************************************************************************/\r
+u16 POINTER_GetCurrentSpeedOnAngle( void )\r
+   {\r
+   return CurrentSpeedOnAngle;\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                POINTER_SetCurrentSpeedOnAngle\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Set the current speed/angle ratio.\r
+*\r
+*  @param[in]  newspeed New speed/angle ratio.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void POINTER_SetCurrentSpeedOnAngle( u16 newspeed )\r
+   {\r
+   CurrentSpeedOnAngle = newspeed;\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                POINTER_SetCurrentAreaStore\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Change the current storage area. If the provided value is NULL, the default\r
+*  storage area will be used.\r
+*\r
+*  @param[in]  ptr New storage area (may be null).\r
+*\r
+*  @warning    Memory space pointed by the provided pointer must be large enough\r
+*              to store a color bitmap corresponding to the pointer area.\r
+*              In other words, space must be width * height * 2 large.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void POINTER_SetCurrentAreaStore( u8* ptr )\r
+   {\r
+   ptrAreaStore = ( ptr == 0 ) ? DefaultAreaStore : ptr;\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                POINTER_SetMode\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Change the current mode of the pointer management.\r
+*\r
+*  @note Must be called only ONCE!!\r
+*\r
+*  @param[in]  mode New pointer management mode.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void POINTER_SetMode( enum POINTER_mode mode )\r
+   {\r
+   u16*  ptr;\r
+   u16   i;\r
+   u16   color;\r
+\r
+   switch( mode )\r
+      {\r
+      case POINTER_APPLICATION:\r
+         ptr   = (u16*)DefaultAreaStore;\r
+         color = DRAW_GetBGndColor();\r
+\r
+         for ( i = 0; i < (CurrentPointerWidth*CurrentPointerHeight) ; i++ )\r
+            {\r
+            *ptr++ = color;\r
+            }\r
+\r
+         POINTER_Draw( POINTER_Info.xPos, POINTER_Info.yPos, CurrentPointerWidth, CurrentPointerHeight, CurrentPointerBmp );\r
+         break;\r
+\r
+      case POINTER_RESTORE_LESS:\r
+         POINTER_Draw( POINTER_Info.xPos, POINTER_Info.yPos, CurrentPointerWidth, CurrentPointerHeight, CurrentPointerBmp );\r
+         break;\r
+\r
+      case POINTER_ON:\r
+         POINTER_SetCurrentAreaStore( 0 );\r
+         POINTER_Save( POINTER_Info.xPos, POINTER_Info.yPos, POINTER_WIDTH, POINTER_WIDTH );\r
+         POINTER_Draw( POINTER_Info.xPos, POINTER_Info.yPos, CurrentPointerWidth, CurrentPointerHeight,CurrentPointerBmp );\r
+         break;\r
+\r
+      case POINTER_OFF:\r
+         POINTER_Info.xPos = ( SCREEN_WIDTH - POINTER_WIDTH ) / 2;\r
+         POINTER_Info.yPos = ( SCREEN_WIDTH - POINTER_WIDTH ) / 2;\r
+\r
+      case POINTER_MENU:\r
+         if( Pointer_Mode == POINTER_ON )\r
+            {\r
+            POINTER_SetCurrentAreaStore( 0 );\r
+            POINTER_Restore( POINTER_Info.xPos, POINTER_Info.yPos, POINTER_WIDTH, POINTER_WIDTH );\r
+            }\r
+         break;\r
+      }\r
+\r
+   Pointer_Mode = mode;\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                POINTER_GetMode\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Return the current mode of the pointer management\r
+*\r
+*  @return  Current pointer management mode.\r
+*\r
+**/\r
+/******************************************************************************/\r
+enum POINTER_mode POINTER_GetMode( void )\r
+   {\r
+   return Pointer_Mode;\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                POINTER_GetState\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Return current pointer state.\r
+*\r
+*  @return  Current pointer state.\r
+*\r
+**/\r
+/******************************************************************************/\r
+enum POINTER_state POINTER_GetState( void )\r
+   {\r
+   return Pointer_State;\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                POINTER_SetRect\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Set new limits for the move of the pointer\r
+*\r
+*  @param[in]  x        Horizontal coordinate of the bottom left corner of the new area.\r
+*  @param[in]  y        Vertical coordinate of the bottom left corner of the new are.\r
+*  @param[in]  width    New area width.\r
+*  @param[in]  height   New area height.\r
+*\r
+*  @warning       The (0x0) point in on the low left corner.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void POINTER_SetRect( s16 x, s16 y, s16 width, s16 height )\r
+   {\r
+   POINTER_Info.X_PosMin = x;\r
+\r
+   if( POINTER_Info.xPos < POINTER_Info.X_PosMin )\r
+      {\r
+      POINTER_Info.xPos = POINTER_Info.X_PosMin;\r
+      }\r
+\r
+   POINTER_Info.X_PosMax = x + width - 1;\r
+\r
+   if( POINTER_Info.xPos > POINTER_Info.X_PosMax )\r
+      {\r
+      POINTER_Info.xPos = POINTER_Info.X_PosMax;\r
+      }\r
+\r
+   POINTER_Info.Y_PosMin = y;\r
+\r
+   if( POINTER_Info.yPos < POINTER_Info.Y_PosMin )\r
+      {\r
+      POINTER_Info.yPos = POINTER_Info.Y_PosMin;\r
+      }\r
+\r
+   POINTER_Info.Y_PosMax = y + height - 1;\r
+\r
+   if( POINTER_Info.yPos > POINTER_Info.Y_PosMax )\r
+      {\r
+      POINTER_Info.yPos = POINTER_Info.Y_PosMax;\r
+      }\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                POINTER_SetRectScreen\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Allow the pointer to move on the whole screen.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void POINTER_SetRectScreen( void )\r
+   {\r
+   POINTER_SetRect( 0, 0, POS_MAX, POS_MAX );\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                POINTER_GetPos\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Return the current position of the pointer (on the screen).\r
+*\r
+*  @return  The current pointer screen position with X in the LSB and Y in the MSB.\r
+*\r
+*  @warning       The (0x0) point in on the low left corner.\r
+**/\r
+/******************************************************************************/\r
+u16 POINTER_GetPos( void )\r
+   {\r
+   return ( POINTER_Info.xPos | ( POINTER_Info.yPos << 8 ) );\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                POINTER_SetPos\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Force the screen position of the pointer.\r
+*\r
+*  @param[in]  x  New horizontal coordinate.\r
+*  @param[in]  y  New vertical coordinate.\r
+*\r
+*  @warning       The (0x0) point in on the low left corner.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void POINTER_SetPos( u16 x, u16 y )\r
+   {\r
+   POINTER_Info.xPos = x;\r
+   POINTER_Info.yPos = y;\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                POINTER_Draw\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Draw pointer.\r
+*\r
+*  @param[in]  x        Horizontal coordinate of the bottom left corner of the pointer.\r
+*  @param[in]  y        Vertical coordinate of the bottom left corner of the pointer.\r
+*  @param[in]  width    Pointer bitmap width.\r
+*  @param[in]  height   Pointer bitmap height.\r
+*  @param[in]  bmp      Pointer to width * height bit array. If null used default\r
+*                       pointer bitmap.\r
+*\r
+*  @note          The provided bitmap is a monochrome one.\r
+*  @warning       The (0x0) point in on the low left corner.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void POINTER_Draw( u8 x, u8 y, u8 width, u8 height, u8* bmp )\r
+   {\r
+   int   i     = 0;\r
+   int   l     = 0;\r
+   int   n     = 0;\r
+   char* ptr   = ptrAreaStore;\r
+   char  c;\r
+   u16   val;\r
+\r
+   // No bitmap provided, use the default one!\r
+   if( bmp == 0 )\r
+      {\r
+      bmp = BallPointerBmp;\r
+      }\r
+\r
+   // Select the screen area were going to take care about!\r
+   LCD_SetRect_For_Cmd( x, y, width, height );\r
+\r
+   // Let draw to the LCD screen.\r
+   LCD_SendLCDCmd( ST7637_RAMWR );\r
+\r
+   while( n < ( width * height ) )\r
+      {\r
+      if( Pointer_Mode != POINTER_RESTORE_LESS )\r
+         {\r
+         // Draw pixel using current storage area data for background pixels.\r
+         c = *ptr++;\r
+         LCD_SendLCDData( ( bmp[ l + ( i / 8 ) ] & ( 1 << ( 7 - ( i % 8 ) ) ) ) ? ( POINTER_GetColor() & 255 ) : c );\r
+\r
+         c = *ptr++;\r
+         LCD_SendLCDData( ( bmp[ l + ( i / 8 ) ] & ( 1 << ( 7 - ( i % 8 ) ) ) ) ? ( POINTER_GetColor() >> 8 )  : c );\r
+         }\r
+      else\r
+         {\r
+         // POINTER_RESTORE_LESS: use current background color for background color.\r
+         c = DRAW_GetBGndColor();\r
+         val = ( bmp[ l + ( i / 8 ) ] & ( 1 << ( 7 - ( i % 8 ) ) ) ) ? POINTER_GetColor() : c;\r
+\r
+         LCD_SendLCDData( val & 255 );\r
+         LCD_SendLCDData( val >> 8 );\r
+         }\r
+\r
+      n++;\r
+\r
+      i++;\r
+\r
+      // End of line ?\r
+      if( i == width )\r
+         {\r
+         // Next line!\r
+         l++;\r
+         i=0;\r
+         }\r
+      }\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                POINTER_Save\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Save the background of the pointer.\r
+*\r
+*  @param[in]  x        Horizontal coordinate of the bottom left corner of the area to save.\r
+*  @param[in]  y        Vertical coordinate of the bottom left corner of the area to save.\r
+*  @param[in]  width    Width of the area to save.\r
+*  @param[in]  height   Height of the area to save.\r
+*\r
+*  @note          The store area must be large enough to store all the pixels (16 bits).\r
+*  @warning       The (0x0) point in on the low left corner.\r
+*  @see  POINTER_Restore\r
+*  @see  POINTER_SetCurrentAreaStore\r
+*\r
+**/\r
+/******************************************************************************/\r
+void POINTER_Save( u8 x, u8 y, u8 width, u8 height )\r
+   {\r
+   int   i;\r
+   char* ptr      = ptrAreaStore;\r
+   int   bytesize = ( width * height ) * 2;                // 2 bytes per pixel.\r
+\r
+   // Is this pointer management mode, don't save pointer background!\r
+   if( Pointer_Mode == POINTER_RESTORE_LESS )\r
+      {\r
+      return;\r
+      }\r
+\r
+   // Select the LCD screen area to read.\r
+   LCD_SetRect_For_Cmd ( x, y, width, height );\r
+\r
+   // Send the memory read command to the LCD controller.\r
+   LCD_SendLCDCmd( ST7637_RAMRD );\r
+\r
+   // First returned byte is a dummy!\r
+   LCD_ReadLCDData();\r
+\r
+   for( i = 0; i < bytesize; i++ )\r
+      {\r
+      *ptr++ = LCD_ReadLCDData();\r
+      }\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                POINTER_Restore\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Restore the background of the pointer with data saved in the current store area.\r
+*\r
+*  @param[in]  x        Horizontal coordinate of the bottom left corner of the area to restore.\r
+*  @param[in]  y        Vertical coordinate of the bottom left corner of the area to restore.\r
+*  @param[in]  width    Width of the area to restore.\r
+*  @param[in]  height   Height of the area to restore.\r
+*\r
+*  @warning       The (0x0) point in on the low left corner.\r
+*  @see  POINTER_Save\r
+*  @see  POINTER_SetCurrentAreaStore\r
+*\r
+**/\r
+/******************************************************************************/\r
+void POINTER_Restore( u8 x, u8 y, u8 width, u8 height )\r
+   {\r
+   int   i;\r
+   char* ptr      = ptrAreaStore;\r
+   int   bytesize = ( width * height ) * 2;                // 2 bytes per pixel.\r
+\r
+   // Select the screen area to write.\r
+   LCD_SetRect_For_Cmd( x, y, width, height );\r
+\r
+   // Send the memory write command to the LCD controller.\r
+   LCD_SendLCDCmd( ST7637_RAMWR );\r
+\r
+   for( i = 0; i < bytesize; i++ )\r
+      {\r
+      // In this mode, use background color (no data was previously saved).\r
+      if ( Pointer_Mode == POINTER_RESTORE_LESS )\r
+         {\r
+         LCD_SendLCDData( DRAW_GetBGndColor() );\r
+         }\r
+      else\r
+         {\r
+         LCD_SendLCDData( *ptr++ );\r
+         }\r
+      }\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                POINTER_SetApplication_Pointer_Mgr\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Provides an user defined pointer manager.\r
+*\r
+*  @param[in]  mgr Pointer to the user defined pointer manager.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void POINTER_SetApplication_Pointer_Mgr( tAppPtrMgr mgr )\r
+   {\r
+   Application_Pointer_Mgr = mgr;\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                POINTER_SetColor\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Set the pointer color.\r
+*\r
+*  @param[in]  color The new pointer color.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void POINTER_SetColor( u16 color )\r
+   {\r
+   CurrentPointerColor = color;\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                POINTER_GetColor\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Return the current pointer color.\r
+*\r
+*  @return  Current pointer color.\r
+*\r
+**/\r
+/******************************************************************************/\r
+u16 POINTER_GetColor( void )\r
+   {\r
+   return CurrentPointerColor;\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                POINTER_GetInfo\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Get pointer informations.\r
+*\r
+*  @return  A pointer to a pointer information structure.\r
+*\r
+**/\r
+/******************************************************************************/\r
+tPointer_Info* POINTER_GetInfo( void )\r
+   {\r
+   return &POINTER_Info;\r
+   }\r
diff --git a/Demo/CORTEX_STM32F103_Primer_GCC/ST_Code/scheduler.h b/Demo/CORTEX_STM32F103_Primer_GCC/ST_Code/scheduler.h
new file mode 100644 (file)
index 0000000..11c7e67
--- /dev/null
@@ -0,0 +1,81 @@
+/********************* (C) COPYRIGHT 2007 RAISONANCE S.A.S. *******************/\r
+/**\r
+*\r
+* @file     scheduler.h\r
+* @brief    Header file for the SysTick interrupt handler of the CircleOS project.\r
+* @author   FL\r
+* @author   IB\r
+* @date     07/2007\r
+*\r
+**/\r
+/******************************************************************************/\r
+\r
+/* Define to prevent recursive inclusion -------------------------------------*/\r
+#ifndef __STM32F10x_IT_H\r
+#define __STM32F10x_IT_H\r
+\r
+/* Includes ------------------------------------------------------------------*/\r
+#include "stm32f10x_lib.h"\r
+\r
+void NMIException( void );\r
+void HardFaultException( void );\r
+void MemManageException( void );\r
+void BusFaultException( void );\r
+void UsageFaultException( void );\r
+void DebugMonitor( void );\r
+void SVCHandler( void );\r
+void PendSVC( void );\r
+void SysTickHandler( void );\r
+void WWDG_IRQHandler( void );\r
+void PVD_IRQHandler( void );\r
+void TAMPER_IRQHandler( void );\r
+void RTC_IRQHandler( void );\r
+void FLASH_IRQHandler( void );\r
+void RCC_IRQHandler( void );\r
+void EXTI0_IRQHandler( void );\r
+void EXTI1_IRQHandler( void );\r
+void EXTI2_IRQHandler( void );\r
+void EXTI3_IRQHandler( void );\r
+void EXTI4_IRQHandler( void );\r
+void DMAChannel1_IRQHandler( void );\r
+void DMAChannel2_IRQHandler( void );\r
+void DMAChannel3_IRQHandler( void );\r
+void DMAChannel4_IRQHandler( void );\r
+void DMAChannel5_IRQHandler( void );\r
+void DMAChannel6_IRQHandler( void );\r
+void DMAChannel7_IRQHandler( void );\r
+void ADC_IRQHandler( void );\r
+void USB_HP_CAN_TX_IRQHandler( void );\r
+void USB_LP_CAN_RX0_IRQHandler( void );\r
+void CAN_RX1_IRQHandler( void );\r
+void CAN_SCE_IRQHandler( void );\r
+void EXTI9_5_IRQHandler( void );\r
+void TIM1_BRK_IRQHandler( void );\r
+void TIM1_UP_IRQHandler( void );\r
+void TIM1_TRG_CCUP_IRQHandler( void );\r
+void TIM1_CC_IRQHandler( void );\r
+void TIM2_IRQHandler( void );\r
+void TIM3_IRQHandler( void );\r
+void TIM4_IRQHandler( void );\r
+void I2C1_EV_IRQHandler( void );\r
+void I2C1_ER_IRQHandler( void );\r
+void I2C2_EV_IRQHandler( void );\r
+void I2C2_ER_IRQHandler( void );\r
+void SPI1_IRQHandler( void );\r
+void SPI2_IRQHandler( void );\r
+void USART1_IRQHandler( void );\r
+void USART2_IRQHandler( void );\r
+void USART3_IRQHandler( void );\r
+void EXTI15_10_IRQHandler( void );\r
+void RTCAlarm_IRQHandler( void );\r
+void USBWakeUp_IRQHandler( void );\r
+\r
+//FL071107 Make the scheduler configurable. The handler are inserted into a list that could\r
+//be modified by the applications.\r
+typedef void  (*tHandler)    ( void );\r
+extern tHandler SchHandler [16+1];\r
+#define SCH_HDL_MAX   ( sizeof SchHandler / sizeof (tHandler) )\r
+\r
+\r
+                                        \r
+#endif /* __STM32F10x_IT_H */\r
diff --git a/Demo/CORTEX_STM32F103_Primer_GCC/ST_Code/stm32f10x_circle_it.c b/Demo/CORTEX_STM32F103_Primer_GCC/ST_Code/stm32f10x_circle_it.c
new file mode 100644 (file)
index 0000000..a656d68
--- /dev/null
@@ -0,0 +1,217 @@
+/********************* (C) COPYRIGHT 2007 RAISONANCE S.A.S. *******************/\r
+/**\r
+*\r
+* @file     stm32f10x_circle_it.c\r
+* @brief    Interrupt handler for the CircleOS project.\r
+* @author   FL\r
+* @author   IB\r
+* @date     07/2007\r
+*\r
+**/\r
+/******************************************************************************/\r
+\r
+/* Includes ------------------------------------------------------------------*/\r
+#include "circle.h"\r
+\r
+/* External variables --------------------------------------------------------*/\r
+extern u16 CCR_Val;\r
+extern u16 Current_CCR_BackLightStart;\r
+\r
+/*******************************************************************************\r
+*\r
+*                                NMIException\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Handles the NMI exception.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void NMIException( void ) {}\r
+\r
+/*******************************************************************************\r
+*\r
+*                                HardFaultException\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Handles the Hard Fault exception.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void HardFaultException( void ) \r
+   {\r
+   #ifdef TIMING_ANALYSIS     //to debug with a scope\r
+   GPIO_WriteBit( GPIOA, GPIO_Pin_5, Bit_RESET );  \r
+   GPIO_WriteBit( GPIOA, GPIO_Pin_5, Bit_SET );    \r
+   #endif\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                MemManageException\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Handles the Memory Manage exception.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void MemManageException( void ) {}\r
+\r
+/*******************************************************************************\r
+*\r
+*                                BusFaultException\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Handles the Bus Fault exception.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void BusFaultException( void ) {}\r
+\r
+/*******************************************************************************\r
+*\r
+*                                UsageFaultException\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Handles the Usage Fault exception.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void UsageFaultException( void ) {}\r
+\r
+/*******************************************************************************\r
+*\r
+*                                DebugMonitor\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Handles the  Debug Monitor exception.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void DebugMonitor( void ) {}\r
+\r
+/*******************************************************************************\r
+*\r
+*                                SVCHandler\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Handles the SVCall exception.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void SVCHandler( void ) {}\r
+\r
+/*******************************************************************************\r
+*\r
+*                                PendSVC\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Handles the PendSVC exception.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void PendSVC( void ) {}\r
+\r
+/*******************************************************************************\r
+*\r
+*                                DummyHandler\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Default handling for the IRQ-Exception\r
+*\r
+**/\r
+/******************************************************************************/\r
+void DummyHandler ( void ) {}\r
+\r
+/*******************************************************************************\r
+*\r
+*                                TIM2_IRQHandler\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Handles the TIM2 global interrupt request.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void TIM2_IRQHandler( void )\r
+   {\r
+   #ifdef TIMING_ANALYSIS     //to debug with a scope\r
+   GPIO_WriteBit( GPIOA, GPIO_Pin_7, Bit_RESET );\r
+   #endif\r
+\r
+   /* Clear TIM2 update interrupt */\r
+   TIM_ClearITPendingBit( TIM2, TIM_IT_Update );\r
+\r
+   MEMS_Handler();\r
+\r
+   #ifdef TIMING_ANALYSIS     //to debug with a scope\r
+   GPIO_WriteBit( GPIOA, GPIO_Pin_7, Bit_SET );\r
+   #endif\r
+   }\r
+\r
+/*******************************************************************************\r
+*\r
+*                                TIM3_IRQHandler\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Handles the TIM3 global interrupt request.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void TIM3_IRQHandler( void )\r
+{\r
+   u16 capture = 0;\r
+\r
+   if( TIM_GetITStatus( TIM3, TIM_IT_CC3 ) != RESET )\r
+      {\r
+      capture = TIM_GetCapture3( TIM3 );\r
+\r
+      TIM_SetCompare3( TIM3, capture + CCR_Val + 1 );\r
+      TIM_ClearITPendingBit( TIM3, TIM_IT_CC3 );\r
+   }\r
+}\r
+\r
+/*******************************************************************************\r
+*\r
+*                                TIM4_IRQHandler\r
+*\r
+*******************************************************************************/\r
+/**\r
+*\r
+*  Handles the TIM4 global interrupt request.\r
+*\r
+**/\r
+/******************************************************************************/\r
+void TIM4_IRQHandler( void )\r
+{\r
+   u16 BackLight_capture = 0;\r
+\r
+   if( TIM_GetITStatus( TIM4, TIM_IT_CC2 ) != RESET )\r
+      {\r
+      BackLight_capture = TIM_GetCapture2( TIM4 );\r
+\r
+      TIM_SetCompare2( TIM4, BackLight_capture + Current_CCR_BackLightStart + 1 );\r
+      TIM_ClearITPendingBit( TIM4, TIM_IT_CC2 );\r
+  }\r
+}\r
+\r
diff --git a/Demo/CORTEX_STM32F103_Primer_GCC/ST_Code/stm32f10x_conf.h b/Demo/CORTEX_STM32F103_Primer_GCC/ST_Code/stm32f10x_conf.h
new file mode 100644 (file)
index 0000000..27234fc
--- /dev/null
@@ -0,0 +1,119 @@
+/******************** (C) COPYRIGHT 2007 STMicroelectronics ********************\r
+* File Name          : stm32f10x_conf.h\r
+* Author             : MCD Application Team\r
+* Date First Issued  : 09/29/2006\r
+* Description        : Library configuration file.\r
+********************************************************************************\r
+* History:\r
+* 02/05/2007: V0.1\r
+* 09/29/2006: V0.01\r
+********************************************************************************\r
+* THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS\r
+* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.\r
+* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,\r
+* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE\r
+* CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING\r
+* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.\r
+*******************************************************************************/\r
+\r
+/* Define to prevent recursive inclusion -------------------------------------*/\r
+#ifndef __STM32F10x_CONF_H\r
+#define __STM32F10x_CONF_H\r
+\r
+/* Includes ------------------------------------------------------------------*/\r
+/* Exported types ------------------------------------------------------------*/\r
+/* Exported constants --------------------------------------------------------*/\r
+/* Comment the line below to compile the library in release mode */\r
+//#define DEBUG   0\r
+\r
+/* Comment the line below to disable the specific peripheral inclusion */\r
+/************************************* ADC ************************************/\r
+//#define _ADC\r
+#define _ADC1\r
+#define _ADC2\r
+\r
+/************************************* CAN ************************************/\r
+//#define _CAN\r
+\r
+/************************************* DMA ************************************/\r
+//#define _DMA\r
+#define _DMA_Channel1\r
+#define _DMA_Channel2\r
+#define _DMA_Channel3\r
+#define _DMA_Channel4\r
+#define _DMA_Channel5\r
+#define _DMA_Channel6\r
+#define _DMA_Channel7\r
+\r
+/************************************* EXTI ***********************************/\r
+//#define _EXTI\r
+\r
+/************************************* GPIO ***********************************/\r
+#define _GPIO\r
+#define _GPIOA\r
+#define _GPIOB\r
+#define _GPIOC\r
+#define _GPIOD\r
+//#define _GPIOE\r
+#define _AFIO\r
+\r
+/************************************* I2C ************************************/\r
+//#define _I2C\r
+//#define _I2C1\r
+//#define _I2C2\r
+\r
+/************************************* IWDG ***********************************/\r
+//#define _IWDG\r
+\r
+/************************************* NVIC ***********************************/\r
+#define _NVIC\r
+#define _SCB\r
+\r
+/************************************* BKP ************************************/\r
+//#define _BKP  \r
+\r
+/************************************* PWR ************************************/\r
+//#define _PWR\r
+\r
+/************************************* RCC ************************************/\r
+#define _RCC\r
+\r
+/************************************* RTC ************************************/\r
+//#define _RTC\r
+\r
+/************************************* SPI ************************************/\r
+#define _SPI\r
+//#define _SPI1\r
+#define _SPI2\r
+\r
+/************************************* SysTick ********************************/\r
+#define _SysTick\r
+\r
+/************************************* TIM1 ***********************************/\r
+//#define _TIM1\r
+\r
+/************************************* TIM ************************************/\r
+#define _TIM\r
+#define _TIM2\r
+#define _TIM3\r
+#define _TIM4\r
+\r
+/************************************* USART **********************************/\r
+//#define _USART\r
+//#define _USART1\r
+//#define _USART2\r
+//#define _USART3\r
+\r
+/************************************* WWDG ***********************************/\r
+//#define _WWDG\r
+\r
+/* In the following line adjust the value of External High Speed oscillator (HSE)\r
+   used in your application */\r
+#define HSE_Value    ((u32)12000000)   /* Value of the External oscillator in Hz*/\r
+\r
+/* Exported macro ------------------------------------------------------------*/\r
+/* Exported functions ------------------------------------------------------- */\r
+\r
+#endif /* __STM32F10x_CONF_H */\r
+\r
+/******************* (C) COPYRIGHT 2007 STMicroelectronics *****END OF FILE****/\r
diff --git a/Demo/CORTEX_STM32F103_Primer_GCC/ST_Code/stm32f10x_it.h b/Demo/CORTEX_STM32F103_Primer_GCC/ST_Code/stm32f10x_it.h
new file mode 100644 (file)
index 0000000..9fa5322
--- /dev/null
@@ -0,0 +1,70 @@
+/********************* (C) COPYRIGHT 2007 RAISONANCE S.A.S. ********************\r
+* File Name          : stm32f10x_it.c\r
+* Author             : IB/FL\r
+* Date First Issued  : 07/2007\r
+* Description        : Interrupt handler for the CircleOS project.\r
+* Revision           :\r
+*******************************************************************************/\r
+\r
+/* Define to prevent recursive inclusion -------------------------------------*/\r
+#ifndef __STM32F10x_IT_H\r
+#define __STM32F10x_IT_H\r
+\r
+/* Includes ------------------------------------------------------------------*/\r
+#include "stm32f10x_lib.h"\r
+\r
+/* Exported functions ------------------------------------------------------- */\r
+void NMIException( void );\r
+void HardFaultException( void );\r
+void MemManageException( void );\r
+void BusFaultException( void );\r
+void UsageFaultException( void );\r
+void DebugMonitor( void );\r
+void SVCHandler( void );\r
+void PendSVC( void );\r
+void SysTickHandler( void );\r
+void WWDG_IRQHandler( void );\r
+void PVD_IRQHandler( void );\r
+void TAMPER_IRQHandler( void );\r
+void RTC_IRQHandler( void );\r
+void FLASH_IRQHandler( void );\r
+void RCC_IRQHandler( void );\r
+void EXTI0_IRQHandler( void );\r
+void EXTI1_IRQHandler( void );\r
+void EXTI2_IRQHandler( void );\r
+void EXTI3_IRQHandler( void );\r
+void EXTI4_IRQHandler( void );\r
+void DMAChannel1_IRQHandler( void );\r
+void DMAChannel2_IRQHandler( void );\r
+void DMAChannel3_IRQHandler( void );\r
+void DMAChannel4_IRQHandler( void );\r
+void DMAChannel5_IRQHandler( void );\r
+void DMAChannel6_IRQHandler( void );\r
+void DMAChannel7_IRQHandler( void );\r
+void ADC_IRQHandler( void );\r
+void USB_HP_CAN_TX_IRQHandler( void );\r
+void USB_LP_CAN_RX0_IRQHandler( void );\r
+void CAN_RX1_IRQHandler( void );\r
+void CAN_SCE_IRQHandler( void );\r
+void EXTI9_5_IRQHandler( void );\r
+void TIM1_BRK_IRQHandler( void );\r
+void TIM1_UP_IRQHandler( void );\r
+void TIM1_TRG_COM_IRQHandler( void );\r
+void TIM1_CC_IRQHandler( void );\r
+void TIM2_IRQHandler( void );\r
+void TIM3_IRQHandler( void );\r
+void TIM4_IRQHandler( void );\r
+void I2C1_EV_IRQHandler( void );\r
+void I2C1_ER_IRQHandler( void );\r
+void I2C2_EV_IRQHandler( void );\r
+void I2C2_ER_IRQHandler( void );\r
+void SPI1_IRQHandler( void );\r
+void SPI2_IRQHandler( void );\r
+void USART1_IRQHandler( void );\r
+void USART2_IRQHandler( void );\r
+void USART3_IRQHandler( void );\r
+void EXTI15_10_IRQHandler( void );\r
+void RTCAlarm_IRQHandler( void );\r
+void USBWakeUp_IRQHandler( void );\r
+                                        \r
+#endif /* __STM32F10x_IT_H */\r
diff --git a/Demo/CORTEX_STM32F103_Primer_GCC/ST_Code/stm32f10x_tim.c b/Demo/CORTEX_STM32F103_Primer_GCC/ST_Code/stm32f10x_tim.c
new file mode 100644 (file)
index 0000000..5fd374e
--- /dev/null
@@ -0,0 +1,2348 @@
+/******************** (C) COPYRIGHT 2007 STMicroelectronics ********************\r
+* File Name          : stm32f10x_tim.c\r
+* Author             : MCD Application Team\r
+* Date First Issued  : 09/29/2006\r
+* Description        : This file provides all the TIM firmware functions.\r
+********************************************************************************\r
+* History:\r
+* 04/02/2007: V0.2\r
+* 02/05/2007: V0.1\r
+* 09/29/2006: V0.01\r
+********************************************************************************\r
+* THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS\r
+* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.\r
+* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,\r
+* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE\r
+* CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING\r
+* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.\r
+*******************************************************************************/\r
+\r
+/* Includes ------------------------------------------------------------------*/\r
+#include "stm32f10x_tim.h"\r
+#include "stm32f10x_rcc.h"\r
+\r
+/* Private typedef -----------------------------------------------------------*/\r
+/* Private define ------------------------------------------------------------*/\r
+/* ---------------------- TIM registers bit mask ------------------------ */\r
+#define CR1_CEN_Set                 ((u16)0x0001)\r
+#define CR1_CEN_Reset               ((u16)0x03FE)\r
+#define CR1_UDIS_Set                ((u16)0x0002)\r
+#define CR1_UDIS_Reset              ((u16)0x03FD)\r
+#define CR1_URS_Set                 ((u16)0x0004)\r
+#define CR1_URS_Reset               ((u16)0x03FB)\r
+#define CR1_OPM_Mask                ((u16)0x03F7)\r
+#define CR1_CounterMode_Mask        ((u16)0x039F)\r
+#define CR1_ARPE_Set                ((u16)0x0080)\r
+#define CR1_ARPE_Reset              ((u16)0x037F)\r
+#define CR1_CKD_Mask                ((u16)0x00FF)\r
+\r
+#define CR2_CCDS_Set                ((u16)0x0008)\r
+#define CR2_CCDS_Reset              ((u16)0x0007)\r
+#define CR2_MMS_Mask                ((u16)0x0080)\r
+#define CR2_TI1S_Set                ((u16)0x0080)\r
+#define CR2_TI1S_Reset              ((u16)0xFF70)\r
+\r
+#define SMCR_SMS_Mask               ((u16)0xFFF0)\r
+#define SMCR_ETR_Mask               ((u16)0x00F7)\r
+#define SMCR_TS_Mask                ((u16)0xFF87)\r
+#define SMCR_MSM_Mask               ((u16)0xFF77)\r
+#define SMCR_ECE_Set                ((u16)0x4000)\r
+\r
+#define CCMR_CC13S_Mask             ((u16)0x7F7C)\r
+#define CCMR_CC24S_Mask             ((u16)0x7C7F)\r
+#define CCMR_TI13Direct_Set         ((u16)0x0001)\r
+#define CCMR_TI24Direct_Set         ((u16)0x0100)\r
+#define CCMR_OC13FE_Mask            ((u16)0x7F7B)\r
+#define CCMR_OC24FE_Mask            ((u16)0x7B7F)\r
+#define CCMR_OC13PE_Mask            ((u16)0x7F77)\r
+#define CCMR_OC24PE_Mask            ((u16)0x777F)\r
+#define CCMR_OCM13_Mask             ((u16)0x7F0F)\r
+#define CCMR_OCM24_Mask             ((u16)0x0F7F)\r
+#define CCMR_IC13PSC_Mask           ((u16)0xFFF3)\r
+#define CCMR_IC24PSC_Mask           ((u16)0xF3FF)\r
+#define CCMR_IC13F_Mask             ((u16)0xFF0F)\r
+#define CCMR_IC24F_Mask             ((u16)0x0FFF)\r
+#define CCER_CC1P_Mask              ((u16)0xFFFD)\r
+\r
+#define CCER_CC2P_Mask              ((u16)0xFFDF)\r
+#define CCER_CC3P_Mask              ((u16)0xFDFF)\r
+#define CCER_CC4P_Mask              ((u16)0xDFFF)\r
+\r
+#define CCRE_CC1E_Set               ((u16)0x0001)\r
+#define CCRE_CC1E_Reset             ((u16)0xFFFE)\r
+#define CCRE_CC1E_Mask              ((u16)0xFFFE)\r
+\r
+#define CCRE_CC2E_Set               ((u16)0x0010)\r
+#define CCRE_CC2E_Reset             ((u16)0xFFEF)\r
+#define CCRE_CC2E_Mask              ((u16)0xFFEF)\r
+\r
+#define CCRE_CC3E_Set               ((u16)0x0100)\r
+#define CCRE_CC3E_Reset             ((u16)0xFEFF)\r
+\r
+#define CCRE_CC4E_Set               ((u16)0x1000)\r
+#define CCRE_CC4E_Reset             ((u16)0xEFFF)\r
+#define CCRE_CC4E_Mask              ((u16)0xEFFF)\r
+\r
+#define DCR_DMA_Mask                ((u16)0x0000)\r
+\r
+/* TIM private Masks */\r
+#define TIM_Period_Reset_Mask       ((u16)0x0000)\r
+#define TIM_Prescaler_Reset_Mask    ((u16)0x0000)\r
+#define TIM_Pulse_Reset_Mask        ((u16)0x0000)\r
+#define TIM_ICFilter_Mask           ((u8)0x00)\r
+\r
+/* Private macro -------------------------------------------------------------*/\r
+/* Private variables ---------------------------------------------------------*/\r
+static uc16 Tab_OCModeMask[4] = {0xFF00, 0x00FF, 0xFF00, 0x00FF};\r
+static uc16 Tab_PolarityMask[4] = {CCER_CC1P_Mask, CCER_CC2P_Mask, CCER_CC3P_Mask, CCER_CC4P_Mask};\r
+\r
+/* Private function prototypes -----------------------------------------------*/\r
+static void PWMI_Config(TIM_TypeDef* TIMx, TIM_ICInitTypeDef* TIM_ICInitStruct);\r
+static void TI1_Config(TIM_TypeDef* TIMx, u16 TIM_ICPolarity, u16 TIM_ICSelection,\r
+                       u8 TIM_ICFilter);\r
+static void TI2_Config(TIM_TypeDef* TIMx, u16 TIM_ICPolarity, u16 TIM_ICSelection,\r
+                       u8 TIM_ICFilter);\r
+static void TI3_Config(TIM_TypeDef* TIMx, u16 TIM_ICPolarity, u16 TIM_ICSelection,\r
+                       u8 TIM_ICFilter);\r
+static void TI4_Config(TIM_TypeDef* TIMx, u16 TIM_ICPolarity, u16 TIM_ICSelection,\r
+                       u8 TIM_ICFilter);\r
+static void ETR_Config(TIM_TypeDef* TIMx, u16 TIM_ExtTRGPrescaler, \r
+                       u16 TIM_ExtTRGPolarity, u8 ExtTRGFilter);\r
+/* Private functions ---------------------------------------------------------*/\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_DeInit\r
+* Description    : Deinitializes the TIMx peripheral registers to their default\r
+*                  reset values.\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+void TIM_DeInit(TIM_TypeDef* TIMx)\r
+{  \r
+  switch (*(u32*)&TIMx)\r
+  {\r
+    case TIM2_BASE:\r
+      RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM2, ENABLE);\r
+      RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM2, DISABLE);\r
+      break;\r
\r
+    case TIM3_BASE:\r
+      RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM3, ENABLE);\r
+      RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM3, DISABLE);\r
+      break;\r
\r
+    case TIM4_BASE:\r
+      RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM4, ENABLE);\r
+      RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM4, DISABLE);\r
+      break;\r
\r
+    default:\r
+      break;\r
+  }\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_TimeBaseInit\r
+* Description    : Initializes the TIMx Time Base Unit peripheral according to \r
+*                  the specified parameters in the TIM_TimeBaseInitStruct.\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+*                  - TIM_TimeBaseInitStruct: pointer to a TIM_TimeBaseInitTypeDef\r
+*                   structure that contains the configuration information for\r
+*                   the specified TIM peripheral.\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct)\r
+{\r
+  /* Check the parameters */\r
+  assert(IS_TIM_COUNTER_MODE(TIM_TimeBaseInitStruct->TIM_CounterMode));\r
+  assert(IS_TIM_CKD_DIV(TIM_TimeBaseInitStruct->TIM_ClockDivision));\r
+  \r
+  /* Set the Autoreload value */\r
+  TIMx->ARR = TIM_TimeBaseInitStruct->TIM_Period ;\r
+\r
+  /* Set the Prescaler value */\r
+  TIMx->PSC = TIM_TimeBaseInitStruct->TIM_Prescaler;\r
+\r
+  /* Select the Counter Mode and set the clock division */\r
+  TIMx->CR1 &= CR1_CKD_Mask & CR1_CounterMode_Mask;\r
+  TIMx->CR1 |= (u32)TIM_TimeBaseInitStruct->TIM_ClockDivision |\r
+               TIM_TimeBaseInitStruct->TIM_CounterMode;\r
+}\r
+/*******************************************************************************\r
+* Function Name  : TIM_OCInit\r
+* Description    : Initializes the TIMx peripheral according to the specified\r
+*                  parameters in the TIM_OCInitStruct.\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+*                  - TIM_OCInitStruct: pointer to a TIM_OCInitTypeDef structure\r
+*                    that contains the configuration information for the specified\r
+*                    TIM peripheral.\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+void TIM_OCInit(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct)\r
+{\r
+  u32 tmpccmrx = 0, tmpccer = 0;\r
+  \r
+  /* Check the parameters */\r
+  assert(IS_TIM_OC_MODE(TIM_OCInitStruct->TIM_OCMode));\r
+  assert(IS_TIM_CHANNEL(TIM_OCInitStruct->TIM_Channel));\r
+  assert(IS_TIM_OC_POLARITY(TIM_OCInitStruct->TIM_OCPolarity));\r
+\r
+  tmpccer = TIMx->CCER;\r
+\r
+  if ((TIM_OCInitStruct->TIM_Channel == (u16)TIM_Channel_1) ||\r
+      (TIM_OCInitStruct->TIM_Channel == (u16)TIM_Channel_2))\r
+  {\r
+    tmpccmrx = TIMx->CCMR1;\r
+    \r
+    /* Reset the Output Compare Bits */\r
+    tmpccmrx &= Tab_OCModeMask[TIM_OCInitStruct->TIM_Channel];\r
+\r
+    /* Set the Output Polarity level */\r
+    tmpccer &= Tab_PolarityMask[TIM_OCInitStruct->TIM_Channel];\r
+\r
+    if (TIM_OCInitStruct->TIM_Channel == TIM_Channel_1)\r
+    {\r
+      /* Disable the Channel 1: Reset the CCE Bit */\r
+      TIMx->CCER &= CCRE_CC1E_Reset;\r
+\r
+      /* Select the Output Compare Mode */\r
+      tmpccmrx |= TIM_OCInitStruct->TIM_OCMode;\r
+\r
+      /* Set the Capture Compare Register value */\r
+      TIMx->CCR1 = TIM_OCInitStruct->TIM_Pulse;\r
+\r
+      /* Set the Capture Compare Enable Bit */\r
+      tmpccer |= CCRE_CC1E_Set;\r
+\r
+      /* Set the Capture Compare Polarity */\r
+      tmpccer |= TIM_OCInitStruct->TIM_OCPolarity;\r
+    }\r
+    else /* TIM_Channel_2 */\r
+    {\r
+      /* Disable the Channel 2: Reset the CCE Bit */\r
+      TIMx->CCER &= CCRE_CC2E_Reset;\r
+\r
+      /* Select the Output Compare Mode */\r
+      tmpccmrx |= (u32)TIM_OCInitStruct->TIM_OCMode << 8;\r
+\r
+      /* Set the Capture Compare Register value */\r
+      TIMx->CCR2 = TIM_OCInitStruct->TIM_Pulse;\r
+\r
+      /* Set the Capture Compare Enable Bit */\r
+      tmpccer |= CCRE_CC2E_Set;\r
+\r
+      /* Set the Capture Compare Polarity */\r
+      tmpccer |= (u32)TIM_OCInitStruct->TIM_OCPolarity << 4;\r
+    }\r
+\r
+    TIMx->CCMR1 = (u16)tmpccmrx;\r
+  }\r
+  else \r
+  {\r
+    if ((TIM_OCInitStruct->TIM_Channel == TIM_Channel_3) ||\r
+        (TIM_OCInitStruct->TIM_Channel == TIM_Channel_4))\r
+    { \r
+      tmpccmrx = TIMx->CCMR2;\r
+\r
+      /* Reset the Output Compare Bits */\r
+      tmpccmrx &= Tab_OCModeMask[TIM_OCInitStruct->TIM_Channel];\r
+\r
+      /* Set the Output Polarity level */\r
+      tmpccer &= Tab_PolarityMask[TIM_OCInitStruct->TIM_Channel];\r
+\r
+      if (TIM_OCInitStruct->TIM_Channel == TIM_Channel_3)\r
+      {\r
+        /* Disable the Channel 3: Reset the CCE Bit */\r
+        TIMx->CCER &= CCRE_CC3E_Reset;\r
+\r
+        /* Select the Output Compare Mode */\r
+        tmpccmrx |= TIM_OCInitStruct->TIM_OCMode;\r
+\r
+        /* Set the Capture Compare Register value */\r
+        TIMx->CCR3 = TIM_OCInitStruct->TIM_Pulse;\r
+\r
+        /* Set the Capture Compare Enable Bit */\r
+        tmpccer |= CCRE_CC3E_Set;\r
+\r
+        /* Set the Capture Compare Polarity */\r
+        tmpccer |= (u32)TIM_OCInitStruct->TIM_OCPolarity << 8;\r
+      }\r
+      else  /* TIM_Channel_4 */\r
+      {\r
+        /* Disable the Channel 4: Reset the CCE Bit */\r
+        TIMx->CCER &= CCRE_CC4E_Reset;\r
+\r
+       /* Select the Output Compare Mode */\r
+        tmpccmrx |= (u32)TIM_OCInitStruct->TIM_OCMode << 8;\r
+\r
+        /* Set the Capture Compare Register value */\r
+        TIMx->CCR4 = TIM_OCInitStruct->TIM_Pulse;\r
+\r
+        /* Set the Capture Compare Enable Bit */\r
+        tmpccer |= CCRE_CC4E_Set;\r
+\r
+        /* Set the Capture Compare Polarity */\r
+        tmpccer |= (u32)TIM_OCInitStruct->TIM_OCPolarity << 12;\r
+      }\r
+\r
+      TIMx->CCMR2 = (u16)tmpccmrx;\r
+    }\r
+  }\r
+  \r
+  TIMx->CCER = (u16)tmpccer;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_ICInit\r
+* Description    : Initializes the TIMx peripheral according to the specified\r
+*                  parameters in the TIM_ICInitStruct.\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+*                  - TIM_ICInitStruct: pointer to a TIM_ICInitTypeDef structure\r
+*                    that contains the configuration information for the specified\r
+*                    TIM peripheral.\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+void TIM_ICInit(TIM_TypeDef* TIMx, TIM_ICInitTypeDef* TIM_ICInitStruct)\r
+{\r
+  /* Check the parameters */\r
+  assert(IS_TIM_IC_MODE(TIM_ICInitStruct->TIM_ICMode));\r
+  assert(IS_TIM_CHANNEL(TIM_ICInitStruct->TIM_Channel));\r
+  assert(IS_TIM_IC_POLARITY(TIM_ICInitStruct->TIM_ICPolarity));\r
+  assert(IS_TIM_IC_SELECTION(TIM_ICInitStruct->TIM_ICSelection));\r
+  assert(IS_TIM_IC_PRESCALER(TIM_ICInitStruct->TIM_ICPrescaler));\r
+  assert(IS_TIM_IC_FILTER(TIM_ICInitStruct->TIM_ICFilter));\r
+  \r
+  if (TIM_ICInitStruct->TIM_ICMode == TIM_ICMode_ICAP)\r
+  {\r
+    if (TIM_ICInitStruct->TIM_Channel == TIM_Channel_1)\r
+    {\r
+      /* TI1 Configuration */\r
+      TI1_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity,\r
+                 TIM_ICInitStruct->TIM_ICSelection,\r
+                 TIM_ICInitStruct->TIM_ICFilter);\r
+\r
+      /* Set the Input Capture Prescaler value */\r
+      TIM_SetIC1Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler);\r
+    }\r
+    else if (TIM_ICInitStruct->TIM_Channel == TIM_Channel_2)\r
+    {\r
+      /* TI2 Configuration */\r
+      TI2_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity,\r
+                 TIM_ICInitStruct->TIM_ICSelection,\r
+                 TIM_ICInitStruct->TIM_ICFilter);\r
+\r
+      /* Set the Input Capture Prescaler value */\r
+      TIM_SetIC2Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler);\r
+    }\r
+    else if (TIM_ICInitStruct->TIM_Channel == TIM_Channel_3)\r
+    {\r
+      /* TI3 Configuration */\r
+      TI3_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity,\r
+                 TIM_ICInitStruct->TIM_ICSelection,\r
+                 TIM_ICInitStruct->TIM_ICFilter);\r
+\r
+      /* Set the Input Capture Prescaler value */\r
+      TIM_SetIC3Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler);\r
+    }\r
+    else /* TIM_Channel_4 */\r
+    {\r
+      /* TI4 Configuration */\r
+      TI4_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity,\r
+                 TIM_ICInitStruct->TIM_ICSelection,\r
+                 TIM_ICInitStruct->TIM_ICFilter);\r
+\r
+      /* Set the Input Capture Prescaler value */\r
+      TIM_SetIC4Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler);\r
+    }\r
+  }\r
+  else\r
+  {\r
+    PWMI_Config(TIMx, TIM_ICInitStruct);\r
+  }\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_TimeBaseStructInit\r
+* Description    : Fills each TIM_TimeBaseInitStruct member with its default value.\r
+* Input          : - TIM_TimeBaseInitStruct: pointer to a TIM_TimeBaseInitTypeDef\r
+*                    structure which will be initialized.\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+void TIM_TimeBaseStructInit(TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct)\r
+{\r
+  /* Set the default configuration */\r
+  TIM_TimeBaseInitStruct->TIM_Period = TIM_Period_Reset_Mask;\r
+  TIM_TimeBaseInitStruct->TIM_Prescaler = TIM_Prescaler_Reset_Mask;\r
+  TIM_TimeBaseInitStruct->TIM_ClockDivision = TIM_CKD_DIV1;\r
+  TIM_TimeBaseInitStruct->TIM_CounterMode = TIM_CounterMode_Up;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_OCStructInit\r
+* Description    : Fills each TIM_OCInitStruct member with its default value.\r
+* Input          : - TIM_OCInitStruct: pointer to a TIM_OCInitTypeDef structure\r
+*                    which will be initialized.\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+void TIM_OCStructInit(TIM_OCInitTypeDef* TIM_OCInitStruct)\r
+{\r
+  /* Set the default configuration */\r
+  TIM_OCInitStruct->TIM_OCMode = TIM_OCMode_Timing;\r
+  TIM_OCInitStruct->TIM_Channel = TIM_Channel_1;\r
+  TIM_OCInitStruct->TIM_Pulse = TIM_Pulse_Reset_Mask;\r
+  TIM_OCInitStruct->TIM_OCPolarity = TIM_OCPolarity_High;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_ICStructInit\r
+* Description    : Fills each TIM_InitStruct member with its default value.\r
+* Input          : - TIM_ICInitStruct: pointer to a TIM_ICInitTypeDef structure\r
+*                    which will be initialized.\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+void TIM_ICStructInit(TIM_ICInitTypeDef* TIM_ICInitStruct)\r
+{\r
+  /* Set the default configuration */\r
+  TIM_ICInitStruct->TIM_ICMode = TIM_ICMode_ICAP;\r
+  TIM_ICInitStruct->TIM_Channel = TIM_Channel_1;\r
+  TIM_ICInitStruct->TIM_ICPolarity = TIM_ICPolarity_Rising;\r
+  TIM_ICInitStruct->TIM_ICSelection = TIM_ICSelection_DirectTI;\r
+  TIM_ICInitStruct->TIM_ICPrescaler = TIM_ICPSC_DIV1;\r
+  TIM_ICInitStruct->TIM_ICFilter = TIM_ICFilter_Mask;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_Cmd\r
+* Description    : Enables or disables the specified TIM peripheral.\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIMx peripheral.\r
+*                  - Newstate: new state of the TIMx peripheral.\r
+*                    This parameter can be: ENABLE or DISABLE.\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState)\r
+{\r
+  /* Check the parameters */\r
+  assert(IS_FUNCTIONAL_STATE(NewState));\r
+  \r
+  if (NewState != DISABLE)\r
+  {\r
+    /* Enable the TIM Counter */\r
+    TIMx->CR1 |= CR1_CEN_Set;\r
+  }\r
+  else\r
+  {\r
+    /* Disable the TIM Counter */\r
+    TIMx->CR1 &= CR1_CEN_Reset;\r
+  }\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_ITConfig\r
+* Description    : Enables or disables the TIMx interrupts.\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+*                  - TIM_IT: specifies the TIM interrupts sources to be enabled\r
+*                    or disabled.\r
+*                    This parameter can be any combination of the following values:\r
+*                       - TIM_IT_Update: Timer update Interrupt\r
+*                       - TIM_IT_CC1: Capture Compare 1 Interrupt\r
+*                       - TIM_IT_CC2: Capture Compare 2 Interrupt\r
+*                       - TIM_IT_CC3: Capture Compare 3 Interrupt\r
+*                       - TIM_IT_CC4: Capture Compare 4 Interrupt\r
+*                       - TIM_IT_Trigger: Trigger Interrupt\r
+*                  - Newstate: new state of the specified TIMx interrupts.\r
+*                    This parameter can be: ENABLE or DISABLE.\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+void TIM_ITConfig(TIM_TypeDef* TIMx, u16 TIM_IT, FunctionalState NewState)\r
+{\r
+  /* Check the parameters */\r
+  assert(IS_TIM_IT(TIM_IT));\r
+  assert(IS_FUNCTIONAL_STATE(NewState));\r
+  \r
+  if (NewState != DISABLE)\r
+  {\r
+    /* Enable the Interrupt sources */\r
+    TIMx->DIER |= TIM_IT;\r
+  }\r
+  else\r
+  {\r
+    /* Disable the Interrupt sources */\r
+    TIMx->DIER &= (u16)(~TIM_IT);\r
+  }\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_DMAConfig\r
+* Description    : Configures the TIMx\92s DMA interface.\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+*                  - TIM_DMABase: DMA Base address.\r
+*                    This parameter can be one of the following values:\r
+*                       - TIM_DMABase_CR1, TIM_DMABase_CR2, TIM_DMABase_SMCR,\r
+*                         TIM_DMABase_DIER, TIM_DMABase_SR, TIM_DMABase_EGR,\r
+*                         TIM_DMABase_CCMR1, TIM_DMABase_CCMR2, TIM_DMABase_CCER,\r
+*                         TIM_DMABase_CNT, TIM_DMABase_PSC, TIM_DMABase_ARR,\r
+*                         TIM_DMABase_CCR1, TIM_DMABase_CCR2, TIM_DMABase_CCR3,\r
+*                         TIM_DMABase_CCR4, TIM_DMABase_DCR.\r
+*                  - TIM_DMABurstLength: DMA Burst length.\r
+*                    This parameter can be one value between:\r
+*                    TIM_DMABurstLength_1Byte and TIM_DMABurstLength_18Bytes.\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+void TIM_DMAConfig(TIM_TypeDef* TIMx, u16 TIM_DMABase, u16 TIM_DMABurstLength)\r
+{\r
+  u32 tmpdcr = 0;\r
+\r
+  /* Check the parameters */\r
+  assert(IS_TIM_DMA_BASE(TIM_DMABase));\r
+  assert(IS_TIM_DMA_LENGTH(TIM_DMABurstLength));\r
+  \r
+  tmpdcr = TIMx->DCR;\r
+\r
+  /* Reset the DBA and the DBL Bits */\r
+  tmpdcr &= DCR_DMA_Mask;\r
+\r
+  /* Set the DMA Base and the DMA Burst Length */\r
+  tmpdcr |= TIM_DMABase | TIM_DMABurstLength;\r
+\r
+  TIMx->DCR = (u16)tmpdcr;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_DMACmd\r
+* Description    : Enables or disables the TIMx\92s DMA Requests.\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+*                  - TIM_DMASources: specifies the DMA Request sources.\r
+*                    This parameter can be any combination of the following values:\r
+*                       - TIM_DMA_CC1: Capture Compare 1 DMA source\r
+*                       - TIM_DMA_CC2: Capture Compare 2 DMA source\r
+*                       - TIM_DMA_CC3: Capture Compare 3 DMA source\r
+*                       - TIM_DMA_CC4: Capture Compare 4 DMA source\r
+*                       - TIM_DMA_Trigger: Trigger DMA source\r
+*                  - Newstate: new state of the DMA Request sources.\r
+*                    This parameter can be: ENABLE or DISABLE.\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+void TIM_DMACmd(TIM_TypeDef* TIMx, u16 TIM_DMASource, FunctionalState Newstate)\r
+{\r
+  u32 tmpdier = 0;\r
+  \r
+  /* Check the parameters */\r
+  assert(IS_TIM_DMA_SOURCE(TIM_DMASource));\r
+  assert(IS_FUNCTIONAL_STATE(Newstate));\r
+\r
+  tmpdier = TIMx->DIER;\r
+\r
+  if (Newstate != DISABLE)\r
+  {\r
+    /* Enable the DMA sources */\r
+    tmpdier |= TIM_DMASource;\r
+  }\r
+  else\r
+  {\r
+    /* Disable the DMA sources */\r
+    tmpdier &= (u16)(~TIM_DMASource);\r
+  }\r
+  TIMx->DIER = (u16)tmpdier;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_InternalClockConfig\r
+* Description    : Configures the TIMx interrnal Clock\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+void TIM_InternalClockConfig(TIM_TypeDef* TIMx)\r
+{\r
+  /* Disable slave mode to clock the prescaler directly with the internal clock */\r
+  TIMx->SMCR &=  SMCR_SMS_Mask;\r
+}\r
+/*******************************************************************************\r
+* Function Name  : TIM_ITRxExternalClockConfig\r
+* Description    : Configures the TIMx Internal Trigger as External Clock\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+*                  - TIM_ITRSource: Trigger source.\r
+*                    This parameter can be one of the following values:\r
+*                       - TIM_TS_ITR0: Internal Trigger 0\r
+*                       - TIM_TS_ITR1: Internal Trigger 1\r
+*                       - TIM_TS_ITR2: Internal Trigger 2\r
+*                       - TIM_TS_ITR3: Internal Trigger 3\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+void TIM_ITRxExternalClockConfig(TIM_TypeDef* TIMx, u16 TIM_InputTriggerSource)\r
+{\r
+  /* Check the parameters */\r
+  assert(IS_TIM_INTERNAL_TRIGGER_SELECTION(TIM_InputTriggerSource));\r
+\r
+  /* Select the Internal Trigger */\r
+  TIM_SelectInputTrigger(TIMx, TIM_InputTriggerSource);\r
+\r
+  /* Select the External clock mode1 */\r
+  TIMx->SMCR |= TIM_SlaveMode_External1;\r
+}\r
+/*******************************************************************************\r
+* Function Name  : TIM_TIxExternalClockConfig\r
+* Description    : Configures the TIMx Trigger as External Clock\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+*                  - TIM_TIxExternalCLKSource: Trigger source.\r
+*                    This parameter can be one of the following values:\r
+*                       - TIM_TS_TI1F_ED: TI1 Edge Detector\r
+*                       - TIM_TS_TI1FP1: Filtered Timer Input 1\r
+*                       - TIM_TS_TI2FP2: Filtered Timer Input 2\r
+*                  - TIM_ICPolarity: specifies the TIx Polarity.\r
+*                    This parameter can be:\r
+*                       - TIM_ICPolarity_Rising\r
+*                       - TIM_ICPolarity_Falling\r
+*                   - ICFilter : specifies the filter value.\r
+*                     This parameter must be a value between 0x0 and 0xF.\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+void TIM_TIxExternalClockConfig(TIM_TypeDef* TIMx, u16 TIM_TIxExternalCLKSource,\r
+                                u16 TIM_ICPolarity, u8 ICFilter)\r
+{\r
+  /* Check the parameters */\r
+  assert(IS_TIM_TIX_TRIGGER_SELECTION(TIM_TIxExternalCLKSource));\r
+  assert(IS_TIM_IC_POLARITY(TIM_ICPolarity));\r
+  assert(IS_TIM_IC_FILTER(ICFilter));\r
+\r
+  /* Configure the Timer Input Clock Source */\r
+  if (TIM_TIxExternalCLKSource == TIM_TIxExternalCLK1Source_TI2)\r
+  {\r
+    TI2_Config(TIMx, TIM_ICPolarity, TIM_ICSelection_DirectTI, ICFilter);\r
+  }\r
+  else\r
+  {\r
+    TI1_Config(TIMx, TIM_ICPolarity, TIM_ICSelection_DirectTI, ICFilter);\r
+  }\r
+\r
+  /* Select the Trigger source */\r
+  TIM_SelectInputTrigger(TIMx, TIM_TIxExternalCLKSource);\r
+\r
+  /* Select the External clock mode1 */\r
+  TIMx->SMCR |= TIM_SlaveMode_External1;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_ETRClockMode1Config\r
+* Description    : Configures the External clock Mode1\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+*                  - TIM_ExtTRGPrescaler: The external Trigger Prescaler.\r
+*                    It can be one of the following values:\r
+*                       - TIM_ExtTRGPSC_OFF\r
+*                       - TIM_ExtTRGPSC_DIV2\r
+*                       - TIM_ExtTRGPSC_DIV4\r
+*                       - TIM_ExtTRGPSC_DIV8.\r
+*                  - TIM_ExtTRGPolarity: The external Trigger Polarity.\r
+*                    It can be one of the following values:\r
+*                       - TIM_ExtTRGPolarity_Inverted\r
+*                       - TIM_ExtTRGPolarity_NonInverted\r
+*                  - ExtTRGFilter: External Trigger Filter.\r
+*                    This parameter must be a value between 0x00 and 0x0F\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+void TIM_ETRClockMode1Config(TIM_TypeDef* TIMx, u16 TIM_ExtTRGPrescaler, u16 TIM_ExtTRGPolarity,\r
+                             u8 ExtTRGFilter)\r
+{\r
+  /* Check the parameters */\r
+  assert(IS_TIM_EXT_PRESCALER(TIM_ExtTRGPrescaler));\r
+  assert(IS_TIM_EXT_POLARITY(TIM_ExtTRGPolarity));\r
+\r
+  /* Configure the ETR Clock source */\r
+  ETR_Config(TIMx, TIM_ExtTRGPrescaler, TIM_ExtTRGPolarity, ExtTRGFilter);\r
+\r
+  /* Select the External clock mode1 */\r
+  TIMx->SMCR &= SMCR_SMS_Mask;\r
+  TIMx->SMCR |= TIM_SlaveMode_External1;\r
+\r
+  /* Select the Trigger selection : ETRF */\r
+  TIMx->SMCR &= SMCR_TS_Mask;\r
+  TIMx->SMCR |= TIM_TS_ETRF;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_ETRClockMode2Config\r
+* Description    : Configures the External clock Mode2\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+*                  - TIM_ExtTRGPrescaler: The external Trigger Prescaler.\r
+*                    It can be one of the following values:\r
+*                       - TIM_ExtTRGPSC_OFF\r
+*                       - TIM_ExtTRGPSC_DIV2\r
+*                       - TIM_ExtTRGPSC_DIV4\r
+*                       - TIM_ExtTRGPSC_DIV8\r
+*                  - TIM_ExtTRGPolarity: The external Trigger Polarity.\r
+*                    It can be one of the following values:\r
+*                       - TIM_ExtTRGPolarity_Inverted\r
+*                       - TIM_ExtTRGPolarity_NonInverted\r
+*                  - ExtTRGFilter: External Trigger Filter.\r
+*                    This parameter must be a value between 0x00 and 0x0F\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+void TIM_ETRClockMode2Config(TIM_TypeDef* TIMx, u16 TIM_ExtTRGPrescaler, \r
+                             u16 TIM_ExtTRGPolarity, u8 ExtTRGFilter)\r
+{\r
+  /* Check the parameters */\r
+  assert(IS_TIM_EXT_PRESCALER(TIM_ExtTRGPrescaler));\r
+  assert(IS_TIM_EXT_POLARITY(TIM_ExtTRGPolarity));\r
+\r
+  /* Configure the ETR Clock source */\r
+  ETR_Config(TIMx, TIM_ExtTRGPrescaler, TIM_ExtTRGPolarity, ExtTRGFilter);\r
+\r
+  /* Enable the External clock mode2 */\r
+  TIMx->SMCR |= SMCR_ECE_Set;\r
+}\r
+/*******************************************************************************\r
+* Function Name  : TIM_SelectInputTrigger\r
+* Description    : Selects the Input Trigger source\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+*                  - TIM_InputTriggerSource: The Input Trigger source.\r
+*                    This parameter can be one of the following values:\r
+*                       - TIM_TS_ITR0: Internal Trigger 0\r
+*                       - TIM_TS_ITR1: Internal Trigger 1\r
+*                       - TIM_TS_ITR2: Internal Trigger 2\r
+*                       - TIM_TS_ITR3: Internal Trigger 3\r
+*                       - TIM_TS_TI1F_ED: TI1 Edge Detector\r
+*                       - TIM_TS_TI1FP1: Filtered Timer Input 1\r
+*                       - TIM_TS_TI2FP2: Filtered Timer Input 2\r
+*                       - TIM_TS_ETRF: External Trigger input\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+void TIM_SelectInputTrigger(TIM_TypeDef* TIMx, u16 TIM_InputTriggerSource)\r
+{\r
+  u32 tmpsmcr = 0;\r
+\r
+  /* Check the parameters */\r
+  assert(IS_TIM_TRIGGER_SELECTION(TIM_InputTriggerSource));\r
+\r
+  tmpsmcr = TIMx->SMCR;\r
+\r
+  /* Select the Tgigger Source */\r
+  tmpsmcr &= SMCR_TS_Mask;\r
+  tmpsmcr |= TIM_InputTriggerSource;\r
+\r
+  TIMx->SMCR = (u16)tmpsmcr;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_PrescalerConfig\r
+* Description    : Configures the TIMx Prescaler.\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+*                  - Prescaler: specifies the Prescaler Register value\r
+*                  - TIM_PSCReloadMode: specifies the TIM Prescaler Reload mode\r
+*                    This parameter can be one of the following values:\r
+*                       - TIM_PSCReloadMode_Update: The Prescaler is loaded at\r
+*                         the update event.\r
+*                       - TIM_PSCReloadMode_Immediate: The Prescaler is loaded\r
+*                         immediatly.\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+void TIM_PrescalerConfig(TIM_TypeDef* TIMx, u16 Prescaler, u16 TIM_PSCReloadMode)\r
+{\r
+  /* Check the parameters */\r
+  assert(IS_TIM_PRESCALER_RELOAD(TIM_PSCReloadMode));\r
+\r
+  /* Set the Prescaler value */\r
+  TIMx->PSC = Prescaler;\r
+\r
+  /* Set or reset the UG Bit */\r
+  if (TIM_PSCReloadMode == TIM_PSCReloadMode_Immediate)\r
+  {\r
+    TIMx->EGR |= TIM_EventSource_Update;\r
+  }\r
+  else\r
+  {\r
+    TIMx->EGR &= TIM_EventSource_Update;\r
+  }\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_CounterModeConfig\r
+* Description    : Specifies the TIMx Counter Mode to be used.\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+*                  - TIM_CounterMode: specifies the Counter Mode to be used\r
+*                    This parameter can be one of the following values:\r
+*                       - TIM_CounterMode_Up: TIM Up Counting Mode\r
+*                       - TIM_CounterMode_Down: TIM Down Counting Mode\r
+*                       - TIM_CounterMode_CenterAligned1: TIM Center Aligned Mode1\r
+*                       - TIM_CounterMode_CenterAligned2: TIM Center Aligned Mode2\r
+*                       - TIM_CounterMode_CenterAligned3: TIM Center Aligned Mode3\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+void TIM_CounterModeConfig(TIM_TypeDef* TIMx, u16 TIM_CounterMode)\r
+{\r
+  u32 tmpcr1 = 0;\r
+\r
+  /* Check the parameters */\r
+  assert(IS_TIM_COUNTER_MODE(TIM_CounterMode));\r
+\r
+  tmpcr1 = TIMx->CR1;\r
+\r
+  /* Reset the CMS and DIR Bits */\r
+  tmpcr1 &= CR1_CounterMode_Mask;\r
+\r
+  /* Set the Counter Mode */\r
+  tmpcr1 |= TIM_CounterMode;\r
+\r
+  TIMx->CR1 = (u16)tmpcr1;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_ForcedOC1Config\r
+* Description    : Forces the TIMx output 1 waveform to active or inactive level.\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+*                  - TIM_ForcedAction: specifies the forced Action to be set to\r
+*                    the output waveform.\r
+*                    This parameter can be one of the following values:\r
+*                       - TIM_ForcedAction_Active: Force active level on OC1REF\r
+*                       - TIM_ForcedAction_InActive: Force inactive level on\r
+*                         OC1REF.\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+void TIM_ForcedOC1Config(TIM_TypeDef* TIMx, u16 TIM_ForcedAction)\r
+{\r
+  u32 tmpccmr1 = 0;\r
+\r
+  /* Check the parameters */\r
+  assert(IS_TIM_FORCED_ACTION(TIM_ForcedAction));\r
+\r
+  tmpccmr1 = TIMx->CCMR1;\r
+\r
+  /* Reset the OCM Bits */\r
+  tmpccmr1 &= CCMR_OCM13_Mask;\r
+\r
+  /* Configure The Forced output Mode */\r
+  tmpccmr1 |= TIM_ForcedAction;\r
+\r
+  TIMx->CCMR1 = (u16)tmpccmr1;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_ForcedOC2Config\r
+* Description    : Forces the TIMx output 2 waveform to active or inactive level.\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+*                  - TIM_ForcedAction: specifies the forced Action to be set to\r
+*                    the output waveform.\r
+*                    This parameter can be one of the following values:\r
+*                       - TIM_ForcedAction_Active: Force active level on OC2REF\r
+*                       - TIM_ForcedAction_InActive: Force inactive level on\r
+*                         OC2REF.\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+void TIM_ForcedOC2Config(TIM_TypeDef* TIMx, u16 TIM_ForcedAction)\r
+{\r
+  u32 tmpccmr1 = 0;\r
+\r
+  /* Check the parameters */\r
+  assert(IS_TIM_FORCED_ACTION(TIM_ForcedAction));\r
+\r
+  tmpccmr1 = TIMx->CCMR1;\r
+\r
+  /* Reset the OCM Bits */\r
+  tmpccmr1 &= CCMR_OCM24_Mask;\r
+\r
+  /* Configure The Forced output Mode */\r
+  tmpccmr1 |= (u16)(TIM_ForcedAction << 8);\r
+\r
+  TIMx->CCMR1 = (u16)tmpccmr1;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_ForcedOC3Config\r
+* Description    : Forces the TIMx output 3 waveform to active or inactive level.\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+*                  - TIM_ForcedAction: specifies the forced Action to be set to\r
+*                    the output waveform.\r
+*                    This parameter can be one of the following values:\r
+*                       - TIM_ForcedAction_Active: Force active level on OC3REF\r
+*                       - TIM_ForcedAction_InActive: Force inactive level on\r
+*                         OC3REF.\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+void TIM_ForcedOC3Config(TIM_TypeDef* TIMx, u16 TIM_ForcedAction)\r
+{\r
+  u32 tmpccmr2 = 0;\r
+\r
+  /* Check the parameters */\r
+  assert(IS_TIM_FORCED_ACTION(TIM_ForcedAction));\r
+\r
+  tmpccmr2 = TIMx->CCMR2;\r
+\r
+  /* Reset the OCM Bits */\r
+  tmpccmr2 &= CCMR_OCM13_Mask;\r
+\r
+  /* Configure The Forced output Mode */\r
+  tmpccmr2 |= TIM_ForcedAction;\r
+\r
+  TIMx->CCMR2 = (u16)tmpccmr2;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_ForcedOC4Config\r
+* Description    : Forces the TIMx output 4 waveform to active or inactive level.\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+*                  - TIM_ForcedAction: specifies the forced Action to be set to\r
+*                    the output waveform.\r
+*                    This parameter can be one of the following values:\r
+*                       - TIM_ForcedAction_Active: Force active level on OC4REF\r
+*                       - TIM_ForcedAction_InActive: Force inactive level on\r
+*                         OC4REF.\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+void TIM_ForcedOC4Config(TIM_TypeDef* TIMx, u16 TIM_ForcedAction)\r
+{\r
+  u32 tmpccmr2 = 0;\r
+\r
+  /* Check the parameters */\r
+  assert(IS_TIM_FORCED_ACTION(TIM_ForcedAction));\r
+\r
+  tmpccmr2 = TIMx->CCMR2;\r
+\r
+  /* Reset the OCM Bits */\r
+  tmpccmr2 &= CCMR_OCM24_Mask;\r
+\r
+  /* Configure The Forced output Mode */\r
+  tmpccmr2 |= (u16)(TIM_ForcedAction << 8);\r
+\r
+  TIMx->CCMR2 = (u16)tmpccmr2;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_ARRPreloadConfig\r
+* Description    : Enables or disables TIMx peripheral Preload register on ARR.\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+*                  - Newstate: new state of the TIMx peripheral Preload register\r
+*                    This parameter can be: ENABLE or DISABLE.\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState Newstate)\r
+{\r
+  u32 tmpcr1 = 0;\r
+  \r
+  /* Check the parameters */\r
+  assert(IS_FUNCTIONAL_STATE(Newstate));\r
+\r
+  tmpcr1 = TIMx->CR1;\r
+\r
+  if (Newstate != DISABLE)\r
+  {\r
+    /* Set the ARR Preload Bit */\r
+    tmpcr1 |= CR1_ARPE_Set;\r
+  }\r
+  else\r
+  {\r
+    /* Reset the ARR Preload Bit */\r
+    tmpcr1 &= CR1_ARPE_Reset;\r
+  }\r
+\r
+  TIMx->CR1 = (u16)tmpcr1;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_SelectCCDMA\r
+* Description    : Selects the TIMx peripheral Capture Compare DMA source.\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+*                  - Newstate: new state of the Capture Compare DMA source\r
+*                    This parameter can be: ENABLE or DISABLE.\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+void TIM_SelectCCDMA(TIM_TypeDef* TIMx, FunctionalState Newstate)\r
+{\r
+  u32 tmpcr2 = 0;\r
+\r
+  /* Check the parameters */\r
+  assert(IS_FUNCTIONAL_STATE(Newstate));\r
+\r
+  tmpcr2 = TIMx->CR2;\r
+\r
+  if (Newstate != DISABLE)\r
+  {\r
+    /* Set the CCDS Bit */\r
+    tmpcr2 |= CR2_CCDS_Set;\r
+  }\r
+  else\r
+  {\r
+    /* Reset the CCDS Bit */\r
+    tmpcr2 &= CR2_CCDS_Reset;\r
+  }\r
+\r
+  TIMx->CR2 = (u16)tmpcr2;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_OC1PreloadConfig\r
+* Description    : Enables or disables the TIMx peripheral Preload register on CCR1.\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+*                  - TIM_OCPreload: new state of the TIMx peripheral Preload\r
+*                    register\r
+*                    This parameter can be one of the following values:\r
+*                       - TIM_OCPreload_Enable\r
+*                       - TIM_OCPreload_Disable\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+void TIM_OC1PreloadConfig(TIM_TypeDef* TIMx, u16 TIM_OCPreload)\r
+{\r
+  u32 tmpccmr1 = 0;\r
+\r
+  /* Check the parameters */\r
+  assert(IS_TIM_OCPRELOAD_STATE(TIM_OCPreload));\r
+\r
+  tmpccmr1 = TIMx->CCMR1;\r
+\r
+  /* Reset the OCPE Bit */\r
+  tmpccmr1 &= CCMR_OC13PE_Mask;\r
+\r
+  /* Enable or Disable the Output Compare Preload feature */\r
+  tmpccmr1 |= TIM_OCPreload;\r
+\r
+  TIMx->CCMR1 = (u16)tmpccmr1;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_OC2PreloadConfig\r
+* Description    : Enables or disables the TIMx peripheral Preload register on CCR2.\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+*                  - TIM_OCPreload: new state of the TIMx peripheral Preload\r
+*                    register\r
+*                    This parameter can be one of the following values:\r
+*                       - TIM_OCPreload_Enable\r
+*                       - TIM_OCPreload_Disable\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+void TIM_OC2PreloadConfig(TIM_TypeDef* TIMx, u16 TIM_OCPreload)\r
+{\r
+  u32 tmpccmr1 = 0;\r
+\r
+  /* Check the parameters */\r
+  assert(IS_TIM_OCPRELOAD_STATE(TIM_OCPreload));\r
+\r
+  tmpccmr1 = TIMx->CCMR1;\r
+\r
+  /* Reset the OCPE Bit */\r
+  tmpccmr1 &= CCMR_OC24PE_Mask;\r
+\r
+  /* Enable or Disable the Output Compare Preload feature */\r
+  tmpccmr1 |= (u16)(TIM_OCPreload << 8);\r
+\r
+  TIMx->CCMR1 = (u16)tmpccmr1;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_OC3PreloadConfig\r
+* Description    : Enables or disables the TIMx peripheral Preload register on CCR3.\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+*                  - TIM_OCPreload: new state of the TIMx peripheral Preload\r
+*                    register\r
+*                    This parameter can be one of the following values:\r
+*                       - TIM_OCPreload_Enable\r
+*                       - TIM_OCPreload_Disable\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+void TIM_OC3PreloadConfig(TIM_TypeDef* TIMx, u16 TIM_OCPreload)\r
+{\r
+  u32 tmpccmr2 = 0;\r
+\r
+  /* Check the parameters */\r
+  assert(IS_TIM_OCPRELOAD_STATE(TIM_OCPreload));\r
+\r
+  tmpccmr2 = TIMx->CCMR2;\r
+\r
+  /* Reset the OCPE Bit */\r
+  tmpccmr2 &= CCMR_OC13PE_Mask;\r
+\r
+  /* Enable or Disable the Output Compare Preload feature */\r
+  tmpccmr2 |= TIM_OCPreload;\r
+\r
+  TIMx->CCMR2 = (u16)tmpccmr2;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_OC4PreloadConfig\r
+* Description    : Enables or disables the TIMx peripheral Preload register on CCR4.\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+*                  - TIM_OCPreload: new state of the TIMx peripheral Preload\r
+*                    register\r
+*                    This parameter can be one of the following values:\r
+*                       - TIM_OCPreload_Enable\r
+*                       - TIM_OCPreload_Disable\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+void TIM_OC4PreloadConfig(TIM_TypeDef* TIMx, u16 TIM_OCPreload)\r
+{\r
+  u32 tmpccmr2 = 0;\r
+\r
+  /* Check the parameters */\r
+  assert(IS_TIM_OCPRELOAD_STATE(TIM_OCPreload));\r
+\r
+  tmpccmr2 = TIMx->CCMR2;\r
+\r
+  /* Reset the OCPE Bit */\r
+  tmpccmr2 &= CCMR_OC24PE_Mask;\r
+\r
+  /* Enable or Disable the Output Compare Preload feature */\r
+  tmpccmr2 |= (u16)(TIM_OCPreload << 8);\r
+\r
+  TIMx->CCMR2 = (u16)tmpccmr2;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_OC1FastConfig\r
+* Description    : Configures the TIMx Output Compare 1 Fast feature.\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+*                  - TIM_OCFast: new state of the Output Compare Fast Enable Bit.\r
+*                    This parameter can be one of the following values:\r
+*                       - TIM_OCFast_Enable\r
+*                       - TIM_OCFast_Disable\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+void TIM_OC1FastConfig(TIM_TypeDef* TIMx, u16 TIM_OCFast)\r
+{\r
+  u32 tmpccmr1 = 0;\r
+\r
+  /* Check the parameters */\r
+  assert(IS_TIM_OCFAST_STATE(TIM_OCFast));\r
+\r
+  tmpccmr1 = TIMx->CCMR1;\r
+\r
+  /* Reset the OCFE Bit */\r
+  tmpccmr1 &= CCMR_OC13FE_Mask;\r
+\r
+  /* Enable or Disable the Output Compare Fast Bit */\r
+  tmpccmr1 |= TIM_OCFast;\r
+\r
+  TIMx->CCMR1 = (u16)tmpccmr1;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_OC2FastConfig\r
+* Description    : Configures the TIMx Output Compare 2 Fast feature.\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+*                  - TIM_OCFast: new state of the Output Compare Fast Enable Bit.\r
+*                    This parameter can be one of the following values:\r
+*                       - TIM_OCFast_Enable\r
+*                       - TIM_OCFast_Disable\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+void TIM_OC2FastConfig(TIM_TypeDef* TIMx, u16 TIM_OCFast)\r
+{\r
+  u32 tmpccmr1 = 0;\r
+\r
+  /* Check the parameters */\r
+  assert(IS_TIM_OCFAST_STATE(TIM_OCFast));\r
+\r
+  tmpccmr1 = TIMx->CCMR1;\r
+\r
+  /* Reset the OCFE Bit */\r
+  tmpccmr1 &= CCMR_OC24FE_Mask;\r
+\r
+  /* Enable or Disable the Output Compare Fast Bit */\r
+  tmpccmr1 |= (u16)(TIM_OCFast << 8);\r
+\r
+  TIMx->CCMR1 = (u16)tmpccmr1;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_OC3FastConfig\r
+* Description    : Configures the TIMx Output Compare 3 Fast feature.\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+*                  - TIM_OCFast: new state of the Output Compare Fast Enable Bit.\r
+*                    This parameter can be one of the following values:\r
+*                       - TIM_OCFast_Enable\r
+*                       - TIM_OCFast_Disable\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+void TIM_OC3FastConfig(TIM_TypeDef* TIMx, u16 TIM_OCFast)\r
+{\r
+  u32 tmpccmr2 = 0;\r
+\r
+  /* Check the parameters */\r
+  assert(IS_TIM_OCFAST_STATE(TIM_OCFast));\r
+\r
+  tmpccmr2 = TIMx->CCMR2;\r
+\r
+  /* Reset the OCFE Bit */\r
+  tmpccmr2 &= CCMR_OC13FE_Mask;\r
+\r
+  /* Enable or Disable the Output Compare Fast Bit */\r
+  tmpccmr2 |= TIM_OCFast;\r
+\r
+  TIMx->CCMR2 = (u16)tmpccmr2;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_OC4FastConfig\r
+* Description    : Configures the TIMx Output Compare 4 Fast feature.\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+*                  - TIM_OCFast: new state of the Output Compare Fast Enable Bit.\r
+*                    This parameter can be one of the following values:\r
+*                       - TIM_OCFast_Enable\r
+*                       - TIM_OCFast_Disable\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+void TIM_OC4FastConfig(TIM_TypeDef* TIMx, u16 TIM_OCFast)\r
+{\r
+  u32 tmpccmr2 = 0;\r
+\r
+  /* Check the parameters */\r
+  assert(IS_TIM_OCFAST_STATE(TIM_OCFast));\r
+\r
+  tmpccmr2 = TIMx->CCMR2;\r
+\r
+  /* Reset the OCFE Bit */\r
+  tmpccmr2 &= CCMR_OC24FE_Mask;\r
+\r
+  /* Enable or Disable the Output Compare Fast Bit */\r
+  tmpccmr2 |= (u16)(TIM_OCFast << 8);\r
+\r
+  TIMx->CCMR2 = (u16)tmpccmr2;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_UpdateDisableConfig\r
+* Description    : Enables or Disables the TIMx Update event.\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+*                  - Newstate: new state of the TIMx peripheral Preload register\r
+*                    This parameter can be: ENABLE or DISABLE.\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+void TIM_UpdateDisableConfig(TIM_TypeDef* TIMx, FunctionalState Newstate)\r
+{\r
+  u32 tmpcr1 = 0;\r
+\r
+  /* Check the parameters */\r
+  assert(IS_FUNCTIONAL_STATE(Newstate));\r
+\r
+  tmpcr1 = TIMx->CR1;\r
+\r
+  if (Newstate != DISABLE)\r
+  {\r
+    /* Set the Update Disable Bit */\r
+    tmpcr1 |= CR1_UDIS_Set;\r
+  }\r
+  else\r
+  {\r
+    /* Reset the Update Disable Bit */\r
+    tmpcr1 &= CR1_UDIS_Reset;\r
+  }\r
+\r
+  TIMx->CR1 = (u16)tmpcr1;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_EncoderInterfaceConfig\r
+* Description    : Configures the TIMx Encoder Interface.\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+*                  - TIM_EncoderMode: specifies the TIMx Encoder Mode.\r
+*                    This parameter can be one of the following values:\r
+*                       - TIM_EncoderMode_TI1: Counter counts on TI1FP1 edge\r
+*                         depending on TI2FP2 level.\r
+*                       - TIM_EncoderMode_TI2: Counter counts on TI2FP2 edge\r
+*                         depending on TI1FP1 level.\r
+*                       - TIM_EncoderMode_TI12: Counter counts on both TI1FP1 and\r
+*                         TI2FP2 edges depending on the level of the other input.\r
+*                  - TIM_IC1Polarity: specifies the IC1 Polarity\r
+*                    This parmeter can be one of the following values:\r
+*                        - TIM_ICPolarity_Falling\r
+*                        - TIM_ICPolarity_Rising\r
+*                  - TIM_IC2Polarity: specifies the IC2 Polarity\r
+*                    This parmeter can be one of the following values:\r
+*                       - TIM_ICPolarity_Falling\r
+*                       - TIM_ICPolarity_Rising\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+void TIM_EncoderInterfaceConfig(TIM_TypeDef* TIMx, u16 TIM_EncoderMode,\r
+                                u16 TIM_IC1Polarity, u16 TIM_IC2Polarity)\r
+{\r
+  u32 tmpsmcr = 0;\r
+  u32 tmpccmr1 = 0;\r
+  u32 tmpccer = 0;\r
+    \r
+  /* Check the parameters */\r
+  assert(IS_TIM_ENCODER_MODE(TIM_EncoderMode));\r
+  assert(IS_TIM_IC_POLARITY(TIM_IC1Polarity));\r
+  assert(IS_TIM_IC_POLARITY(TIM_IC2Polarity));\r
+\r
+  tmpsmcr = TIMx->SMCR;\r
+  tmpccmr1 = TIMx->CCMR1;\r
+  tmpccer = TIMx->CCER;\r
+\r
+  /* Set the encoder Mode */\r
+  tmpsmcr &= SMCR_SMS_Mask;\r
+  tmpsmcr |= TIM_EncoderMode;\r
+\r
+  /* Select the Capture Compare 1 and the Capture Compare 2 as input */\r
+  tmpccmr1 &= CCMR_CC13S_Mask & CCMR_CC24S_Mask;\r
+  tmpccmr1 |= CCMR_TI13Direct_Set | CCMR_TI24Direct_Set;\r
+\r
+  /* Set the TI1 and the TI2 Polarities */\r
+  tmpccer &= CCER_CC1P_Mask & CCER_CC2P_Mask;\r
+  tmpccer |= (TIM_IC1Polarity | (u16)((u16)TIM_IC2Polarity << 4));\r
+\r
+  TIMx->SMCR = (u16)tmpsmcr;\r
+\r
+  TIMx->CCMR1 = (u16)tmpccmr1;\r
+\r
+  TIMx->CCER = (u16)tmpccer;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_GenerateEvent\r
+* Description    : Configures the TIMx event to be generate by software.\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+*                  - TIM_EventSource: specifies the event source.\r
+*                    This parameter can be one or more of the following values:\r
+*                       - TIM_EventSource_Update: Timer update Event source\r
+*                       - TIM_EventSource_CC1: Timer Capture Compare 1 Event source\r
+*                       - TIM_EventSource_CC2: Timer Capture Compare 2 Event source\r
+*                       - TIM_EventSource_CC3: Timer Capture Compare 3 Event source\r
+*                       - TIM_EventSource_CC4: Timer Capture Compare 4 Event source\r
+*                       - TIM_EventSource_Trigger: Timer Trigger Event source\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+void TIM_GenerateEvent(TIM_TypeDef* TIMx, u16 TIM_EventSource)\r
+{\r
+  /* Check the parameters */\r
+  assert(IS_TIM_EVENT_SOURCE(TIM_EventSource));\r
+\r
+  /* Set the event sources */\r
+  TIMx->EGR |= TIM_EventSource;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_OC1PolarityConfig\r
+* Description    : Configures the TIMx channel 1 polarity.\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+*                  - TIM_OCPolarity: specifies the OC1 Polarity\r
+*                    This parmeter can be one of the following values:\r
+*                       - TIM_OCPolarity_High: Output Compare active high\r
+*                       - TIM_OCPolarity_Low: Output Compare active low\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+void TIM_OC1PolarityConfig(TIM_TypeDef* TIMx, u16 TIM_OCPolarity)\r
+{\r
+  u32 tmpccer = 0;\r
+\r
+  /* Check the parameters */\r
+  assert(IS_TIM_OC_POLARITY(TIM_OCPolarity));\r
+\r
+  tmpccer = TIMx->CCER;\r
+\r
+  /* Set or Reset the CC1P Bit */\r
+  tmpccer &= CCER_CC1P_Mask;\r
+  tmpccer |= TIM_OCPolarity;\r
+\r
+  TIMx->CCER = (u16)tmpccer;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_OC2PolarityConfig\r
+* Description    : Configures the TIMx channel 2 polarity.\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+*                  - TIM_OCPolarity: specifies the OC2 Polarity\r
+*                    This parmeter can be one of the following values:\r
+*                       - TIM_OCPolarity_High: Output Compare active high\r
+*                       - TIM_OCPolarity_Low: Output Compare active low\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+void TIM_OC2PolarityConfig(TIM_TypeDef* TIMx, u16 TIM_OCPolarity)\r
+{\r
+  u32 tmpccer = 0;\r
+\r
+  /* Check the parameters */\r
+  assert(IS_TIM_OC_POLARITY(TIM_OCPolarity));\r
+\r
+  tmpccer = TIMx->CCER;\r
+\r
+  /* Set or Reset the CC2P Bit */\r
+  tmpccer &= CCER_CC2P_Mask;\r
+  tmpccer |= (u16)((u16)TIM_OCPolarity << 4);\r
+\r
+  TIMx->CCER = (u16)tmpccer;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_OC3PolarityConfig\r
+* Description    : Configures the TIMx channel 3 polarity.\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+*                  - TIM_OCPolarity: specifies the OC3 Polarity\r
+*                    This parmeter can be one of the following values:\r
+*                       - TIM_OCPolarity_High: Output Compare active high\r
+*                       - TIM_OCPolarity_Low: Output Compare active low\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+void TIM_OC3PolarityConfig(TIM_TypeDef* TIMx, u16 TIM_OCPolarity)\r
+{\r
+  u32 tmpccer = 0;\r
+\r
+  /* Check the parameters */\r
+  assert(IS_TIM_OC_POLARITY(TIM_OCPolarity));\r
+\r
+  tmpccer = TIMx->CCER;\r
+\r
+  /* Set or Reset the CC3P Bit */\r
+  tmpccer &= CCER_CC3P_Mask;\r
+  tmpccer |= (u16)((u16)TIM_OCPolarity << 8);\r
+\r
+  TIMx->CCER = (u16)tmpccer;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_OC4PolarityConfig\r
+* Description    : Configures the TIMx channel 4 polarity.\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+*                  - TIM_OCPolarity: specifies the OC4 Polarity\r
+*                    This parmeter can be one of the following values:\r
+*                       - TIM_OCPolarity_High: Output Compare active high\r
+*                       - TIM_OCPolarity_Low: Output Compare active low\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+void TIM_OC4PolarityConfig(TIM_TypeDef* TIMx, u16 TIM_OCPolarity)\r
+{\r
+  u32 tmpccer = 0;\r
+\r
+  /* Check the parameters */\r
+  assert(IS_TIM_OC_POLARITY(TIM_OCPolarity));\r
+\r
+  tmpccer = TIMx->CCER;\r
+\r
+  /* Set or Reset the CC4P Bit */\r
+  tmpccer &= CCER_CC4P_Mask;\r
+  tmpccer |= (u16)((u16)TIM_OCPolarity << 12);\r
+\r
+  TIMx->CCER = (u16)tmpccer;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_UpdateRequestConfig\r
+* Description    : Configures the TIMx Update Request Interrupt source.\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+*                  - TIM_UpdateSource: specifies the Update source.\r
+*                    This parameter can be one of the following values:\r
+*                       - TIM_UpdateSource_Regular\r
+*                       - TIM_UpdateSource_Global\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+void TIM_UpdateRequestConfig(TIM_TypeDef* TIMx, u16 TIM_UpdateSource)\r
+{\r
+  u32 tmpcr1 = 0;\r
+\r
+  /* Check the parameters */\r
+  assert(IS_TIM_UPDATE_SOURCE(TIM_UpdateSource));\r
+\r
+  tmpcr1 = TIMx->CR1;\r
+\r
+  if (TIM_UpdateSource == TIM_UpdateSource_Regular)\r
+  {\r
+    /* Set the URS Bit */\r
+    tmpcr1 |= CR1_URS_Set;\r
+  }\r
+  else\r
+  {\r
+    /* Reset the URS Bit */\r
+    tmpcr1 &= CR1_URS_Reset;\r
+  }\r
+  TIMx->CR1 = (u16)tmpcr1;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_SelectHallSensor\r
+* Description    : Enables or disables the TIMx\92s Hall sensor interface.\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+*                  - Newstate: new state of the TIMx Hall sensor interface.\r
+*                    This parameter can be: ENABLE or DISABLE.\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+void TIM_SelectHallSensor(TIM_TypeDef* TIMx, FunctionalState Newstate)\r
+{\r
+  /* Check the parameters */\r
+  assert(IS_FUNCTIONAL_STATE(Newstate));\r
+\r
+  if (Newstate != DISABLE)\r
+  {\r
+    /* Set the TI1S Bit */\r
+    TIMx->CR2 |= CR2_TI1S_Set;\r
+  }\r
+  else\r
+  {\r
+    /* Reset the TI1S Bit */\r
+    TIMx->CR2 &= CR2_TI1S_Reset;\r
+  }\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_SelectOnePulseMode\r
+* Description    : Selects the TIMx\92s One Pulse Mode.\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+*                  - TIM_OPMode: specifies the OPM Mode to be used.\r
+*                    This parameter can be one of the following values:\r
+*                       - TIM_OPMode_Single\r
+*                       - TIM_OPMode_Repetitive\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+void TIM_SelectOnePulseMode(TIM_TypeDef* TIMx, u16 TIM_OPMode)\r
+{\r
+  u32 tmpcr1 = 0;\r
+\r
+  /* Check the parameters */\r
+  assert(IS_TIM_OPM_MODE(TIM_OPMode));\r
+\r
+  tmpcr1 = TIMx->CR1;\r
+\r
+  /* Reset the OPM Bit */\r
+  tmpcr1 &= CR1_OPM_Mask;\r
+\r
+  /* Configure the OPM Mode */\r
+  tmpcr1 |= TIM_OPMode;\r
+\r
+  TIMx->CR1 = (u16)tmpcr1;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_SelectOutputTrigger\r
+* Description    : Selects the TIMx Trigger Output Mode.\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+*                  - TIM_TRGOSource: specifies the Trigger Output source.\r
+*                    This paramter can be one of the following values:\r
+*                       - TIM_TRGOSource_Reset\r
+*                       - TIM_TRGOSource_Enable\r
+*                       - TIM_TRGOSource_Update\r
+*                       - TIM_TRGOSource_OC1\r
+*                       - TIM_TRGOSource_OC1Ref\r
+*                       - TIM_TRGOSource_OC2Ref\r
+*                       - TIM_TRGOSource_OC3Ref\r
+*                       - TIM_TRGOSource_OC4Ref\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+void TIM_SelectOutputTrigger(TIM_TypeDef* TIMx, u16 TIM_TRGOSource)\r
+{\r
+  u32 tmpcr2 = 0;\r
+\r
+  /* Check the parameters */\r
+  assert(IS_TIM_TRGO_SOURCE(TIM_TRGOSource));\r
+\r
+  tmpcr2 = TIMx->CR2;\r
+  /* Reset the MMS Bits */\r
+  tmpcr2 &= CR2_MMS_Mask;\r
+\r
+  /* Select the TRGO source */\r
+  tmpcr2 |=  TIM_TRGOSource;\r
+\r
+  TIMx->CR2 = (u16)tmpcr2;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_SelectSlaveMode\r
+* Description    : Selects the TIMx Slave Mode.\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+*                  - TIM_SlaveMode: specifies the Timer Slave Mode.\r
+*                    This paramter can be one of the following values:\r
+*                       - TIM_SlaveMode_Reset\r
+*                       - TIM_SlaveMode_Gated\r
+*                       - TIM_SlaveMode_Trigger\r
+*                       - TIM_SlaveMode_External1\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+void TIM_SelectSlaveMode(TIM_TypeDef* TIMx, u16 TIM_SlaveMode)\r
+{\r
+  u32 tmpsmcr = 0;\r
+\r
+  /* Check the parameters */\r
+  assert(IS_TIM_SLAVE_MODE(TIM_SlaveMode));\r
+\r
+  tmpsmcr = TIMx->SMCR;\r
+\r
+  /* Reset the SMS Bits */\r
+  tmpsmcr &= SMCR_SMS_Mask;\r
+\r
+  /* Select the Slave Mode */\r
+  tmpsmcr |= TIM_SlaveMode;\r
+\r
+  TIMx->SMCR = (u16)tmpsmcr;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_SelectMasterSlaveMode\r
+* Description    : Sets or Resets the TIMx Master/Slave Mode.\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+*                  - TIM_MasterSlaveMode: specifies the Timer Master Slave Mode.\r
+*                    This paramter can be one of the following values:\r
+*                       - TIM_MasterSlaveMode_Enable: synchronization between the\r
+*                         current timer and its slaves (through TRGO).\r
+*                       - TIM_MasterSlaveMode_Disable: No action\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+void TIM_SelectMasterSlaveMode(TIM_TypeDef* TIMx, u16 TIM_MasterSlaveMode)\r
+{\r
+  u32 tmpsmcr = 0;\r
+\r
+  /* Check the parameters */\r
+  assert(IS_TIM_MSM_STATE(TIM_MasterSlaveMode));\r
+\r
+  tmpsmcr = TIMx->SMCR;\r
+\r
+  /* Set or Reset the MSM Bit */\r
+  tmpsmcr &= SMCR_MSM_Mask;\r
+  tmpsmcr |= TIM_MasterSlaveMode;\r
+\r
+  TIMx->SMCR = (u16)tmpsmcr;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_SetAutoreload\r
+* Description    : Sets the TIMx Autoreload Register value\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+*                  - Autoreload: specifies the Autoreload register new value.\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+void TIM_SetAutoreload(TIM_TypeDef* TIMx, u16 Autoreload)\r
+{\r
+  /* Set the Autoreload Register value */\r
+  TIMx->ARR = Autoreload;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_SetCompare1\r
+* Description    : Sets the TIMx Capture Compare1 Register value\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+*                  - Compare1: specifies the Capture Compare1 register new value.\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+void TIM_SetCompare1(TIM_TypeDef* TIMx, u16 Compare1)\r
+{\r
+  /* Set the Capture Compare1 Register value */\r
+  TIMx->CCR1 = Compare1;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_SetCompare2\r
+* Description    : Sets the TIMx Capture Compare2 Register value\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+*                  - Compare2: specifies the Capture Compare2 register new value.\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+void TIM_SetCompare2(TIM_TypeDef* TIMx, u16 Compare2)\r
+{\r
+  /* Set the Capture Compare2 Register value */\r
+  TIMx->CCR2 = Compare2;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_SetCompare3\r
+* Description    : Sets the TIMx Capture Compare3 Register value\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+*                  - Compare3: specifies the Capture Compare3 register new value.\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+void TIM_SetCompare3(TIM_TypeDef* TIMx, u16 Compare3)\r
+{\r
+  /* Set the Capture Compare3 Register value */\r
+  TIMx->CCR3 = Compare3;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_SetCompare4\r
+* Description    : Sets the TIMx Capture Compare4 Register value\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+*                  - Compare4: specifies the Capture Compare4 register new value.\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+void TIM_SetCompare4(TIM_TypeDef* TIMx, u16 Compare4)\r
+{\r
+  /* Set the Capture Compare4 Register value */\r
+  TIMx->CCR4 = Compare4;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_SetIC1Prescaler\r
+* Description    : Sets the TIMx Input Capture 1 prescaler.\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+*                  - TIM_IC1Prescaler: specifies the Input Capture1 prescaler\r
+*                    new value.\r
+*                    This parameter can be one of the following values:\r
+*                       - TIM_ICPSC_DIV1: no prescaler\r
+*                       - TIM_ICPSC_DIV2: capture is done once every 2 events\r
+*                       - TIM_ICPSC_DIV4: capture is done once every 4 events\r
+*                       - TIM_ICPSC_DIV8: capture is done once every 8 events\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+void TIM_SetIC1Prescaler(TIM_TypeDef* TIMx, u16 TIM_IC1Prescaler)\r
+{\r
+  u32 tmpccmr1 = 0;\r
+\r
+  /* Check the parameters */\r
+  assert(IS_TIM_IC_PRESCALER(TIM_IC1Prescaler));\r
+\r
+  tmpccmr1 = TIMx->CCMR1;\r
+\r
+  /* Reset the IC1PSC Bits */\r
+  tmpccmr1 &= CCMR_IC13PSC_Mask;\r
+\r
+  /* Set the IC1PSC value */\r
+  tmpccmr1 |= TIM_IC1Prescaler;\r
+\r
+  TIMx->CCMR1 = (u16)tmpccmr1;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_SetIC2Prescaler\r
+* Description    : Sets the TIMx Input Capture 2 prescaler.\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+*                  - TIM_IC2Prescaler: specifies the Input Capture2 prescaler\r
+*                    new value.\r
+*                    This parameter can be one of the following values:\r
+*                       - TIM_ICPSC_DIV1: no prescaler\r
+*                       - TIM_ICPSC_DIV2: capture is done once every 2 events\r
+*                       - TIM_ICPSC_DIV4: capture is done once every 4 events\r
+*                       - TIM_ICPSC_DIV8: capture is done once every 8 events\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+void TIM_SetIC2Prescaler(TIM_TypeDef* TIMx, u16 TIM_IC2Prescaler)\r
+{\r
+  u32 tmpccmr1 = 0;\r
+\r
+  /* Check the parameters */\r
+  assert(IS_TIM_IC_PRESCALER(TIM_IC2Prescaler));\r
+\r
+  tmpccmr1 = TIMx->CCMR1;\r
+\r
+  /* Reset the IC2PSC Bits */\r
+  tmpccmr1 &= CCMR_IC24PSC_Mask;\r
+\r
+  /* Set the IC2PSC value */\r
+  tmpccmr1 |= (u16)((u16)TIM_IC2Prescaler << 8);\r
+\r
+  TIMx->CCMR1 = (u16)tmpccmr1;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_SetIC3Prescaler\r
+* Description    : Sets the TIMx Input Capture 3 prescaler.\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+*                  - TIM_IC3Prescaler: specifies the Input Capture3 prescaler\r
+*                    new value.\r
+*                    This parameter can be one of the following values:\r
+*                       - TIM_ICPSC_DIV1: no prescaler\r
+*                       - TIM_ICPSC_DIV2: capture is done once every 2 events\r
+*                       - TIM_ICPSC_DIV4: capture is done once every 4 events\r
+*                       - TIM_ICPSC_DIV8: capture is done once every 8 events\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+void TIM_SetIC3Prescaler(TIM_TypeDef* TIMx, u16 TIM_IC3Prescaler)\r
+{\r
+  u32 tmpccmr2 = 0;\r
+\r
+  /* Check the parameters */\r
+  assert(IS_TIM_IC_PRESCALER(TIM_IC3Prescaler));\r
+\r
+  tmpccmr2 = TIMx->CCMR2;\r
+\r
+  /* Reset the IC3PSC Bits */\r
+  tmpccmr2 &= CCMR_IC13PSC_Mask;\r
+\r
+  /* Set the IC3PSC value */\r
+  tmpccmr2 |= TIM_IC3Prescaler;\r
+\r
+  TIMx->CCMR2 = (u16)tmpccmr2;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_SetIC4Prescaler\r
+* Description    : Sets the TIMx Input Capture 4 prescaler.\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+*                  - TIM_IC4Prescaler: specifies the Input Capture4 prescaler\r
+*                    new value.\r
+*                    This parameter can be one of the following values:\r
+*                      - TIM_ICPSC_DIV1: no prescaler\r
+*                      - TIM_ICPSC_DIV2: capture is done once every 2 events\r
+*                      - TIM_ICPSC_DIV4: capture is done once every 4 events\r
+*                      - TIM_ICPSC_DIV8: capture is done once every 8 events\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+void TIM_SetIC4Prescaler(TIM_TypeDef* TIMx, u16 TIM_IC4Prescaler)\r
+{\r
+  u32 tmpccmr2 = 0;\r
+   \r
+  /* Check the parameters */\r
+  assert(IS_TIM_IC_PRESCALER(TIM_IC4Prescaler));\r
+\r
+  tmpccmr2 = TIMx->CCMR2;\r
+\r
+  /* Reset the IC4PSC Bits */\r
+  tmpccmr2 &= CCMR_IC24PSC_Mask;\r
+\r
+  /* Set the IC4PSC value */\r
+  tmpccmr2 |= (u16)((u16)TIM_IC4Prescaler << 8);\r
+\r
+  TIMx->CCMR2 = (u16)tmpccmr2;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_SetClockDivision\r
+* Description    : Sets the TIMx Clock Division value.\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+*                  - TIM_CKD: specifies the clock division value.\r
+*                    This parameter can be one of the following value:\r
+*                       - TIM_CKD_DIV1: TDTS = Tck_tim\r
+*                       - TIM_CKD_DIV2: TDTS = 2*Tck_tim\r
+*                       - TIM_CKD_DIV4: TDTS = 4*Tck_tim\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+void TIM_SetClockDivision(TIM_TypeDef* TIMx, u16 TIM_CKD)\r
+{\r
+  u32 tmpcr1 = 0;\r
+\r
+  /* Check the parameters */\r
+  assert(IS_TIM_CKD_DIV(TIM_CKD));\r
+\r
+  tmpcr1 = TIMx->CR1;\r
+\r
+  /* Reset the CKD Bits */\r
+  tmpcr1 &= CR1_CKD_Mask;\r
+\r
+  /* Set the CKD value */\r
+  tmpcr1 |= TIM_CKD;\r
+\r
+  TIMx->CR1 = (u16)tmpcr1;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_GetCapture1\r
+* Description    : Gets the TIMx Input Capture 1 value.\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+* Output         : None\r
+* Return         : Capture Compare 1 Register value.\r
+*******************************************************************************/\r
+u16 TIM_GetCapture1(TIM_TypeDef* TIMx)\r
+{\r
+  /* Get the Capture 1 Register value */\r
+  return TIMx->CCR1;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_GetCapture2\r
+* Description    : Gets the TIMx Input Capture 2 value.\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+* Output         : None\r
+* Return         : Capture Compare 2 Register value.\r
+*******************************************************************************/\r
+u16 TIM_GetCapture2(TIM_TypeDef* TIMx)\r
+{\r
+  /* Get the Capture 2 Register value */\r
+  return TIMx->CCR2;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_GetCapture3\r
+* Description    : Gets the TIMx Input Capture 3 value.\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+* Output         : None\r
+* Return         : Capture Compare 3 Register value.\r
+*******************************************************************************/\r
+u16 TIM_GetCapture3(TIM_TypeDef* TIMx)\r
+{\r
+  /* Get the Capture 3 Register value */\r
+  return TIMx->CCR3;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_GetCapture4\r
+* Description    : Gets the TIMx Input Capture 4 value.\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+* Output         : None\r
+* Return         : Capture Compare 4 Register value.\r
+*******************************************************************************/\r
+u16 TIM_GetCapture4(TIM_TypeDef* TIMx)\r
+{\r
+  /* Get the Capture 4 Register value */\r
+  return TIMx->CCR4;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_GetCounter\r
+* Description    : Gets the TIMx Counter value.\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+* Output         : None\r
+* Return         : Counter Register value.\r
+*******************************************************************************/\r
+u16 TIM_GetCounter(TIM_TypeDef* TIMx)\r
+{\r
+  /* Get the Counter Register value */\r
+  return TIMx->CNT;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_GetPrescaler\r
+* Description    : Gets the TIMx Prescaler value.\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+* Output         : None\r
+* Return         : Prescaler Register value.\r
+*******************************************************************************/\r
+u16 TIM_GetPrescaler(TIM_TypeDef* TIMx)\r
+{\r
+  /* Get the Prescaler Register value */\r
+  return TIMx->PSC;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_GetFlagStatus\r
+* Description    : Checks whether the specified TIMx flag is set or not.\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+*                  - TIM_FLAG: specifies the flag to check.\r
+*                    This parameter can be one of the following values:\r
+*                       - TIM_FLAG_Update: Timer update Flag\r
+*                       - TIM_FLAG_CC1: Timer Capture Compare 1 Flag\r
+*                       - TIM_FLAG_CC2: Timer Capture Compare 2 Flag\r
+*                       - TIM_FLAG_CC3: Timer Capture Compare 3 Flag\r
+*                       - TIM_FLAG_CC4: Timer Capture Compare 4 Flag\r
+*                       - TIM_FLAG_Trigger: Timer Trigger Flag\r
+*                       - TIM_FLAG_CC1OF: Timer Capture Compare 1 overcapture Flag\r
+*                       - TIM_FLAG_CC2OF: Timer Capture Compare 2 overcapture Flag\r
+*                       - TIM_FLAG_CC3OF: Timer Capture Compare 3 overcapture Flag\r
+*                       - TIM_FLAG_CC4OF: Timer Capture Compare 4 overcapture Flag\r
+* Output         : None\r
+* Return         : The new state of TIM_FLAG (SET or RESET).\r
+*******************************************************************************/\r
+FlagStatus TIM_GetFlagStatus(TIM_TypeDef* TIMx, u16 TIM_FLAG)\r
+{\r
+  FlagStatus bitstatus = RESET;\r
+\r
+  /* Check the parameters */\r
+  assert(IS_TIM_GET_FLAG(TIM_FLAG));\r
+\r
+  if ((TIMx->SR & TIM_FLAG) != (u16)RESET )\r
+  {\r
+    bitstatus = SET;\r
+  }\r
+  else\r
+  {\r
+    bitstatus = RESET;\r
+  }\r
+  return bitstatus;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_ClearFlag\r
+* Description    : Clears the TIMx's pending flags.\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+*                  - TIM_FLAG: specifies the flag bit to clear.\r
+*                    This parameter can be any combination of the following values:\r
+*                       - TIM_FLAG_Update: Timer update Flag\r
+*                       - TIM_FLAG_CC1: Timer Capture Compare 1 Flag\r
+*                       - TIM_FLAG_CC2: Timer Capture Compare 2 Flag\r
+*                       - TIM_FLAG_CC3: Timer Capture Compare 3 Flag\r
+*                       - TIM_FLAG_CC4: Timer Capture Compare 4 Flag\r
+*                       - TIM_FLAG_Trigger: Timer Trigger Flag\r
+*                       - TIM_FLAG_CC1OF: Timer Capture Compare 1 overcapture Flag\r
+*                       - TIM_FLAG_CC2OF: Timer Capture Compare 2 overcapture Flag\r
+*                       - TIM_FLAG_CC3OF: Timer Capture Compare 3 overcapture Flag\r
+*                       - TIM_FLAG_CC4OF: Timer Capture Compare 4 overcapture Flag\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+void TIM_ClearFlag(TIM_TypeDef* TIMx, u16 TIM_FLAG)\r
+{\r
+  /* Check the parameters */\r
+  assert(IS_TIM_CLEAR_FLAG(TIM_FLAG));\r
+\r
+  /* Clear the flags */\r
+  TIMx->SR &= (u16)~TIM_FLAG;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_GetITStatus\r
+* Description    : Checks whether the TIMx interrupt has occurred or not.\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+*                  - TIM_IT: specifies the TIM interrupt source to check.\r
+*                    This parameter can be one of the following values:\r
+*                         - TIM_IT_Update: Timer update Interrupt source\r
+*                         - TIM_IT_CC1: Timer Capture Compare 1 Interrupt source\r
+*                         - TIM_IT_CC2: Timer Capture Compare 2 Interrupt source\r
+*                         - TIM_IT_CC3: Timer Capture Compare 3 Interrupt source\r
+*                         - TIM_IT_CC4: Timer Capture Compare 4 Interrupt source\r
+*                         - TIM_IT_Trigger: Timer Trigger Interrupt source\r
+* Output         : None\r
+* Return         : The new state of the TIM_IT(SET or RESET).\r
+*******************************************************************************/\r
+ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, u16 TIM_IT)\r
+{\r
+  ITStatus bitstatus = RESET;\r
+  \r
+  u16 itstatus = 0x0, itenable = 0x0;\r
+\r
+  /* Check the parameters */\r
+  assert(IS_TIM_GET_IT(TIM_IT));\r
+  \r
+  itstatus = TIMx->SR & TIM_IT;\r
+  \r
+  itenable = TIMx->DIER & TIM_IT;\r
+\r
+  if ((itstatus != (u16)RESET)  && (itenable != (u16)RESET))\r
+  {\r
+    bitstatus = SET;\r
+  }\r
+  else\r
+  {\r
+    bitstatus = RESET;\r
+  }\r
+  return bitstatus;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TIM_ClearITPendingBit\r
+* Description    : Clears the TIMx's interrupt pending bits.\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+*                  - TIM_IT: specifies the pending bit to clear.\r
+*                    This parameter can be any combination of the following values:\r
+*                       - TIM_IT_Update: Timer update Interrupt source\r
+*                       - TIM_IT_CC1: Timer Capture Compare 1 Interrupt source\r
+*                       - TIM_IT_CC2: Timer Capture Compare 2 Interrupt source\r
+*                       - TIM_IT_CC3: Timer Capture Compare 3 Interrupt source\r
+*                       - TIM_IT_CC4: Timer Capture Compare 4 Interrupt source\r
+*                       - TIM_IT_Trigger: Timer Trigger Interrupt source\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, u16 TIM_IT)\r
+{\r
+  /* Check the parameters */\r
+  assert(IS_TIM_IT(TIM_IT));\r
+  \r
+  /* Clear the IT pending Bit */\r
+  TIMx->SR &= (u16)~TIM_IT;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : PWMInput_Config\r
+* Description    : Configures the TIM peripheral according to the specified\r
+*                  parameters in the TIM_ICInitStruct to measure an external PWM\r
+*                  signal.\r
+* Input          : - TIM_ICInitStruct: pointer to a TIM_ICInitTypeDef structure\r
+*                    that contains the configuration information for the specified\r
+*                    TIM peripheral.\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+static void PWMI_Config(TIM_TypeDef* TIMx, TIM_ICInitTypeDef* TIM_ICInitStruct)\r
+{\r
+  u8 ICPolarity = TIM_ICPolarity_Rising;\r
+  u8 ICSelection = TIM_ICSelection_DirectTI;\r
+\r
+  /* Select the Opposite Input Polarity */\r
+  if (TIM_ICInitStruct->TIM_ICPolarity == TIM_ICPolarity_Rising)\r
+  {\r
+    ICPolarity = TIM_ICPolarity_Falling;\r
+  }\r
+  else\r
+  {\r
+    ICPolarity = TIM_ICPolarity_Rising;\r
+  }\r
+\r
+  /* Select the Opposite Input */\r
+  if (TIM_ICInitStruct->TIM_ICSelection == TIM_ICSelection_DirectTI)\r
+  {\r
+    ICSelection = TIM_ICSelection_IndirectTI;\r
+  }\r
+  else\r
+  {\r
+    ICSelection = TIM_ICSelection_DirectTI;\r
+  }\r
+\r
+  if (TIM_ICInitStruct->TIM_Channel == TIM_Channel_1)\r
+  {\r
+    /* TI1 Configuration */\r
+    TI1_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity, TIM_ICInitStruct->TIM_ICSelection,\r
+               TIM_ICInitStruct->TIM_ICFilter);\r
+\r
+    /* Set the Input Capture Prescaler value */\r
+    TIM_SetIC1Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler);\r
+\r
+    /* TI2 Configuration */\r
+    TI2_Config(TIMx, ICPolarity, ICSelection, TIM_ICInitStruct->TIM_ICFilter);\r
+\r
+    /* Set the Input Capture Prescaler value */\r
+    TIM_SetIC2Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler);\r
+  }\r
+  else\r
+  {     \r
+    /* TI1 Configuration */\r
+    TI2_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity, TIM_ICInitStruct->TIM_ICSelection,\r
+               TIM_ICInitStruct->TIM_ICFilter);\r
+\r
+    /* Set the Input Capture Prescaler value */\r
+    TIM_SetIC2Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler);\r
+\r
+    /* TI2 Configuration */\r
+    TI1_Config(TIMx, ICPolarity, ICSelection, TIM_ICInitStruct->TIM_ICFilter);\r
+\r
+    /* Set the Input Capture Prescaler value */\r
+    TIM_SetIC1Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler);\r
+  }\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TI1_Config\r
+* Description    : Configure the TI1 as Input.\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+*                  - TIM_ICPolarity : The Input Polarity.\r
+*                    This parameter can be one of the following values:\r
+*                       - TIM_ICPolarity_Rising\r
+*                       - TIM_ICPolarity_Falling\r
+*                  - TIM_ICSelection: specifies the input to be used.\r
+*                    This parameter can be one of the following values:\r
+*                       - TIM_ICSelection_DirectTI: TIM Input 1 is selected to\r
+*                         be connected to IC1.\r
+*                       - TIM_ICSelection_IndirectTI: TIM Input 1 is selected to\r
+*                         be connected to IC2.\r
+*                       - TIM_ICSelection_TRGI: TIM Input 1 is selected to be\r
+*                         connected to TRGI.\r
+*                  - TIM_ICFilter: Specifies the Input Capture Filter.\r
+*                    This parameter must be a value between 0x00 and 0x0F.\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+static void TI1_Config(TIM_TypeDef* TIMx, u16 TIM_ICPolarity, u16 TIM_ICSelection,\r
+                       u8 TIM_ICFilter)\r
+{\r
+  u32 tmpccmr1 = 0, tmpccer = 0;\r
+\r
+  tmpccmr1 = TIMx->CCMR1;\r
+  tmpccer = TIMx->CCER;\r
+\r
+  /* Disable the Channel 1: Reset the CCE Bit */\r
+  TIMx->CCER &= CCRE_CC1E_Reset;\r
+\r
+  /* Select the Input and set the filter */\r
+  tmpccmr1 &= CCMR_CC13S_Mask & CCMR_IC13F_Mask;\r
+  tmpccmr1 |= TIM_ICSelection | (u16)((u16)TIM_ICFilter << 4);\r
+\r
+  /* Select the Polarity  and set the CCE Bit */\r
+  tmpccer &= CCER_CC1P_Mask & CCRE_CC1E_Mask;\r
+  tmpccer |= TIM_ICPolarity | CCRE_CC1E_Set;\r
+\r
+  TIMx->CCMR1 = 0x0000;\r
+  TIMx->CCMR1 = (u16)tmpccmr1;\r
+  TIMx->CCER = (u16)tmpccer;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TI2_Config\r
+* Description    : Configure the TI2 as Input.\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+*                  - TIM_ICPolarity : The Input Polarity.\r
+*                    This parameter can be one of the following values:\r
+*                       - TIM_ICPolarity_Rising\r
+*                       - TIM_ICPolarity_Falling\r
+*                  - TIM_ICSelection: specifies the input to be used.\r
+*                    This parameter can be one of the following values:\r
+*                       - TIM_ICSelection_DirectTI: TIM Input 2 is selected to\r
+*                         be connected to IC2.\r
+*                       - TIM_ICSelection_IndirectTI: TIM Input 2 is selected to\r
+*                         be connected to IC1.\r
+*                       - TIM_ICSelection_TRGI: TIM Input 2 is selected to be\r
+*                         connected to TRGI.\r
+*                  - TIM_ICFilter: Specifies the Input Capture Filter.\r
+*                    This parameter must be a value between 0x00 and 0x0F.\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+static void TI2_Config(TIM_TypeDef* TIMx, u16 TIM_ICPolarity, u16 TIM_ICSelection,\r
+                       u8 TIM_ICFilter)\r
+{\r
+  u32 tmpccmr1 = 0, tmpccer = 0, tmp = 0;\r
+\r
+  tmpccmr1 = TIMx->CCMR1;\r
+  tmpccer = TIMx->CCER;\r
+  tmp = (u16)((u16)TIM_ICPolarity << 4);\r
+\r
+  /* Disable the Channel 2: Reset the CCE Bit */\r
+  TIMx->CCER &= CCRE_CC2E_Reset;\r
+\r
+  /* Select the Input and set the filter */\r
+  tmpccmr1 &= CCMR_CC24S_Mask & CCMR_IC24F_Mask;\r
+  tmpccmr1 |= (u16)((u16)TIM_ICFilter << 12);\r
+  tmpccmr1 |= (u16)((u16)TIM_ICSelection << 8);\r
+\r
+  /* Select the Polarity  and set the CCE Bit */\r
+  tmpccer &= CCER_CC2P_Mask & CCRE_CC2E_Mask;\r
+  tmpccer |=  tmp | CCRE_CC2E_Set;\r
+\r
+  TIMx->CCMR1 = (u16)tmpccmr1 ;\r
+  TIMx->CCER = (u16)tmpccer;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TI3_Config\r
+* Description    : Configure the TI3 as Input.\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+*                  - TIM_ICPolarity : The Input Polarity.\r
+*                    This parameter can be one of the following values:\r
+*                       - TIM_ICPolarity_Rising\r
+*                       - TIM_ICPolarity_Falling\r
+*                  - TIM_ICSelection: specifies the input to be used.\r
+*                    This parameter can be one of the following values:\r
+*                       - TIM_ICSelection_DirectTI: TIM Input 3 is selected to\r
+*                         be connected to IC3.\r
+*                       - TIM_ICSelection_IndirectTI: TIM Input 3 is selected to\r
+*                         be connected to IC4.\r
+*                       - TIM_ICSelection_TRGI: TIM Input 3 is selected to be\r
+*                         connected to TRGI.\r
+*                  - TIM_ICFilter: Specifies the Input Capture Filter.\r
+*                    This parameter must be a value between 0x00 and 0x0F.\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+static void TI3_Config(TIM_TypeDef* TIMx, u16 TIM_ICPolarity, u16 TIM_ICSelection,\r
+                       u8 TIM_ICFilter)\r
+{\r
+  u32 tmpccmr2 = 0, tmpccer = 0, tmp = 0;\r
+\r
+  tmpccmr2 = TIMx->CCMR2;\r
+  tmpccer = TIMx->CCER;\r
+  tmp = (u16)((u16)TIM_ICPolarity << 8);\r
+\r
+  /* Disable the Channel 3: Reset the CCE Bit */\r
+  TIMx->CCER &= CCRE_CC3E_Reset;\r
+\r
+  /* Select the Input and set the filter */\r
+  tmpccmr2 &= CCMR_CC13S_Mask & CCMR_IC13F_Mask;\r
+  tmpccmr2 |= TIM_ICSelection | (u16)((u16)TIM_ICFilter << 4);\r
+\r
+  /* Select the Polarity  and set the CCE Bit */\r
+  tmpccer &= CCER_CC1P_Mask & CCRE_CC1E_Mask;\r
+  tmpccer |= tmp | CCRE_CC3E_Set;\r
+\r
+  TIMx->CCMR2 = (u16)tmpccmr2;\r
+  TIMx->CCER = (u16)tmpccer;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : TI4_Config\r
+* Description    : Configure the TI1 as Input.\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+*                  - TIM_ICPolarity : The Input Polarity.\r
+*                    This parameter can be one of the following values:\r
+*                       - TIM_ICPolarity_Rising\r
+*                       - TIM_ICPolarity_Falling\r
+*                  - TIM_ICSelection: specifies the input to be used.\r
+*                    This parameter can be one of the following values:\r
+*                       - TIM_ICSelection_DirectTI: TIM Input 4 is selected to\r
+*                         be connected to IC4.\r
+*                       - TIM_ICSelection_IndirectTI: TIM Input 4 is selected to\r
+*                         be connected to IC3.\r
+*                       - TIM_ICSelection_TRGI: TIM Input 4 is selected to be\r
+*                         connected to TRGI.\r
+*                  - TIM_ICFilter: Specifies the Input Capture Filter.\r
+*                    This parameter must be a value between 0x00 and 0x0F.\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+static void TI4_Config(TIM_TypeDef* TIMx, u16 TIM_ICPolarity, u16 TIM_ICSelection,\r
+                       u8 TIM_ICFilter)\r
+{\r
+  u32 tmpccmr2 = 0, tmpccer = 0, tmp = 0;\r
+\r
+  tmpccmr2 = TIMx->CCMR2;\r
+  tmpccer = TIMx->CCER;\r
+  tmp = (u16)((u16)TIM_ICPolarity << 12);\r
+\r
+  /* Disable the Channel 4: Reset the CCE Bit */\r
+  TIMx->CCER &= CCRE_CC4E_Reset;\r
+\r
+  /* Select the Input and set the filter */\r
+  tmpccmr2 &= CCMR_CC24S_Mask & CCMR_IC24F_Mask;\r
+  tmpccmr2 |= (u16)((u16)TIM_ICSelection << 8) | (u16)((u16)TIM_ICFilter << 12);\r
+\r
+  /* Select the Polarity  and set the CCE Bit */\r
+  tmpccer &= CCER_CC4P_Mask & CCRE_CC4E_Mask;\r
+  tmpccer |= tmp | CCRE_CC4E_Set;\r
+\r
+  TIMx->CCMR2 = (u16)tmpccmr2;\r
+  TIMx->CCER = (u16)tmpccer ;\r
+}\r
+\r
+/*******************************************************************************\r
+* Function Name  : ETR_Config\r
+* Description    : Configure the External Trigger\r
+* Input          : - TIMx: where x can be 2, 3 or 4 to select the TIM peripheral.\r
+*                  - TIM_ExtTRGPrescaler: The external Trigger Prescaler.\r
+*                    This parameter can be one of the following values:\r
+*                       - TIM_ExtTRGPSC_OFF\r
+*                       - TIM_ExtTRGPSC_DIV2\r
+*                       - TIM_ExtTRGPSC_DIV4\r
+*                       - TIM_ExtTRGPSC_DIV8\r
+*                  - TIM_ExtTRGPolarity: The external Trigger Polarity.\r
+*                    This parameter can be one of the following values:\r
+*                       - TIM_ExtTRGPolarity_Inverted\r
+*                       - TIM_ExtTRGPolarity_NonInverted\r
+*                  - ExtTRGFilter: External Trigger Filter.\r
+*                    This parameter must be a value between 0x00 and 0x0F.\r
+* Output         : None\r
+* Return         : None\r
+*******************************************************************************/\r
+static void ETR_Config(TIM_TypeDef* TIMx, u16 TIM_ExtTRGPrescaler, u16 TIM_ExtTRGPolarity,\r
+                       u8 ExtTRGFilter)\r
+{\r
+  u32 tmpsmcr = 0;\r
+\r
+  tmpsmcr = TIMx->SMCR;\r
+\r
+  /* Set the Prescaler, the Filter value and the Polarity */\r
+  tmpsmcr &= SMCR_ETR_Mask;\r
+  tmpsmcr |= TIM_ExtTRGPrescaler | TIM_ExtTRGPolarity | (u16)((u16)ExtTRGFilter << 8);\r
+\r
+  TIMx->SMCR = (u16)tmpsmcr;\r
+}\r
+/******************* (C) COPYRIGHT 2007 STMicroelectronics *****END OF FILE****/\r
diff --git a/Demo/CORTEX_STM32F103_Primer_GCC/bitmap.h b/Demo/CORTEX_STM32F103_Primer_GCC/bitmap.h
new file mode 100644 (file)
index 0000000..2d0c5d0
--- /dev/null
@@ -0,0 +1,3361 @@
+/*\r
+       FreeRTOS.org V4.6.1 - Copyright (C) 2003-2007 Richard Barry.\r
+\r
+       This file is part of the FreeRTOS.org distribution.\r
+\r
+       FreeRTOS.org is free software; you can redistribute it and/or modify\r
+       it under the terms of the GNU General Public License as published by\r
+       the Free Software Foundation; either version 2 of the License, or\r
+       (at your option) any later version.\r
+\r
+       FreeRTOS.org is distributed in the hope that it will be useful,\r
+       but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+       GNU General Public License for more details.\r
+\r
+       You should have received a copy of the GNU General Public License\r
+       along with FreeRTOS.org; if not, write to the Free Software\r
+       Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\r
+\r
+       A special exception to the GPL can be applied should you wish to distribute\r
+       a combined work that includes FreeRTOS.org, without being obliged to provide\r
+       the source code for any proprietary components.  See the licensing section\r
+       of http://www.FreeRTOS.org for full details of how and when the exception\r
+       can be applied.\r
+\r
+       ***************************************************************************\r
+       See http://www.FreeRTOS.org for documentation, latest information, license\r
+       and contact details.  Please ensure to read the configuration and relevant\r
+       port sections of the online documentation.\r
+\r
+       Also see http://www.SafeRTOS.com a version that has been certified for use\r
+       in safety critical systems, plus commercial licensing, development and\r
+       support options.\r
+       ***************************************************************************\r
+*/\r
+\r
+/* FreeRTOS.org Logo as a 16bit bitmap. */\r
+\r
+#ifndef BITMAP_H\r
+#define BITMAP_H\r
+\r
+const unsigned short pucImage[] =\r
+{\r
+0xffff,\r
+0xffff,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xffff,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xc318,\r
+0x0842,\r
+0x8210,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0c63,\r
+0xffff,\r
+0x0842,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0x0000,\r
+0x8631,\r
+0x38c6,\r
+0x38c6,\r
+0x38c6,\r
+0x38c6,\r
+0xfbde,\r
+0xffff,\r
+0xbad6,\r
+0x38c6,\r
+0xcb5a,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x3ce7,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0x0000,\r
+0x0842,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0x4529,\r
+0x0000,\r
+0x0000,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0000,\r
+0x8210,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x0842,\r
+0x718c,\r
+0xffff,\r
+0x8e73,\r
+0xb6b5,\r
+0xffff,\r
+0x0c63,\r
+0x0000,\r
+0x0000,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0c63,\r
+0xffff,\r
+0x0842,\r
+0x0c63,\r
+0xffff,\r
+0x0c63,\r
+0x0000,\r
+0x0000,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0c63,\r
+0xffff,\r
+0x0c63,\r
+0x0000,\r
+0x0000,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x031a,\r
+0xe73c,\r
+0x2b5f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x294e,\r
+0xa73c,\r
+0xc108,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x4000,\r
+0x452b,\r
+0x6845,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x2845,\r
+0x031a,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x8422,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x0000,\r
+0x8631,\r
+0x38c6,\r
+0x38c6,\r
+0x38c6,\r
+0xf7bd,\r
+0x38c6,\r
+0x38c6,\r
+0x8631,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x8108,\r
+0xa94d,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x0422,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xc319,\r
+0x2c67,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xe94d,\r
+0xc210,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xc210,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x4211,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x0000,\r
+0x0842,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0x0842,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x6a56,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x0109,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x431a,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xeb5e,\r
+0x0211,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xe94d,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x2634,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x0000,\r
+0x0421,\r
+0x3084,\r
+0x3084,\r
+0x3084,\r
+0xb294,\r
+0xffff,\r
+0xf7bd,\r
+0x8210,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x8422,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x6c67,\r
+0x294e,\r
+0x2a56,\r
+0x2a56,\r
+0x2a56,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xc108,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x2c67,\r
+0x2a56,\r
+0x2a56,\r
+0xac67,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x6a56,\r
+0x4108,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x052b,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xb294,\r
+0xffff,\r
+0x494a,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xa94d,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xe94d,\r
+0x4000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xc422,\r
+0x2845,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xa94d,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xec67,\r
+0x452b,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x8108,\r
+0x2845,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x852b,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x4108,\r
+0xac67,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x0211,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0c63,\r
+0x38c6,\r
+0x494a,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x2c67,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x852b,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x8108,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x673c,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xaa56,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xeb5e,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x694d,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xa73c,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x0000,\r
+0x0000,\r
+0x8210,\r
+0xf39c,\r
+0xbef7,\r
+0xffff,\r
+0x75ad,\r
+0x0421,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xaa56,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x2a56,\r
+0x4000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0423,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xc108,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x8422,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x0211,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x431a,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xc108,\r
+0x0000,\r
+0x0000,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x0000,\r
+0x0000,\r
+0x38c6,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0x79ce,\r
+0x4108,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xea55,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x2c67,\r
+0x452b,\r
+0x0211,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xe844,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x6a56,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x4000,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x8422,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x4108,\r
+0x6b5f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x452b,\r
+0x0422,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x0000,\r
+0x8631,\r
+0xffff,\r
+0x38c6,\r
+0xf7bd,\r
+0xf7bd,\r
+0xb294,\r
+0xffff,\r
+0x494a,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x452b,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xab5e,\r
+0x852b,\r
+0xc108,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x294e,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xe844,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xeb5e,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x8633,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x8633,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x0000,\r
+0x0c63,\r
+0xffff,\r
+0x0842,\r
+0x34a5,\r
+0xf39c,\r
+0x4108,\r
+0xffff,\r
+0x0c63,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x294e,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xec67,\r
+0x8633,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x2a56,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x2634,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x2a56,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x2634,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xa844,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x0000,\r
+0x8a52,\r
+0xffff,\r
+0x8631,\r
+0x34a5,\r
+0xf7bd,\r
+0xf39c,\r
+0xffff,\r
+0x494a,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x4000,\r
+0xa73c,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xec67,\r
+0x273c,\r
+0x0000,\r
+0x0000,\r
+0xe94d,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x673c,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xaa56,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x273c,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0109,\r
+0x6a56,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x0000,\r
+0x4529,\r
+0xffff,\r
+0x0c63,\r
+0x34a5,\r
+0xffff,\r
+0xffff,\r
+0xb6b5,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xc108,\r
+0x8633,\r
+0x2a56,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xec67,\r
+0xc210,\r
+0x0000,\r
+0xa94d,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xa94d,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x6c67,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x052b,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x4000,\r
+0xeb5e,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xa94d,\r
+0x273c,\r
+0x8422,\r
+0x0422,\r
+0x2845,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x0000,\r
+0x0000,\r
+0x0842,\r
+0x4529,\r
+0xcf7b,\r
+0xb6b5,\r
+0x0c63,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xc108,\r
+0x052b,\r
+0xeb5e,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x0423,\r
+0x0000,\r
+0xc633,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x2b5f,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0211,\r
+0xec67,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x031a,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x052b,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xa94d,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x273c,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xc318,\r
+0xc318,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x4108,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x273c,\r
+0x0000,\r
+0x0422,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x0422,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xa73c,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x4000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xe73c,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x4633,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x2634,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x0000,\r
+0x0000,\r
+0x0421,\r
+0xbad6,\r
+0xffff,\r
+0xffff,\r
+0x3ce7,\r
+0x0842,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x2b5f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xc633,\r
+0x0000,\r
+0x4000,\r
+0x6c67,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xeb5e,\r
+0x8108,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x8211,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x6845,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xe94d,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xe94d,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x273c,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x0000,\r
+0x0000,\r
+0xfbde,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0x3ce7,\r
+0x8210,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x2634,\r
+0xa94d,\r
+0x452b,\r
+0x0422,\r
+0x031a,\r
+0x0422,\r
+0xc422,\r
+0xea55,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xc319,\r
+0x0000,\r
+0x0000,\r
+0x452b,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x2b5f,\r
+0x4633,\r
+0x031a,\r
+0x0422,\r
+0x673c,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xec67,\r
+0x8319,\r
+0x0000,\r
+0x0422,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x8108,\r
+0x0000,\r
+0xa73c,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x6a56,\r
+0x273c,\r
+0x031a,\r
+0x0422,\r
+0x2845,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x0000,\r
+0x0842,\r
+0xffff,\r
+0x34a5,\r
+0xb6b5,\r
+0x34a5,\r
+0x8e73,\r
+0xffff,\r
+0xcb5a,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x2845,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x6a56,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x6845,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xc633,\r
+0x0000,\r
+0x0000,\r
+0x2634,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x0211,\r
+0x0000,\r
+0x8319,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x0000,\r
+0x0c63,\r
+0xffff,\r
+0x8631,\r
+0x34a5,\r
+0xf39c,\r
+0x4108,\r
+0xffff,\r
+0x0c63,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xe94d,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xeb5e,\r
+0x0109,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x4108,\r
+0xe94d,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xc633,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x273c,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x0211,\r
+0x0000,\r
+0x0000,\r
+0x273c,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x0000,\r
+0x8a52,\r
+0xffff,\r
+0xc739,\r
+0x34a5,\r
+0xbad6,\r
+0x38c6,\r
+0xffff,\r
+0x8631,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x6a56,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x673c,\r
+0x8000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xc422,\r
+0x2b5f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xe94d,\r
+0xc319,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x2634,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x0211,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x8422,\r
+0x6a56,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0xed6f,\r
+0x0000,\r
+0xc318,\r
+0xffff,\r
+0x8e73,\r
+0x34a5,\r
+0xffff,\r
+0xffff,\r
+0x718c,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0422,\r
+0xc633,\r
+0x273c,\r
+0xa73c,\r
+0xe844,\r
+0x2634,\r
+0xc633,\r
+0x031a,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x8319,\r
+0x052b,\r
+0x273c,\r
+0x2845,\r
+0xa844,\r
+0x2634,\r
+0x8422,\r
+0x0211,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0211,\r
+0x031a,\r
+0x0422,\r
+0x031a,\r
+0x0422,\r
+0x031a,\r
+0x0422,\r
+0x031a,\r
+0x0422,\r
+0x031a,\r
+0x0422,\r
+0x031a,\r
+0x0422,\r
+0x031a,\r
+0x0422,\r
+0x4000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x8108,\r
+0x0422,\r
+0x031a,\r
+0x0422,\r
+0x031a,\r
+0x0422,\r
+0x031a,\r
+0x0422,\r
+0x031a,\r
+0x0422,\r
+0x031a,\r
+0x4211,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x8a52,\r
+0x3084,\r
+0xc739,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0x0000,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xffff,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xffff,\r
+0xffff,\r
+0xffff,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xe006,\r
+0xffff,\r
+0xffff\r
+};\r
+\r
+#define bmpBITMAP_WIDTH                92\r
+#define bmpBITMAP_HEIGHT       36\r
+\r
+#endif\r
diff --git a/Demo/CORTEX_STM32F103_Primer_GCC/main.c b/Demo/CORTEX_STM32F103_Primer_GCC/main.c
new file mode 100644 (file)
index 0000000..fbb16cb
--- /dev/null
@@ -0,0 +1,465 @@
+/*\r
+       FreeRTOS.org V4.6.1 - Copyright (C) 2003-2007 Richard Barry.\r
+\r
+       This file is part of the FreeRTOS.org distribution.\r
+\r
+       FreeRTOS.org is free software; you can redistribute it and/or modify\r
+       it under the terms of the GNU General Public License as published by\r
+       the Free Software Foundation; either version 2 of the License, or\r
+       (at your option) any later version.\r
+\r
+       FreeRTOS.org is distributed in the hope that it will be useful,\r
+       but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+       GNU General Public License for more details.\r
+\r
+       You should have received a copy of the GNU General Public License\r
+       along with FreeRTOS.org; if not, write to the Free Software\r
+       Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\r
+\r
+       A special exception to the GPL can be applied should you wish to distribute\r
+       a combined work that includes FreeRTOS.org, without being obliged to provide\r
+       the source code for any proprietary components.  See the licensing section\r
+       of http://www.FreeRTOS.org for full details of how and when the exception\r
+       can be applied.\r
+\r
+       ***************************************************************************\r
+       See http://www.FreeRTOS.org for documentation, latest information, license\r
+       and contact details.  Please ensure to read the configuration and relevant\r
+       port sections of the online documentation.\r
+\r
+       Also see http://www.SafeRTOS.com a version that has been certified for use\r
+       in safety critical systems, plus commercial licensing, development and\r
+       support options.\r
+       ***************************************************************************\r
+*/\r
+\r
+/*\r
+ * Creates all the demo application tasks, then starts the scheduler.  The WEB\r
+ * documentation provides more details of the standard demo application tasks.\r
+ * In addition to the standard demo tasks, the following tasks and tests are\r
+ * defined and/or created within this file:\r
+ *\r
+ * "Fast Interrupt Test" - A high frequency periodic interrupt is generated\r
+ * using a free running timer to demonstrate the use of the\r
+ * configKERNEL_INTERRUPT_PRIORITY configuration constant.  The interrupt\r
+ * service routine measures the number of processor clocks that occur between\r
+ * each interrupt - and in so doing measures the jitter in the interrupt timing.\r
+ * The maximum measured jitter time is latched in the ulMaxJitter variable, and\r
+ * displayed on the LCD by the 'Check' task as described below.  The\r
+ * fast interrupt is configured and handled in the timertest.c source file.\r
+ *\r
+ * "LCD" task - the LCD task is a 'gatekeeper' task.  It is the only task that\r
+ * is permitted to access the display directly.  Other tasks wishing to write a\r
+ * message to the LCD send the message on a queue to the LCD task instead of\r
+ * accessing the LCD themselves.  The LCD task just blocks on the queue waiting\r
+ * for messages - waking and displaying the messages as they arrive.  Messages\r
+ * can either be a text string to display, or an instruction to update MEMS\r
+ * input.  The MEMS input is used to display a ball that can be moved around\r
+ * LCD by tilting the STM32 Primer.  45% is taken as the neutral position.\r
+ *\r
+ * "Check" task -  This only executes every five seconds but has the highest\r
+ * priority so is guaranteed to get processor time.  Its main function is to\r
+ * check that all the standard demo tasks are still operational.  Should any\r
+ * unexpected behaviour within a demo task be discovered the 'check' task will\r
+ * write an error to the LCD (via the LCD task).  If all the demo tasks are\r
+ * executing with their expected behaviour then the check task writes PASS\r
+ * along with the max jitter time to the LCD (again via the LCD task), as\r
+ * described above.\r
+ *\r
+ * Tick Hook - A tick hook is provided just for demonstration purposes.  In \r
+ * this case it is used to periodically send an instruction to updated the\r
+ * MEMS input to the LCD task.\r
+ *\r
+ */\r
+\r
+/* CircleOS includes.  Some of the CircleOS peripheral functionality is \r
+utilised, although CircleOS itself is not used. */\r
+#include "circle.h"\r
+\r
+/* Standard includes. */\r
+#include <string.h>\r
+\r
+/* Scheduler includes. */\r
+#include "FreeRTOS.h"\r
+#include "Task.h"\r
+#include "Queue.h"\r
+\r
+/* Demo app includes. */\r
+#include "BlockQ.h"\r
+#include "blocktim.h"\r
+#include "GenQTest.h"\r
+#include "partest.h"\r
+#include "QPeek.h"\r
+\r
+/* The bitmap used to display the FreeRTOS.org logo is stored in 16bit format\r
+and therefore takes up a large proportion of the Flash space.  Setting this\r
+parameter to 0 excludes the bitmap from the build, freeing up Flash space for\r
+extra code. */\r
+#define mainINCLUDE_BITMAP                                     1\r
+\r
+#if mainINCLUDE_BITMAP == 1\r
+       #include "bitmap.h"\r
+#endif\r
+\r
+/* Task priorities. */\r
+#define mainQUEUE_POLL_PRIORITY                                ( tskIDLE_PRIORITY + 2 )\r
+#define mainCHECK_TASK_PRIORITY                                ( tskIDLE_PRIORITY + 3 )\r
+#define mainBLOCK_Q_PRIORITY                           ( tskIDLE_PRIORITY + 2 )\r
+#define mainGEN_Q_PRIORITY                                     ( tskIDLE_PRIORITY + 0 )\r
+#define mainFLASH_TASK_PRIORITY                                ( tskIDLE_PRIORITY + 2 )\r
+\r
+/* Splash screen related constants. */\r
+#define mainBITMAP_Y                                           ( 38 )\r
+#define mainBITMAP_X                                           ( 18 )\r
+#define mainURL_Y                                                      ( 8 )\r
+#define mainURL_X                                                      ( 78 )\r
+#define mainSPLASH_SCREEN_DELAY                ( 2000 / portTICK_RATE_MS )\r
+\r
+/* Text drawing related constants. */\r
+#define mainLCD_CHAR_HEIGHT                    ( 13 )\r
+#define mainLCD_MAX_Y                          ( 110 )\r
+\r
+/* The maximum number of message that can be waiting for display at any one\r
+time. */\r
+#define mainLCD_QUEUE_SIZE                                     ( 3 )\r
+\r
+/* The check task uses the sprintf function so requires a little more stack. */\r
+#define mainCHECK_TASK_STACK_SIZE                      ( configMINIMAL_STACK_SIZE + 50 )\r
+\r
+/* The LCD task calls some of the CircleOS functions (for MEMS and LCD access),\r
+these can require a larger stack. */\r
+#define configLCD_TASK_STACK_SIZE                      ( configMINIMAL_STACK_SIZE + 50 )\r
+\r
+/* Dimensions the buffer into which the jitter time is written. */\r
+#define mainMAX_MSG_LEN                                                25\r
+\r
+/* The time between cycles of the 'check' task. */\r
+#define mainCHECK_DELAY                                                ( ( portTickType ) 5000 / portTICK_RATE_MS )\r
+\r
+/* The period at which the MEMS input should be updated. */\r
+#define mainMEMS_DELAY                                         ( ( portTickType ) 100 / portTICK_RATE_MS )\r
+\r
+/* The rate at which the flash task toggles the LED. */\r
+#define mainFLASH_DELAY                                                ( ( portTickType ) 1000 / portTICK_RATE_MS )\r
+\r
+/* The number of nano seconds between each processor clock. */\r
+#define mainNS_PER_CLOCK ( ( unsigned portLONG ) ( ( 1.0 / ( double ) configCPU_CLOCK_HZ ) * 1000000000.0 ) )\r
+\r
+/* The two types of message that can be sent to the LCD task. */\r
+#define mainUPDATE_BALL_MESSAGE                                ( 0 )\r
+#define mainWRITE_STRING_MESSAGE                       ( 1 )\r
+\r
+/* Type of the message sent to the LCD task. */\r
+typedef struct\r
+{\r
+       portBASE_TYPE xMessageType;\r
+       signed char *pcMessage;\r
+} xLCDMessage;\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+/*\r
+ * Configure the clocks, GPIO and other peripherals as required by the demo.\r
+ */\r
+static void prvSetupHardware( void );\r
+\r
+/*\r
+ * The LCD is written two by more than one task so is controlled by a\r
+ * 'gatekeeper' task.  This is the only task that is actually permitted to\r
+ * access the LCD directly.  Other tasks wanting to display a message send\r
+ * the message to the gatekeeper.\r
+ */\r
+static void prvLCDTask( void *pvParameters );\r
+\r
+/*\r
+ * Checks the status of all the demo tasks then prints a message to the\r
+ * display.  The message will be either PASS - and include in brackets the\r
+ * maximum measured jitter time (as described at the to of the file), or a\r
+ * message that describes which of the standard demo tasks an error has been\r
+ * discovered in.\r
+ *\r
+ * Messages are not written directly to the terminal, but passed to prvLCDTask\r
+ * via a queue.\r
+ *\r
+ * The check task also receives instructions to update the MEMS input, which\r
+ * in turn can also lead to the LCD being updated.\r
+ */\r
+static void prvCheckTask( void *pvParameters );\r
+\r
+/*\r
+ * Configures the timers and interrupts for the fast interrupt test as\r
+ * described at the top of this file.\r
+ */\r
+extern void vSetupTimerTest( void );\r
+\r
+/*\r
+ * A cut down version of sprintf() used to percent the HUGE GCC library\r
+ * equivalent from being included in the binary image. \r
+ */\r
+extern int sprintf(char *out, const char *format, ...);\r
+\r
+/*\r
+ * Simple toggle the LED periodically for timing verification.\r
+ */\r
+static void prvFlashTask( void *pvParameters );\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+/* The queue used to send messages to the LCD task. */\r
+xQueueHandle xLCDQueue;\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+int main( void )\r
+{\r
+       #ifdef DEBUG\r
+               debug();\r
+       #endif\r
+\r
+       prvSetupHardware();\r
+\r
+       /* Create the queue used by the LCD task.  Messages for display on the LCD\r
+       are received via this queue. */\r
+       xLCDQueue = xQueueCreate( mainLCD_QUEUE_SIZE, sizeof( xLCDMessage ) );\r
+       \r
+       /* Start the standard demo tasks. */\r
+       vStartBlockingQueueTasks( mainBLOCK_Q_PRIORITY );\r
+    vCreateBlockTimeTasks();\r
+       vStartGenericQueueTasks( mainGEN_Q_PRIORITY );\r
+       vStartQueuePeekTasks();\r
+       vStartPolledQueueTasks( mainQUEUE_POLL_PRIORITY );\r
+\r
+       /* Start the tasks defined within this file/specific to this demo. */\r
+    xTaskCreate( prvCheckTask, ( signed portCHAR * ) "Check", mainCHECK_TASK_STACK_SIZE, NULL, mainCHECK_TASK_PRIORITY, NULL );        \r
+       xTaskCreate( prvLCDTask, ( signed portCHAR * ) "LCD", configLCD_TASK_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );\r
+       xTaskCreate( prvFlashTask, ( signed portCHAR * ) "Flash", configMINIMAL_STACK_SIZE, NULL, mainFLASH_TASK_PRIORITY, NULL );\r
+\r
+       /* Configure the timers used by the fast interrupt timer test. */\r
+       vSetupTimerTest();\r
+       \r
+       /* Start the scheduler. */\r
+       vTaskStartScheduler();\r
+       \r
+       /* Will only get here if there was not enough heap space to create the\r
+       idle task. */\r
+       return 0;\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+void prvLCDTask( void *pvParameters )\r
+{\r
+xLCDMessage xMessage;\r
+portCHAR cY = mainLCD_CHAR_HEIGHT;\r
+const portCHAR * const pcString = "www.FreeRTOS.org";\r
+const portCHAR * const pcBlankLine = "                  ";\r
+\r
+       DRAW_Init();\r
+\r
+       #if mainINCLUDE_BITMAP == 1\r
+               DRAW_SetImage( pucImage, mainBITMAP_Y, mainBITMAP_X, bmpBITMAP_HEIGHT, bmpBITMAP_WIDTH );\r
+       #endif\r
+\r
+       LCD_SetScreenOrientation( V9 );\r
+       DRAW_DisplayString( mainURL_Y, mainURL_X, pcString, strlen( pcString ) );\r
+       vTaskDelay( mainSPLASH_SCREEN_DELAY );\r
+       LCD_FillRect( 0, 0, CHIP_SCREEN_WIDTH, CHIP_SCREEN_HEIGHT, RGB_WHITE );\r
+\r
+       for( ;; )\r
+       {\r
+               /* Wait for a message to arrive that requires displaying. */\r
+               while( xQueueReceive( xLCDQueue, &xMessage, portMAX_DELAY ) != pdPASS );\r
+\r
+               /* Check the message type. */\r
+               if( xMessage.xMessageType == mainUPDATE_BALL_MESSAGE )\r
+               {\r
+                       /* Read the MEMS and update the ball display on the LCD if required. */\r
+                       MEMS_Handler();\r
+                       POINTER_Handler();\r
+               }\r
+               else\r
+               {\r
+                       /* A text string was sent.  First blank off the old text string, then\r
+                       draw the new text on the next line down. */\r
+                       DRAW_DisplayString( 0, cY, pcBlankLine, strlen( pcBlankLine ) );\r
+\r
+                       cY -= mainLCD_CHAR_HEIGHT;\r
+                       if( cY <= ( mainLCD_CHAR_HEIGHT - 1 ) )\r
+                       {                       \r
+                               /* Wrap the line onto which we are going to write the text. */\r
+                               cY = mainLCD_MAX_Y;\r
+                       }\r
+                       \r
+                       /* Display the message. */\r
+                       DRAW_DisplayString( 0, cY, xMessage.pcMessage, strlen( xMessage.pcMessage ) );\r
+               }\r
+       }\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static void prvCheckTask( void *pvParameters )\r
+{\r
+portTickType xLastExecutionTime;\r
+xLCDMessage xMessage;\r
+static signed portCHAR cPassMessage[ mainMAX_MSG_LEN ];\r
+extern unsigned portSHORT usMaxJitter;\r
+\r
+       /* Initialise the xLastExecutionTime variable on task entry. */\r
+       xLastExecutionTime = xTaskGetTickCount();\r
+\r
+       /* Setup the message we are going to send to the LCD task. */\r
+       xMessage.xMessageType = mainWRITE_STRING_MESSAGE;\r
+       xMessage.pcMessage = cPassMessage;\r
+       \r
+    for( ;; )\r
+       {\r
+               /* Perform this check every mainCHECK_DELAY milliseconds. */\r
+               vTaskDelayUntil( &xLastExecutionTime, mainCHECK_DELAY );\r
+\r
+               /* Has an error been found in any task?   If so then point the text\r
+               we are going to send to the LCD task to an error message instead of\r
+               the PASS message. */\r
+               if( xAreGenericQueueTasksStillRunning() != pdTRUE )\r
+               {\r
+                       xMessage.pcMessage = "ERROR IN GEN Q";\r
+               }\r
+        if( xAreBlockingQueuesStillRunning() != pdTRUE )\r
+               {\r
+                       xMessage.pcMessage = "ERROR IN BLOCK Q";\r
+               }\r
+               else if( xAreBlockTimeTestTasksStillRunning() != pdTRUE )\r
+               {\r
+                       xMessage.pcMessage = "ERROR IN BLOCK TIME";\r
+               }\r
+        else if( xArePollingQueuesStillRunning() != pdTRUE )\r
+        {\r
+            xMessage.pcMessage = "ERROR IN POLL Q";\r
+        }\r
+               else if( xAreQueuePeekTasksStillRunning() != pdTRUE )\r
+               {\r
+                       xMessage.pcMessage = "ERROR IN PEEK Q";\r
+               }\r
+               else\r
+               {\r
+                       /* No errors were found in any task, so send a pass message\r
+                       with the max measured jitter time also included (as per the\r
+                       fast interrupt test described at the top of this file and on\r
+                       the online documentation page for this demo application). */\r
+                       sprintf( ( portCHAR * ) cPassMessage, "PASS [%uns]", ( ( unsigned portLONG ) usMaxJitter ) * mainNS_PER_CLOCK );\r
+               }\r
+\r
+               /* Send the message to the LCD gatekeeper for display. */\r
+               xQueueSend( xLCDQueue, &xMessage, portMAX_DELAY );\r
+       }\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+void vApplicationTickHook( void )\r
+{\r
+static unsigned portLONG ulCallCount;\r
+static const xLCDMessage xMemsMessage = { mainUPDATE_BALL_MESSAGE, NULL };\r
+\r
+       /* Periodically send a message to the LCD task telling it to update\r
+       the MEMS input, and then if necessary the LCD. */\r
+       ulCallCount++;\r
+       if( ulCallCount >= mainMEMS_DELAY )\r
+       {\r
+               ulCallCount = 0;\r
+               xQueueSendFromISR( xLCDQueue, &xMemsMessage, pdFALSE );\r
+       }\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static void prvSetupHardware( void )\r
+{\r
+       /* Start with the clocks in their expected state. */\r
+       RCC_DeInit();\r
+\r
+       /* Enable HSE (high speed external clock). */\r
+       RCC_HSEConfig( RCC_HSE_ON );\r
+\r
+       /* Wait till HSE is ready. */\r
+       while( RCC_GetFlagStatus( RCC_FLAG_HSERDY ) == RESET )\r
+       {\r
+       }\r
+\r
+       /* 2 wait states required on the flash. */\r
+       *( ( unsigned portLONG * ) 0x40022000 ) = 0x02;\r
+\r
+       /* HCLK = SYSCLK */\r
+       RCC_HCLKConfig( RCC_SYSCLK_Div1 );\r
+\r
+       /* PCLK2 = HCLK */\r
+       RCC_PCLK2Config( RCC_HCLK_Div1 );\r
+\r
+       /* PCLK1 = HCLK/2 */\r
+       RCC_PCLK1Config( RCC_HCLK_Div2 );\r
+\r
+       /* PLLCLK = 12MHz * 6 = 72 MHz. */\r
+       RCC_PLLConfig( RCC_PLLSource_HSE_Div1, RCC_PLLMul_6 );\r
+\r
+       /* Enable PLL. */\r
+       RCC_PLLCmd( ENABLE );\r
+\r
+       /* Wait till PLL is ready. */\r
+       while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)\r
+       {\r
+       }\r
+\r
+       /* Select PLL as system clock source. */\r
+       RCC_SYSCLKConfig( RCC_SYSCLKSource_PLLCLK );\r
+\r
+       /* Wait till PLL is used as system clock source. */\r
+       while( RCC_GetSYSCLKSource() != 0x08 )\r
+       {\r
+       }\r
+\r
+       /* Enable GPIOA, GPIOB, GPIOC, GPIOD, GPIOE and AFIO clocks */\r
+       RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |RCC_APB2Periph_GPIOC\r
+                                                       | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE | RCC_APB2Periph_AFIO, ENABLE );\r
+\r
+       /* SPI2 Periph clock enable */\r
+       RCC_APB1PeriphClockCmd( RCC_APB1Periph_SPI2, ENABLE );\r
+\r
+\r
+       /* Set the Vector Table base address at 0x08000000 */\r
+       NVIC_SetVectorTable( NVIC_VectTab_FLASH, 0x0 );\r
+\r
+       NVIC_PriorityGroupConfig( NVIC_PriorityGroup_4 );\r
+       \r
+       /* Configure HCLK clock as SysTick clock source. */\r
+       SysTick_CLKSourceConfig( SysTick_CLKSource_HCLK );\r
+       \r
+       /* Misc initialisation, including some of the CircleOS features.  Note\r
+       that CircleOS itself is not used. */\r
+       vParTestInitialise();\r
+       MEMS_Init();\r
+       POINTER_Init();\r
+       POINTER_SetMode( POINTER_RESTORE_LESS );\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static void prvFlashTask( void *pvParameters )\r
+{\r
+portTickType xLastExecutionTime;\r
+\r
+       /* Initialise the xLastExecutionTime variable on task entry. */\r
+       xLastExecutionTime = xTaskGetTickCount();\r
+\r
+    for( ;; )\r
+       {\r
+               /* Simple toggle the LED periodically.  This just provides some timing\r
+               verification. */\r
+               vTaskDelayUntil( &xLastExecutionTime, mainFLASH_DELAY );\r
+               vParTestToggleLED( 0 );\r
+       }\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+void starting_delay( unsigned long ul )\r
+{\r
+       vTaskDelay( ( portTickType ) ul );\r
+}\r
+\r
+\r
+\r
diff --git a/Demo/CORTEX_STM32F103_Primer_GCC/printf-stdarg.c b/Demo/CORTEX_STM32F103_Primer_GCC/printf-stdarg.c
new file mode 100644 (file)
index 0000000..45a8243
--- /dev/null
@@ -0,0 +1,280 @@
+/*
+       Copyright 2001, 2002 Georges Menie (www.menie.org)
+       stdarg version contributed by Christian Ettinger
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU Lesser General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*/
+
+/*
+       putchar is the only external dependency for this file,
+       if you have a working putchar, leave it commented out.
+       If not, uncomment the define below and
+       replace outbyte(c) by your own function call.
+
+#define putchar(c) outbyte(c)
+*/
+
+#include <stdarg.h>
+
+static void printchar(char **str, int c)
+{
+       extern int putchar(int c);
+       
+       if (str) {
+               **str = c;
+               ++(*str);
+       }
+       else (void)putchar(c);
+}
+
+#define PAD_RIGHT 1
+#define PAD_ZERO 2
+
+static int prints(char **out, const char *string, int width, int pad)
+{
+       register int pc = 0, padchar = ' ';
+
+       if (width > 0) {
+               register int len = 0;
+               register const char *ptr;
+               for (ptr = string; *ptr; ++ptr) ++len;
+               if (len >= width) width = 0;
+               else width -= len;
+               if (pad & PAD_ZERO) padchar = '0';
+       }
+       if (!(pad & PAD_RIGHT)) {
+               for ( ; width > 0; --width) {
+                       printchar (out, padchar);
+                       ++pc;
+               }
+       }
+       for ( ; *string ; ++string) {
+               printchar (out, *string);
+               ++pc;
+       }
+       for ( ; width > 0; --width) {
+               printchar (out, padchar);
+               ++pc;
+       }
+
+       return pc;
+}
+
+/* the following should be enough for 32 bit int */
+#define PRINT_BUF_LEN 12
+
+static int printi(char **out, int i, int b, int sg, int width, int pad, int letbase)
+{
+       char print_buf[PRINT_BUF_LEN];
+       register char *s;
+       register int t, neg = 0, pc = 0;
+       register unsigned int u = i;
+
+       if (i == 0) {
+               print_buf[0] = '0';
+               print_buf[1] = '\0';
+               return prints (out, print_buf, width, pad);
+       }
+
+       if (sg && b == 10 && i < 0) {
+               neg = 1;
+               u = -i;
+       }
+
+       s = print_buf + PRINT_BUF_LEN-1;
+       *s = '\0';
+
+       while (u) {
+               t = u % b;
+               if( t >= 10 )
+                       t += letbase - '0' - 10;
+               *--s = t + '0';
+               u /= b;
+       }
+
+       if (neg) {
+               if( width && (pad & PAD_ZERO) ) {
+                       printchar (out, '-');
+                       ++pc;
+                       --width;
+               }
+               else {
+                       *--s = '-';
+               }
+       }
+
+       return pc + prints (out, s, width, pad);
+}
+
+static int print( char **out, const char *format, va_list args )
+{
+       register int width, pad;
+       register int pc = 0;
+       char scr[2];\r
+\r
+       for (; *format != 0; ++format) {\r
+               if (*format == '%') {
+                       ++format;
+                       width = pad = 0;
+                       if (*format == '\0') break;
+                       if (*format == '%') goto out;
+                       if (*format == '-') {
+                               ++format;
+                               pad = PAD_RIGHT;
+                       }
+                       while (*format == '0') {
+                               ++format;
+                               pad |= PAD_ZERO;
+                       }
+                       for ( ; *format >= '0' && *format <= '9'; ++format) {
+                               width *= 10;
+                               width += *format - '0';
+                       }
+                       if( *format == 's' ) {
+                               register char *s = (char *)va_arg( args, int );
+                               pc += prints (out, s?s:"(null)", width, pad);
+                               continue;
+                       }
+                       if( *format == 'd' ) {
+                               pc += printi (out, va_arg( args, int ), 10, 1, width, pad, 'a');
+                               continue;
+                       }
+                       if( *format == 'x' ) {
+                               pc += printi (out, va_arg( args, int ), 16, 0, width, pad, 'a');
+                               continue;
+                       }
+                       if( *format == 'X' ) {
+                               pc += printi (out, va_arg( args, int ), 16, 0, width, pad, 'A');
+                               continue;
+                       }
+                       if( *format == 'u' ) {
+                               pc += printi (out, va_arg( args, int ), 10, 0, width, pad, 'a');
+                               continue;
+                       }
+                       if( *format == 'c' ) {
+                               /* char are converted to int then pushed on the stack */
+                               scr[0] = (char)va_arg( args, int );
+                               scr[1] = '\0';
+                               pc += prints (out, scr, width, pad);
+                               continue;
+                       }
+               }
+               else {
+               out:\r
+                       printchar (out, *format);
+                       ++pc;\r
+               }
+       }
+       if (out) **out = '\0';
+       va_end( args );
+       return pc;
+}
+
+int printf(const char *format, ...)
+{
+        va_list args;
+        
+        va_start( args, format );
+        return print( 0, format, args );
+}
+
+int sprintf(char *out, const char *format, ...)
+{
+        va_list args;
+        
+        va_start( args, format );
+        return print( &out, format, args );
+}
+\r
+\r
+int snprintf( char *buf, unsigned int count, const char *format, ... )\r
+{\r
+        va_list args;
+        
+        ( void ) count;\r
+        \r
+        va_start( args, format );\r
+        return print( &buf, format, args );\r
+}\r
+\r
+
+#ifdef TEST_PRINTF
+int main(void)
+{
+       char *ptr = "Hello world!";
+       char *np = 0;
+       int i = 5;
+       unsigned int bs = sizeof(int)*8;
+       int mi;
+       char buf[80];
+
+       mi = (1 << (bs-1)) + 1;
+       printf("%s\n", ptr);
+       printf("printf test\n");
+       printf("%s is null pointer\n", np);
+       printf("%d = 5\n", i);
+       printf("%d = - max int\n", mi);
+       printf("char %c = 'a'\n", 'a');
+       printf("hex %x = ff\n", 0xff);
+       printf("hex %02x = 00\n", 0);
+       printf("signed %d = unsigned %u = hex %x\n", -3, -3, -3);
+       printf("%d %s(s)%", 0, "message");
+       printf("\n");
+       printf("%d %s(s) with %%\n", 0, "message");
+       sprintf(buf, "justif: \"%-10s\"\n", "left"); printf("%s", buf);
+       sprintf(buf, "justif: \"%10s\"\n", "right"); printf("%s", buf);
+       sprintf(buf, " 3: %04d zero padded\n", 3); printf("%s", buf);
+       sprintf(buf, " 3: %-4d left justif.\n", 3); printf("%s", buf);
+       sprintf(buf, " 3: %4d right justif.\n", 3); printf("%s", buf);
+       sprintf(buf, "-3: %04d zero padded\n", -3); printf("%s", buf);
+       sprintf(buf, "-3: %-4d left justif.\n", -3); printf("%s", buf);
+       sprintf(buf, "-3: %4d right justif.\n", -3); printf("%s", buf);
+
+       return 0;
+}
+
+/*
+ * if you compile this file with
+ *   gcc -Wall $(YOUR_C_OPTIONS) -DTEST_PRINTF -c printf.c
+ * you will get a normal warning:
+ *   printf.c:214: warning: spurious trailing `%' in format
+ * this line is testing an invalid % at the end of the format string.
+ *
+ * this should display (on 32bit int machine) :
+ *
+ * Hello world!
+ * printf test
+ * (null) is null pointer
+ * 5 = 5
+ * -2147483647 = - max int
+ * char a = 'a'
+ * hex ff = ff
+ * hex 00 = 00
+ * signed -3 = unsigned 4294967293 = hex fffffffd
+ * 0 message(s)
+ * 0 message(s) with %
+ * justif: "left      "
+ * justif: "     right"
+ *  3: 0003 zero padded
+ *  3: 3    left justif.
+ *  3:    3 right justif.
+ * -3: -003 zero padded
+ * -3: -3   left justif.
+ * -3:   -3 right justif.
+ */
+
+#endif
+
+
diff --git a/Demo/CORTEX_STM32F103_Primer_GCC/timertest.c b/Demo/CORTEX_STM32F103_Primer_GCC/timertest.c
new file mode 100644 (file)
index 0000000..98cc654
--- /dev/null
@@ -0,0 +1,170 @@
+/*\r
+       FreeRTOS.org V4.6.1 - Copyright (C) 2003-2007 Richard Barry.\r
+\r
+       This file is part of the FreeRTOS.org distribution.\r
+\r
+       FreeRTOS.org is free software; you can redistribute it and/or modify\r
+       it under the terms of the GNU General Public License as published by\r
+       the Free Software Foundation; either version 2 of the License, or\r
+       (at your option) any later version.\r
+\r
+       FreeRTOS.org is distributed in the hope that it will be useful,\r
+       but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+       GNU General Public License for more details.\r
+\r
+       You should have received a copy of the GNU General Public License\r
+       along with FreeRTOS.org; if not, write to the Free Software\r
+       Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\r
+\r
+       A special exception to the GPL can be applied should you wish to distribute\r
+       a combined work that includes FreeRTOS.org, without being obliged to provide\r
+       the source code for any proprietary components.  See the licensing section\r
+       of http://www.FreeRTOS.org for full details of how and when the exception\r
+       can be applied.\r
+\r
+       ***************************************************************************\r
+       See http://www.FreeRTOS.org for documentation, latest information, license\r
+       and contact details.  Please ensure to read the configuration and relevant\r
+       port sections of the online documentation.\r
+\r
+       Also see http://www.SafeRTOS.com a version that has been certified for use\r
+       in safety critical systems, plus commercial licensing, development and\r
+       support options.\r
+       ***************************************************************************\r
+*/\r
+\r
+/* High speed timer test as described in main.c. */\r
+\r
+/* Scheduler includes. */\r
+#include "FreeRTOS.h"\r
+\r
+/* Library includes. */\r
+#include "stm32f10x_lib.h"\r
+#include "stm32f10x_tim.h"\r
+#include "stm32f10x_map.h"\r
+\r
+/* The set frequency of the interrupt.  Deviations from this are measured as\r
+the jitter. */\r
+#define timerINTERRUPT_FREQUENCY               ( ( unsigned portSHORT ) 20000 )\r
+\r
+/* The expected time between each of the timer interrupts - if the jitter was\r
+zero. */\r
+#define timerEXPECTED_DIFFERENCE_VALUE ( configCPU_CLOCK_HZ / timerINTERRUPT_FREQUENCY )\r
+\r
+/* The highest available interrupt priority. */\r
+#define timerHIGHEST_PRIORITY                  ( 0 )\r
+\r
+/* Misc defines. */\r
+#define timerMAX_32BIT_VALUE                   ( 0xffffffffUL )\r
+#define timerTIMER_1_COUNT_VALUE               ( * ( ( unsigned long * ) ( TIMER1_BASE + 0x48 ) ) )\r
+\r
+/* The number of interrupts to pass before we start looking at the jitter. */\r
+#define timerSETTLE_TIME                       5\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+/*\r
+ * Configures the two timers used to perform the test.\r
+ */\r
+void vSetupTimerTest( void );\r
+\r
+/* Interrupt handler in which the jitter is measured. */\r
+void vTimer2IntHandler( void );\r
+\r
+/* Stores the value of the maximum recorded jitter between interrupts. */\r
+volatile unsigned portSHORT usMaxJitter = 0;\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+void vSetupTimerTest( void )\r
+{\r
+unsigned long ulFrequency;\r
+TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;\r
+NVIC_InitTypeDef NVIC_InitStructure;\r
+\r
+\r
+       /* Enable timer clocks */\r
+       RCC_APB1PeriphClockCmd( RCC_APB1Periph_TIM2, ENABLE );\r
+       RCC_APB1PeriphClockCmd( RCC_APB1Periph_TIM3, ENABLE );\r
+\r
+       /* Initialise data. */\r
+       TIM_DeInit( TIM2 );\r
+       TIM_DeInit( TIM3 );\r
+       TIM_TimeBaseStructInit( &TIM_TimeBaseStructure );\r
+\r
+       /* Time base configuration for timer 2 - which generates the interrupts. */\r
+       ulFrequency = configCPU_CLOCK_HZ / timerINTERRUPT_FREQUENCY;    \r
+       TIM_TimeBaseStructure.TIM_Period = ( unsigned portSHORT ) ( ulFrequency & 0xffffUL );\r
+       TIM_TimeBaseStructure.TIM_Prescaler = 0x0;\r
+       TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;\r
+       TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;\r
+       TIM_TimeBaseInit( TIM2, &TIM_TimeBaseStructure );\r
+       TIM_ARRPreloadConfig( TIM2, ENABLE );\r
+\r
+       \r
+       /* Configuration for timer 3 which is used as a high resolution time\r
+       measurement. */\r
+       TIM_TimeBaseStructure.TIM_Period = ( unsigned portSHORT ) 0xffff;\r
+       TIM_TimeBaseInit( TIM3, &TIM_TimeBaseStructure );\r
+       TIM_ARRPreloadConfig( TIM3, ENABLE );\r
+       \r
+       /* Enable TIM2 IT.  TIM3 does not generate an interrupt. */\r
+       NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQChannel;\r
+       NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;\r
+       NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = timerHIGHEST_PRIORITY;\r
+       NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;\r
+       NVIC_Init( &NVIC_InitStructure );       \r
+       TIM_ITConfig( TIM2, TIM_IT_Update, ENABLE );\r
+\r
+       /* Finally, enable both timers. */\r
+       TIM_Cmd( TIM2, ENABLE );\r
+       TIM_Cmd( TIM3, ENABLE );\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+void vTimer2IntHandler( void )\r
+{\r
+static unsigned portSHORT usLastCount = 0, usSettleCount = 0, usMaxDifference = 0;\r
+unsigned portSHORT usThisCount, usDifference;\r
+\r
+       /* Capture the free running timer 3 value as we enter the interrupt. */\r
+       usThisCount = TIM3->CNT;\r
+       \r
+       if( usSettleCount >= timerSETTLE_TIME )\r
+       {\r
+               /* What is the difference between the timer value in this interrupt\r
+               and the value from the last interrupt. */\r
+               usDifference = usThisCount - usLastCount;\r
+\r
+               /* Store the difference in the timer values if it is larger than the\r
+               currently stored largest value.  The difference over and above the\r
+               expected difference will give the 'jitter' in the processing of these\r
+               interrupts. */\r
+               if( usDifference > usMaxDifference )\r
+               {\r
+                       usMaxDifference = usDifference;\r
+                       usMaxJitter = usMaxDifference - timerEXPECTED_DIFFERENCE_VALUE;\r
+               }\r
+       }\r
+       else\r
+       {\r
+               /* Don't bother storing any values for the first couple of\r
+               interrupts. */\r
+               usSettleCount++;\r
+       }\r
+\r
+       /* Remember what the timer value was this time through, so we can calculate\r
+       the difference the next time through. */\r
+       usLastCount = usThisCount;\r
+\r
+    TIM_ClearITPendingBit( TIM2, TIM_IT_Update );\r
+}\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
index 6c45fdf9504f8a68ccc98a0c54532c1ce8490d25..a00fdc3d464bbf268df14a8f205b1728877d4429 100644 (file)
        #include "../../Source/portable/GCC/ARM_CM3/portmacro.h"\r
 #endif\r
 \r
+#ifdef GCC_ARMCM3\r
+       #include "../../Source/portable/GCC/ARM_CM3/portmacro.h"\r
+#endif\r
+\r
 #ifdef IAR_ARM_CM3\r
        #include "../../Source/portable/IAR/ARM_CM3/portmacro.h"\r
 #endif\r