大理水控初始版本
diff --git a/sys_hw/Crc.c b/sys_hw/Crc.c
new file mode 100644
index 0000000..1797439
--- /dev/null
+++ b/sys_hw/Crc.c
@@ -0,0 +1,83 @@
+#include "crc.h"
+
+static u16 const crc_table[] =  
+{
+	//CRCTB1: ;?256??
+	0x00000,0x01021,0x02042,0x03063,
+	0x04084,0x050a5,0x060c6,0x070e7,
+	0x08108,0x09129,0x0a14a,0x0b16b,
+	0x0c18c,0x0d1ad,0x0e1ce,0x0f1ef,
+	0x01231,0x00210,0x03273,0x02252,
+	0x052b5,0x04294,0x072f7,0x062d6,
+	0x09339,0x08318,0x0b37b,0x0a35a,
+	0x0d3bd,0x0c39c,0x0f3ff,0x0e3de,
+	0x02462,0x03443,0x00420,0x01401,
+	0x064e6,0x074c7,0x044a4,0x05485,
+	0x0a56a,0x0b54b,0x08528,0x09509,
+	0x0e5ee,0x0f5cf,0x0c5ac,0x0d58d,
+	0x03653,0x02672,0x01611,0x00630,
+	0x076d7,0x066f6,0x05695,0x046b4,
+	0x0b75b,0x0a77a,0x09719,0x08738,
+	0x0f7df,0x0e7fe,0x0d79d,0x0c7bc,
+	0x048c4,0x058e5,0x06886,0x078a7,
+	0x00840,0x01861,0x02802,0x03823,
+	0x0c9cc,0x0d9ed,0x0e98e,0x0f9af,
+	0x08948,0x09969,0x0a90a,0x0b92b,
+	0x05af5,0x04ad4,0x07ab7,0x06a96,
+	0x01a71,0x00a50,0x03a33,0x02a12,
+	0x0dbfd,0x0cbdc,0x0fbbf,0x0eb9e,
+	0x09b79,0x08b58,0x0bb3b,0x0ab1a,
+	0x06ca6,0x07c87,0x04ce4,0x05cc5,
+	0x02c22,0x03c03,0x00c60,0x01c41,
+	0x0edae,0x0fd8f,0x0cdec,0x0ddcd,
+	0x0ad2a,0x0bd0b,0x08d68,0x09d49,
+	0x07e97,0x06eb6,0x05ed5,0x04ef4,
+	0x03e13,0x02e32,0x01e51,0x00e70,
+	0x0ff9f,0x0efbe,0x0dfdd,0x0cffc,
+	0x0bf1b,0x0af3a,0x09f59,0x08f78,
+	//CRCTB2: ;?256??
+	0x09188,0x081a9,0x0b1ca,0x0a1eb,
+	0x0d10c,0x0c12d,0x0f14e,0x0e16f,
+	0x01080,0x000a1,0x030c2,0x020e3,
+	0x05004,0x04025,0x07046,0x06067,
+	0x083b9,0x09398,0x0a3fb,0x0b3da,
+	0x0c33d,0x0d31c,0x0e37f,0x0f35e,
+	0x002b1,0x01290,0x022f3,0x032d2,
+	0x04235,0x05214,0x06277,0x07256,
+	0x0b5ea,0x0a5cb,0x095a8,0x08589,
+	0x0f56e,0x0e54f,0x0d52c,0x0c50d,
+	0x034e2,0x024c3,0x014a0,0x00481,
+	0x07466,0x06447,0x05424,0x04405,
+	0x0a7db,0x0b7fa,0x08799,0x097b8,
+	0x0e75f,0x0f77e,0x0c71d,0x0d73c,
+	0x026d3,0x036f2,0x00691,0x016b0,
+	0x06657,0x07676,0x04615,0x05634,
+	0x0d94c,0x0c96d,0x0f90e,0x0e92f,
+	0x099c8,0x089e9,0x0b98a,0x0a9ab,
+	0x05844,0x04865,0x07806,0x06827,
+	0x018c0,0x008e1,0x03882,0x028a3,
+	0x0cb7d,0x0db5c,0x0eb3f,0x0fb1e,
+	0x08bf9,0x09bd8,0x0abbb,0x0bb9a,
+	0x04a75,0x05a54,0x06a37,0x07a16,
+	0x00af1,0x01ad0,0x02ab3,0x03a92,
+	0x0fd2e,0x0ed0f,0x0dd6c,0x0cd4d,
+	0x0bdaa,0x0ad8b,0x09de8,0x08dc9,
+	0x07c26,0x06c07,0x05c64,0x04c45,
+	0x03ca2,0x02c83,0x01ce0,0x00cc1,
+	0x0ef1f,0x0ff3e,0x0cf5d,0x0df7c,
+	0x0af9b,0x0bfba,0x08fd9,0x09ff8,
+	0x06e17,0x07e36,0x04e55,0x05e74,
+	0x02e93,0x03eb2,0x00ed1,0x01ef0
+};
+
+u16 calcCRC( u8 *pBuffer, u16 BufferLength)
+{          
+	u16 crc_reg = 0;
+
+	while (BufferLength--)
+	{
+		crc_reg = (crc_reg << 8) ^ crc_table[(crc_reg>>8) ^ *pBuffer++];
+	}
+
+	return crc_reg;
+}
diff --git a/sys_hw/Crc.h b/sys_hw/Crc.h
new file mode 100644
index 0000000..d385121
--- /dev/null
+++ b/sys_hw/Crc.h
@@ -0,0 +1,8 @@
+#ifndef __crc_h__
+#define __crc_h__
+
+#include "stm32f10x.h"
+
+extern u16 calcCRC( u8 *pBuffer, u16 BufferLength);
+
+#endif  /* __crc_h__ */
diff --git a/sys_hw/Prj_FlashCfg.H b/sys_hw/Prj_FlashCfg.H
new file mode 100644
index 0000000..7c9beee
--- /dev/null
+++ b/sys_hw/Prj_FlashCfg.H
@@ -0,0 +1,1036 @@
+/*
+**************************************************************************************************************
+*                                           FLASH Åä Öà ÎÄ ¼þ ¶¨ Òå
+*
+*  Ãè Êö£ºFLASHÅäÖã»ÔÚʵ¼ÊÓ¦ÓÃÖУ¬×¢ÒâËùÑ¡ÐͺŵľßÌåÅäÖá£Èç¹û²»ÄÜÕý³£µÄÅäÖ㬲ο¼¾ßÌåµÄ²ÎÊýÏîÏÞÖÆ¡£
+*
+*  Ãû ³Æ£ºPrj_FlashCfg.H
+*
+*  °æ ±¾£ºV3.1
+*
+*  ×÷ ÕߣºÕŽø
+*
+*  ʱ ÆÚ£º2010/07/03
+*
+*    Copyright (c) 2008-2009          Brand-NEW C.A.P Electronics Technology CO.,LTD
+**************************************************************************************************************
+*/
+
+#ifndef __Prj_FlashCfg_H__
+#define __Prj_FlashCfg_H__
+
+/*
+**************************************************************************************************************
+*                                            Keil ²Ëµ¥ÅäÖÿªÊ¼
+**************************************************************************************************************
+*/
+
+//-------- <<< Use Configuration Wizard in Context Menu >>> -----------------
+
+// <e>FLASHÅäÖà ©ï©ï©ï °æ±¾: V3.2 (2010/07/03) ©ï©ï©ï
+// =============================
+// <i> Enable or disable FLASHÅäÖÃ
+#define FLASH_CFG_ENABLE     1
+//
+//=============================================>> (1) <<======================================================
+// <e>1. FLASHÓ²¼þÅäÖÃ
+// <i> Enable or disable FLASHÓ²¼þÅäÖÃ
+#define FLASH_HW_CFG_ENABLE     1
+// ============================
+//
+//   <s.15>FLASHÐͺÅ
+//   <i> ¶¨ÒåËùʹÓõÄFLASHÐͺţ¬ÏÔʾÖÕ¶ËÐÅϢʱʹÓá£
+//   <i> È磺AT45DB161D  ÒªÇóСÓÚ15×Ö½Ú
+//   <i> ĬÈÏ: "AT45DB161D"
+#define DEF_FLASH_NAME           "W25X32"
+//
+//   <o>FLASHÊÙÃü <5000=> 5000´Î <10000=> 1Íò´Î <20000=> 2Íò´Î
+//                <30000=> 3Íò´Î <40000=> 4Íò´Î <50000=> 5Íò´Î
+//                <60000=> 6Íò´Î <70000=> 7Íò´Î <80000=> 8Íò´Î
+//                <90000=> 9Íò´Î <100000=> 10Íò´Î<10=> 10´Î
+//   <i> ¶¨ÒåFLASHµÄÓÐЧÊÙÃü£¬Ó¦ÓÃÖÐÒÔ´ËÀ´½øÐÐÊÙÃü¼ÆËã
+//   <i> ĬÈÏ: 50000
+#define DEF_FLASH_LimTimes       80000
+//
+//   <o>FLASH×ÜÒ³Êý(Ò³) <1024-8192:1><#/1>
+//   <i> ¶¨ÒåFLASHоƬµÄ×ÜÒ³Êý
+//   <i> ĬÈÏ: 4096
+#define DEF_FLASH_Pages          1024
+//
+//   <o>FLASHÒ³´óС(×Ö½Ú) <256-4096:1><#/1>
+//   <i> ¶¨ÒåFLASHÒ»Ò³µÄ×Ö½ÚÊý
+//   <i> ĬÈÏ: 528
+#define DEF_FLASH_PageSize       4096
+// </e>
+
+//=============================================>> (2) <<======================================================
+// <e>2. ºº×Ö¿âÅäÖÃ
+#define FLASH_GB1624_ENABLE             		1
+
+//=============>> ºº×Ö¿âÇøÓò
+//=================>> 16*16×Ö¿â
+// 	<e>01. 16*16ºº×Ö¿â
+#define DEF_FLASH_GB1616_ENABLE				1
+
+#define DEF_FLASH_GB1616PageSize                ( 67 )	 //ÕâÀï¹Ì¶¨Öµ     ×Ö¿â  
+#define DEF_FLASH_GB1616StartAdd                ( 0x00000000ul )
+//×ֿ⿪ʼµØÖ·
+#define DEF_FLASH_GB1616EndAdd                 ( DEF_FLASH_GB1616StartAdd + ( DEF_FLASH_GB1616PageSize * DEF_FLASH_PageSize * DEF_FLASH_GB1616_ENABLE ) )
+//×Ö¿â½áÊøµØÖ·   ²»°üÀ¨´ËµØÖ·
+//=============>> ͼÐÎͼ±ê×Ö¿âÇøÓò
+#define DEF_FLASH_PhotoLibPageSize             ( 5 )	 //ÕâÀï¹Ì¶¨Öµ     ͼÐÎͼ±ê        
+#define DEF_FLASH_PhotoLibStartAdd             ( DEF_FLASH_GB1616EndAdd )
+//ͼÐÎͼ±ê¿â¿ªÊ¼µØÖ·
+#define DEF_FLASH_PhotoLibEndAdd               ( DEF_FLASH_PhotoLibStartAdd + ( DEF_FLASH_PhotoLibPageSize * DEF_FLASH_PageSize * DEF_FLASH_GB1616_ENABLE ) )
+//ͼÐÎͼ±ê¿â½áÊøµØÖ·
+// 	</e>
+
+//=================>> 24*24×Ö¿â
+// 	<e>02. 24*24ºº×Ö¿â
+#define DEF_FLASH_GB2424_ENABLE					1
+
+#define DEF_FLASH_GB2424PageSize                ( 75 )	 //24*24×Ö¿â  
+
+#define DEF_FLASH_GB2424StartAdd                ( DEF_FLASH_PhotoLibEndAdd )
+//×ֿ⿪ʼµØÖ·
+#define DEF_FLASH_GB2424EndAdd                  ( DEF_FLASH_GB2424StartAdd + ( DEF_FLASH_GB2424PageSize * DEF_FLASH_PageSize * DEF_FLASH_GB2424_ENABLE ) )
+// 	</e>
+
+
+// </e>
+
+//=============================================>> (3) <<======================================================
+// <e>3. IAPÉý¼¶¿Õ¼äÅäÖÃ
+#define FLASH_IAP_AppCode_ENABLE             1
+#define DEF_FLASH_IAP_AppCodeStartAdd          ( DEF_FLASH_GB2424EndAdd )
+//Ó¦ÓôúÂë´æ´¢¿ªÊ¼µØÖ·
+//=====================
+//
+//         <o>Éý¼¶´æ´¢Ó¦ÓôúÂë¿Õ¼ä´óС(Ò³) <3-1000:1><#/1>
+//         <i>ĬÈÏ£º504
+#define DEF_FLASH_IAP_AppCodePageSize          128
+
+
+#define DEF_FLASH_IAP_AppCodeEndAdd            ( DEF_FLASH_IAP_AppCodeStartAdd +   \
+    ( DEF_FLASH_IAP_AppCodePageSize * \
+      DEF_FLASH_PageSize )*FLASH_IAP_AppCode_ENABLE )
+//Ó¦ÓôúÂë´æ´¢½áÊøµØÖ·
+// </e>
+
+//=============================================>> (4) <<======================================================
+// <e>4. FLASHÓû§ÎļþÅäÖÃ
+// <i> Enable or disable FLASH½»Ò׼ǼÅäÖÃ
+#define FLASH_UseFile_CFG_ENABLE     1
+
+#define DefCfg_UseFileStaAdd             ( DEF_FLASH_IAP_AppCodeEndAdd )
+//FLASH½»Ò׼Ǽ´æ´¢µÄ¿ªÊ¼µØÖ·
+// ============================
+// 	<e>01. FLASHÓû§Îļþ01Çø
+#define DefCfg_UseFileBlock01_Sta     1
+// ============================
+//      <o>Óû§ÎļþËù·ÖÅäµÄ×Ü´óС(Ò³) <1-8196:1><#/1>
+#define DefCfg_UseFile01_DirPageSize  	  	4
+// ============================
+#define DefCfg_UseFile01_StaAdd		( DefCfg_UseFileStaAdd ) 			//¼Ç¼¿ªÊ¼µØÖ·
+#define DefCfg_UseFile01_EndAdd		( DefCfg_UseFile01_StaAdd + 	 	\
+                                    ( DefCfg_UseFile01_DirPageSize *  \
+                                      DEF_FLASH_PageSize *		 	\
+                                      DefCfg_UseFileBlock01_Sta ) )	//¼Ç¼½áÊøµØÖ·
+// 	</e>
+// ============================
+// 	<e>02. FLASHÓû§Îļþ02Çø
+#define DefCfg_UseFileBlock02_Sta     1
+// ============================
+//      <o>Óû§ÎļþËù·ÖÅäµÄ×Ü´óС(Ò³) <1-8196:1><#/1>
+#define DefCfg_UseFile02_DirPageSize  	  	4
+// ============================
+#define DefCfg_UseFile02_StaAdd		( DefCfg_UseFile01_EndAdd ) 		//¼Ç¼¿ªÊ¼µØÖ·
+#define DefCfg_UseFile02_EndAdd		( DefCfg_UseFile02_StaAdd + 	 	\
+                                    ( DefCfg_UseFile02_DirPageSize *  \
+                                      DEF_FLASH_PageSize *		 	\
+                                      DefCfg_UseFileBlock02_Sta ) )	//¼Ç¼½áÊøµØÖ·
+// 	</e>
+// ============================
+// 	<e>03. FLASHÓû§Îļþ03Çø
+#define DefCfg_UseFileBlock03_Sta     1
+// ============================
+//      <o>Óû§ÎļþËù·ÖÅäµÄ×Ü´óС(Ò³) <1-8196:1><#/1>
+#define DefCfg_UseFile03_DirPageSize  	  	4
+// ============================
+#define DefCfg_UseFile03_StaAdd		( DefCfg_UseFile02_EndAdd ) 		//¼Ç¼¿ªÊ¼µØÖ·
+#define DefCfg_UseFile03_EndAdd		( DefCfg_UseFile03_StaAdd + 	 	\
+                                    ( DefCfg_UseFile03_DirPageSize *  \
+                                      DEF_FLASH_PageSize *		 	\
+                                      DefCfg_UseFileBlock03_Sta ) )	//¼Ç¼½áÊøµØÖ·
+// 	</e>
+// ============================
+// 	<e>04. FLASHÓû§Îļþ04Çø
+#define DefCfg_UseFileBlock04_Sta     1
+// ============================
+//      <o>Óû§ÎļþËù·ÖÅäµÄ×Ü´óС(Ò³) <1-8196:1><#/1>
+#define DefCfg_UseFile04_DirPageSize  	  	4
+// ============================
+#define DefCfg_UseFile04_StaAdd		( DefCfg_UseFile03_EndAdd ) 		//¼Ç¼¿ªÊ¼µØÖ·
+#define DefCfg_UseFile04_EndAdd		( DefCfg_UseFile04_StaAdd + 	 	\
+                                    ( DefCfg_UseFile04_DirPageSize *  \
+                                      DEF_FLASH_PageSize *		 	\
+                                      DefCfg_UseFileBlock04_Sta ) )	//¼Ç¼½áÊøµØÖ·
+// 	</e>
+// ============================
+// 	<e>05. FLASHÓû§Îļþ05Çø
+#define DefCfg_UseFileBlock05_Sta     1
+// ============================
+//      <o>Óû§ÎļþËù·ÖÅäµÄ×Ü´óС(Ò³) <1-8196:1><#/1>
+#define DefCfg_UseFile05_DirPageSize  	  	4
+// ============================
+#define DefCfg_UseFile05_StaAdd		( DefCfg_UseFile04_EndAdd ) 		//¼Ç¼¿ªÊ¼µØÖ·
+#define DefCfg_UseFile05_EndAdd		( DefCfg_UseFile05_StaAdd + 	 	\
+                                    ( DefCfg_UseFile05_DirPageSize *  \
+                                      DEF_FLASH_PageSize *		 	\
+                                      DefCfg_UseFileBlock05_Sta ) )	//¼Ç¼½áÊøµØÖ·
+// 	</e>
+// ============================
+// 	<e>06. FLASHÓû§Îļþ06Çø
+#define DefCfg_UseFileBlock06_Sta     1
+// ============================
+//      <o>Óû§ÎļþËù·ÖÅäµÄ×Ü´óС(Ò³) <1-8196:1><#/1>
+#define DefCfg_UseFile06_DirPageSize  	  	2
+// ============================
+#define DefCfg_UseFile06_StaAdd		( DefCfg_UseFile05_EndAdd ) 		//¼Ç¼¿ªÊ¼µØÖ·
+#define DefCfg_UseFile06_EndAdd		( DefCfg_UseFile06_StaAdd + 	 	\
+                                    ( DefCfg_UseFile06_DirPageSize *  \
+                                      DEF_FLASH_PageSize *		 	\
+                                      DefCfg_UseFileBlock06_Sta ) )	//¼Ç¼½áÊøµØÖ·
+// 	</e>
+// ============================
+// 	<e>07. FLASHÓû§Îļþ07Çø
+#define DefCfg_UseFileBlock07_Sta     1
+// ============================
+//      <o>Óû§ÎļþËù·ÖÅäµÄ×Ü´óС(Ò³) <1-8196:1><#/1>
+#define DefCfg_UseFile07_DirPageSize  	  	2
+// ============================
+#define DefCfg_UseFile07_StaAdd		( DefCfg_UseFile06_EndAdd ) 		//¼Ç¼¿ªÊ¼µØÖ·
+#define DefCfg_UseFile07_EndAdd		( DefCfg_UseFile07_StaAdd + 	 	\
+                                    ( DefCfg_UseFile07_DirPageSize *  \
+                                      DEF_FLASH_PageSize *		 	\
+                                      DefCfg_UseFileBlock07_Sta ) )	//¼Ç¼½áÊøµØÖ·
+// 	</e>
+// ============================
+// 	<e>08. FLASHÓû§Îļþ08Çø
+#define DefCfg_UseFileBlock08_Sta     0
+// ============================
+//      <o>Óû§ÎļþËù·ÖÅäµÄ×Ü´óС(Ò³) <1-8196:1><#/1>
+#define DefCfg_UseFile08_DirPageSize  	  	1
+// ============================
+#define DefCfg_UseFile08_StaAdd		( DefCfg_UseFile07_EndAdd ) 		//¼Ç¼¿ªÊ¼µØÖ·
+#define DefCfg_UseFile08_EndAdd		( DefCfg_UseFile08_StaAdd + 	 	\
+                                    ( DefCfg_UseFile08_DirPageSize *  \
+                                      DEF_FLASH_PageSize *		 	\
+                                      DefCfg_UseFileBlock08_Sta ) )	//¼Ç¼½áÊøµØÖ·
+// 	</e>
+// ============================
+// 	<e>09. FLASHÓû§Îļþ09Çø
+#define DefCfg_UseFileBlock09_Sta     0
+// ============================
+//      <o>Óû§ÎļþËù·ÖÅäµÄ×Ü´óС(Ò³) <1-8196:1><#/1>
+#define DefCfg_UseFile09_DirPageSize  	  	1
+// ============================
+#define DefCfg_UseFile09_StaAdd		( DefCfg_UseFile08_EndAdd ) 		//¼Ç¼¿ªÊ¼µØÖ·
+#define DefCfg_UseFile09_EndAdd		( DefCfg_UseFile09_StaAdd + 	 	\
+                                    ( DefCfg_UseFile09_DirPageSize *  \
+                                      DEF_FLASH_PageSize *		 	\
+                                      DefCfg_UseFileBlock09_Sta ) )	//¼Ç¼½áÊøµØÖ·
+// 	</e>
+// ============================
+// 	<e>10. FLASHÓû§Îļþ10Çø
+#define DefCfg_UseFileBlock10_Sta     0
+// ============================
+//      <o>Óû§ÎļþËù·ÖÅäµÄ×Ü´óС(Ò³) <1-8196:1><#/1>
+#define DefCfg_UseFile10_DirPageSize  	  	1
+// ============================
+#define DefCfg_UseFile10_StaAdd		( DefCfg_UseFile09_EndAdd ) 		//¼Ç¼¿ªÊ¼µØÖ·
+#define DefCfg_UseFile10_EndAdd		( DefCfg_UseFile10_StaAdd + 	 	\
+                                    ( DefCfg_UseFile10_DirPageSize *  \
+                                      DEF_FLASH_PageSize *		 	\
+                                      DefCfg_UseFileBlock10_Sta ) )	//¼Ç¼½áÊøµØÖ·
+// 	</e>
+
+
+#define DefCfg_UseFileEndAdd             ( DefCfg_UseFile10_EndAdd )
+//FLASH½»Ò׼Ǽ´æ´¢µÄ½áÊøµØÖ·
+// </e>
+
+//=============================================>> (5) <<======================================================
+// <e>5. FLASH½»Ò׼ǼÅäÖÃ
+// <i> Enable or disable FLASH½»Ò׼ǼÅäÖÃ
+#define FLASH_Log_CFG_ENABLE     1
+
+#define DefCfg_LogFileStaAdd             ( DefCfg_UseFileEndAdd )
+//FLASH½»Ò׼Ǽ´æ´¢µÄ¿ªÊ¼µØÖ·
+// ============================
+// 	<e>01. FLASH½»Ò׼Ǽ01Çø
+#define DefCfg_LogBlock01_Sta     1
+// ============================
+//      <o>¼Ç¼Ŀ¼ÎļþËù·ÖÅäµÄ×Ü´óС(Ò³) <1-8196:1><#/1>
+#define DefCfg_LogFile01_DirPageSize  	  	36
+//      <o>¼Ç¼ÎļþËù·ÖÅäµÄ×Ü´óС(Ò³) <1-8196:1><#/1>
+#define DefCfg_LogFile01_PageSize  	  		400
+//      <o>¼Ç¼ÎļþÔ¤Áô´óС(Ò³) <1-10:1><#/1>
+#define DefCfg_LogFile01_PageRVS	  	  	2
+//      <o>ÿһÌõ¼Ç¼³¤¶È,°üÀ¨CRC(×Ö½Ú) <3-300:1><#/1>
+#define DefCfg_LogFile01_RecLength    		91
+// ============================
+#define DefCfg_LogDirFile01_StaAdd	  ( DefCfg_LogFileStaAdd ) 		//¼Ç¼¿ªÊ¼µØÖ·
+#define DefCfg_LogDirFile01_EndAdd	  ( DefCfg_LogDirFile01_StaAdd + 	\
+                                        ( DefCfg_LogFile01_DirPageSize *  \
+                                            DEF_FLASH_PageSize *		 	\
+                                            DefCfg_LogBlock01_Sta ) )	//¼Ç¼½áÊøµØÖ·
+// ============================
+#define DefCfg_LogFile01_StaAdd		( DefCfg_LogDirFile01_EndAdd ) 	//¼Ç¼¿ªÊ¼µØÖ·
+#define DefCfg_LogFile01_EndAdd		( DefCfg_LogFile01_StaAdd + 	 \
+                                    ( DefCfg_LogFile01_PageSize *    \
+                                      DEF_FLASH_PageSize *		     \
+                                      DefCfg_LogBlock01_Sta ) )	    //¼Ç¼½áÊøµØÖ·
+#if( DefCfg_LogBlock01_Sta )
+#if( DefCfg_LogFile01_PageSize <= DefCfg_LogFile01_PageRVS )
+#error "1:·ÖÅäµÄ¼Ç¼×Ü´óС±ØÐë´óÓÚÔ¤Áô¼Ç¼´óС"
+#endif
+#endif
+// 	</e>
+
+// 	<e>02. FLASH½»Ò׼Ǽ02Çø
+#define DefCfg_LogBlock02_Sta     0
+// ============================
+//      <o>¼Ç¼Ŀ¼ÎļþËù·ÖÅäµÄ×Ü´óС(Ò³) <1-8196:1><#/1>
+#define DefCfg_LogFile02_DirPageSize  	  	256
+//      <o>¼Ç¼ÎļþËù·ÖÅäµÄ×Ü´óС(Ò³) <1-8196:1><#/1>
+#define DefCfg_LogFile02_PageSize  	  		1200
+//      <o>¼Ç¼ÎļþÔ¤Áô´óС(Ò³) <1-10:1><#/1>
+#define DefCfg_LogFile02_PageRVS	  	  	10
+//      <o>ÿһÌõ¼Ç¼³¤¶È,°üÀ¨CRC(×Ö½Ú) <3-300:1><#/1>
+#define DefCfg_LogFile02_RecLength    		70
+// ============================
+#define DefCfg_LogDirFile02_StaAdd	  ( DefCfg_LogFile01_EndAdd ) 	//¼Ç¼¿ªÊ¼µØÖ·
+#define DefCfg_LogDirFile02_EndAdd	  ( DefCfg_LogDirFile02_StaAdd + 	\
+                                        ( DefCfg_LogFile02_DirPageSize *  \
+                                            DEF_FLASH_PageSize *		 	\
+                                            DefCfg_LogBlock02_Sta ) )	//¼Ç¼½áÊøµØÖ·
+// ============================
+#define DefCfg_LogFile02_StaAdd		( DefCfg_LogDirFile02_EndAdd ) 	//¼Ç¼¿ªÊ¼µØÖ·
+#define DefCfg_LogFile02_EndAdd		( DefCfg_LogFile02_StaAdd + 	 \
+                                    ( DefCfg_LogFile02_PageSize *    \
+                                      DEF_FLASH_PageSize *		     \
+                                      DefCfg_LogBlock02_Sta ) )	    //¼Ç¼½áÊøµØÖ·
+#if( DefCfg_LogBlock02_Sta )
+#if( DefCfg_LogFile02_PageSize <= DefCfg_LogFile02_PageRVS )
+#error "2:·ÖÅäµÄ¼Ç¼×Ü´óС±ØÐë´óÓÚÔ¤Áô¼Ç¼´óС"
+#endif
+#endif
+// 	</e>
+
+// 	<e>03. FLASH½»Ò׼Ǽ03Çø
+#define DefCfg_LogBlock03_Sta     0
+// ============================
+//      <o>¼Ç¼Ŀ¼ÎļþËù·ÖÅäµÄ×Ü´óС(Ò³) <1-8196:1><#/1>
+#define DefCfg_LogFile03_DirPageSize  	  	10
+//      <o>¼Ç¼ÎļþËù·ÖÅäµÄ×Ü´óС(Ò³) <1-8196:1><#/1>
+#define DefCfg_LogFile03_PageSize  	  		20
+//      <o>¼Ç¼ÎļþÔ¤Áô´óС(Ò³) <1-10:1><#/1>
+#define DefCfg_LogFile03_PageRVS	  	  	3
+//      <o>ÿһÌõ¼Ç¼³¤¶È,°üÀ¨CRC(×Ö½Ú) <3-300:1><#/1>
+#define DefCfg_LogFile03_RecLength    		70
+// ============================
+#define DefCfg_LogDirFile03_StaAdd	  ( DefCfg_LogFile02_EndAdd ) 	//¼Ç¼¿ªÊ¼µØÖ·
+#define DefCfg_LogDirFile03_EndAdd	  ( DefCfg_LogDirFile03_StaAdd + 	\
+                                        ( DefCfg_LogFile03_DirPageSize *  \
+                                            DEF_FLASH_PageSize *		 	\
+                                            DefCfg_LogBlock03_Sta ) )	//¼Ç¼½áÊøµØÖ·
+// ============================
+#define DefCfg_LogFile03_StaAdd		( DefCfg_LogDirFile03_EndAdd ) 	//¼Ç¼¿ªÊ¼µØÖ·
+#define DefCfg_LogFile03_EndAdd		( DefCfg_LogFile03_StaAdd + 	 \
+                                    ( DefCfg_LogFile03_PageSize *    \
+                                      DEF_FLASH_PageSize *		     \
+                                      DefCfg_LogBlock03_Sta ) )	    //¼Ç¼½áÊøµØÖ·
+#if( DefCfg_LogBlock03_Sta )
+#if( DefCfg_LogFile03_PageSize <= DefCfg_LogFile03_PageRVS )
+#error "3:·ÖÅäµÄ¼Ç¼×Ü´óС±ØÐë´óÓÚÔ¤Áô¼Ç¼´óС"
+#endif
+#endif
+// 	</e>
+
+// 	<e>04. FLASH½»Ò׼Ǽ04Çø
+#define DefCfg_LogBlock04_Sta     0
+// ============================
+//      <o>¼Ç¼Ŀ¼ÎļþËù·ÖÅäµÄ×Ü´óС(Ò³) <1-8196:1><#/1>
+#define DefCfg_LogFile04_DirPageSize  	  	10
+//      <o>¼Ç¼ÎļþËù·ÖÅäµÄ×Ü´óС(Ò³) <1-8196:1><#/1>
+#define DefCfg_LogFile04_PageSize  	  		20
+//      <o>¼Ç¼ÎļþÔ¤Áô´óС(Ò³) <1-10:1><#/1>
+#define DefCfg_LogFile04_PageRVS	  	  	3
+//      <o>ÿһÌõ¼Ç¼³¤¶È,°üÀ¨CRC(×Ö½Ú) <3-300:1><#/1>
+#define DefCfg_LogFile04_RecLength    		70
+// ============================
+#define DefCfg_LogDirFile04_StaAdd	  ( DefCfg_LogFile03_EndAdd ) 	//¼Ç¼¿ªÊ¼µØÖ·
+#define DefCfg_LogDirFile04_EndAdd	  ( DefCfg_LogDirFile04_StaAdd + 	\
+                                        ( DefCfg_LogFile04_DirPageSize *  \
+                                            DEF_FLASH_PageSize *		 	\
+                                            DefCfg_LogBlock04_Sta ) )	//¼Ç¼½áÊøµØÖ·
+// ============================
+#define DefCfg_LogFile04_StaAdd		( DefCfg_LogDirFile04_EndAdd ) 	//¼Ç¼¿ªÊ¼µØÖ·
+#define DefCfg_LogFile04_EndAdd		( DefCfg_LogFile04_StaAdd + 	 \
+                                    ( DefCfg_LogFile04_PageSize *    \
+                                      DEF_FLASH_PageSize *		     \
+                                      DefCfg_LogBlock04_Sta ) )	    //¼Ç¼½áÊøµØÖ·
+#if( DefCfg_LogBlock04_Sta )
+#if( DefCfg_LogFile04_PageSize <= DefCfg_LogFile04_PageRVS )
+#error "4:·ÖÅäµÄ¼Ç¼×Ü´óС±ØÐë´óÓÚÔ¤Áô¼Ç¼´óС"
+#endif
+#endif
+// 	</e>
+
+// 	<e>05. FLASH½»Ò׼Ǽ05Çø
+#define DefCfg_LogBlock05_Sta     0
+// ============================
+//      <o>¼Ç¼Ŀ¼ÎļþËù·ÖÅäµÄ×Ü´óС(Ò³) <1-8196:1><#/1>
+#define DefCfg_LogFile05_DirPageSize  	  	10
+//      <o>¼Ç¼ÎļþËù·ÖÅäµÄ×Ü´óС(Ò³) <1-8196:1><#/1>
+#define DefCfg_LogFile05_PageSize  	  		20
+//      <o>¼Ç¼ÎļþÔ¤Áô´óС(Ò³) <1-10:1><#/1>
+#define DefCfg_LogFile05_PageRVS	  	  	3
+//      <o>ÿһÌõ¼Ç¼³¤¶È,°üÀ¨CRC(×Ö½Ú) <3-300:1><#/1>
+#define DefCfg_LogFile05_RecLength    		70
+// ============================
+#define DefCfg_LogDirFile05_StaAdd	  ( DefCfg_LogFile04_EndAdd ) 	//¼Ç¼¿ªÊ¼µØÖ·
+#define DefCfg_LogDirFile05_EndAdd	  ( DefCfg_LogDirFile05_StaAdd + 	\
+                                        ( DefCfg_LogFile05_DirPageSize *  \
+                                            DEF_FLASH_PageSize *		 	\
+                                            DefCfg_LogBlock05_Sta ) )	//¼Ç¼½áÊøµØÖ·
+// ============================
+#define DefCfg_LogFile05_StaAdd		( DefCfg_LogDirFile05_EndAdd ) 	//¼Ç¼¿ªÊ¼µØÖ·
+#define DefCfg_LogFile05_EndAdd		( DefCfg_LogFile05_StaAdd + 	 \
+                                    ( DefCfg_LogFile05_PageSize *    \
+                                      DEF_FLASH_PageSize *		     \
+                                      DefCfg_LogBlock05_Sta ) )	    //¼Ç¼½áÊøµØÖ·
+#if( DefCfg_LogBlock05_Sta )
+#if( DefCfg_LogFile05_PageSize <= DefCfg_LogFile05_PageRVS )
+#error "5:·ÖÅäµÄ¼Ç¼×Ü´óС±ØÐë´óÓÚÔ¤Áô¼Ç¼´óС"
+#endif
+#endif
+// 	</e>
+
+// 	<e>06. FLASH½»Ò׼Ǽ06Çø
+#define DefCfg_LogBlock06_Sta     0
+// ============================
+//      <o>¼Ç¼Ŀ¼ÎļþËù·ÖÅäµÄ×Ü´óС(Ò³) <1-8196:1><#/1>
+#define DefCfg_LogFile06_DirPageSize  	  	6
+//      <o>¼Ç¼ÎļþËù·ÖÅäµÄ×Ü´óС(Ò³) <1-8196:1><#/1>
+#define DefCfg_LogFile06_PageSize  	  		5
+//      <o>¼Ç¼ÎļþÔ¤Áô´óС(Ò³) <1-10:1><#/1>
+#define DefCfg_LogFile06_PageRVS	  	  	3
+//      <o>ÿһÌõ¼Ç¼³¤¶È,°üÀ¨CRC(×Ö½Ú) <3-300:1><#/1>
+#define DefCfg_LogFile06_RecLength    		130
+// ============================
+#define DefCfg_LogDirFile06_StaAdd	  ( DefCfg_LogFile05_EndAdd ) 	//¼Ç¼¿ªÊ¼µØÖ·
+#define DefCfg_LogDirFile06_EndAdd	  ( DefCfg_LogDirFile06_StaAdd + 	\
+                                        ( DefCfg_LogFile06_DirPageSize *  \
+                                            DEF_FLASH_PageSize *		 	\
+                                            DefCfg_LogBlock06_Sta ) )	//¼Ç¼½áÊøµØÖ·
+// ============================
+#define DefCfg_LogFile06_StaAdd		( DefCfg_LogDirFile06_EndAdd ) 	//¼Ç¼¿ªÊ¼µØÖ·
+#define DefCfg_LogFile06_EndAdd		( DefCfg_LogFile06_StaAdd + 	 \
+                                    ( DefCfg_LogFile06_PageSize *    \
+                                      DEF_FLASH_PageSize *		     \
+                                      DefCfg_LogBlock06_Sta ) )	    //¼Ç¼½áÊøµØÖ·
+#if( DefCfg_LogBlock06_Sta )
+#if( DefCfg_LogFile06_PageSize <= DefCfg_LogFile06_PageRVS )
+#error "6:·ÖÅäµÄ¼Ç¼×Ü´óС±ØÐë´óÓÚÔ¤Áô¼Ç¼´óС"
+#endif
+#endif
+// 	</e>
+
+// 	<e>07. FLASH½»Ò׼Ǽ07Çø
+#define DefCfg_LogBlock07_Sta     0
+// ============================
+//      <o>¼Ç¼Ŀ¼ÎļþËù·ÖÅäµÄ×Ü´óС(Ò³) <1-8196:1><#/1>
+#define DefCfg_LogFile07_DirPageSize  	  	5
+//      <o>¼Ç¼ÎļþËù·ÖÅäµÄ×Ü´óС(Ò³) <1-8196:1><#/1>
+#define DefCfg_LogFile07_PageSize  	  		6
+//      <o>¼Ç¼ÎļþÔ¤Áô´óС(Ò³) <1-10:1><#/1>
+#define DefCfg_LogFile07_PageRVS	  	  	3
+//      <o>ÿһÌõ¼Ç¼³¤¶È,°üÀ¨CRC(×Ö½Ú) <3-300:1><#/1>
+#define DefCfg_LogFile07_RecLength    		140
+// ============================
+#define DefCfg_LogDirFile07_StaAdd	  ( DefCfg_LogFile06_EndAdd ) 	//¼Ç¼¿ªÊ¼µØÖ·
+#define DefCfg_LogDirFile07_EndAdd	  ( DefCfg_LogDirFile07_StaAdd + 	\
+                                        ( DefCfg_LogFile07_DirPageSize *  \
+                                            DEF_FLASH_PageSize *		 	\
+                                            DefCfg_LogBlock07_Sta ) )	//¼Ç¼½áÊøµØÖ·
+// ============================
+#define DefCfg_LogFile07_StaAdd		( DefCfg_LogDirFile07_EndAdd ) 	//¼Ç¼¿ªÊ¼µØÖ·
+#define DefCfg_LogFile07_EndAdd		( DefCfg_LogFile07_StaAdd + 	 \
+                                    ( DefCfg_LogFile07_PageSize *    \
+                                      DEF_FLASH_PageSize *		     \
+                                      DefCfg_LogBlock07_Sta ) )	    //¼Ç¼½áÊøµØÖ·
+#if( DefCfg_LogBlock07_Sta )
+#if( DefCfg_LogFile07_PageSize <= DefCfg_LogFile07_PageRVS )
+#error "7:·ÖÅäµÄ¼Ç¼×Ü´óС±ØÐë´óÓÚÔ¤Áô¼Ç¼´óС"
+#endif
+#endif
+// 	</e>
+
+// 	<e>08. FLASH½»Ò׼Ǽ08Çø
+#define DefCfg_LogBlock08_Sta     0
+// ============================
+//      <o>¼Ç¼Ŀ¼ÎļþËù·ÖÅäµÄ×Ü´óС(Ò³) <1-8196:1><#/1>
+#define DefCfg_LogFile08_DirPageSize  	  	5
+//      <o>¼Ç¼ÎļþËù·ÖÅäµÄ×Ü´óС(Ò³) <1-8196:1><#/1>
+#define DefCfg_LogFile08_PageSize  	  		10
+//      <o>¼Ç¼ÎļþÔ¤Áô´óС(Ò³) <1-10:1><#/1>
+#define DefCfg_LogFile08_PageRVS	  	  	4
+//      <o>ÿһÌõ¼Ç¼³¤¶È,°üÀ¨CRC(×Ö½Ú) <3-300:1><#/1>
+#define DefCfg_LogFile08_RecLength    		250
+// ============================
+#define DefCfg_LogDirFile08_StaAdd	  ( DefCfg_LogFile07_EndAdd ) 	//¼Ç¼¿ªÊ¼µØÖ·
+#define DefCfg_LogDirFile08_EndAdd	  ( DefCfg_LogDirFile08_StaAdd + 	\
+                                        ( DefCfg_LogFile08_DirPageSize *  \
+                                            DEF_FLASH_PageSize *		 	\
+                                            DefCfg_LogBlock08_Sta ) )	//¼Ç¼½áÊøµØÖ·
+// ============================
+#define DefCfg_LogFile08_StaAdd		( DefCfg_LogDirFile08_EndAdd ) 	//¼Ç¼¿ªÊ¼µØÖ·
+#define DefCfg_LogFile08_EndAdd		( DefCfg_LogFile08_StaAdd + 	 \
+                                    ( DefCfg_LogFile08_PageSize *    \
+                                      DEF_FLASH_PageSize *		     \
+                                      DefCfg_LogBlock08_Sta ) )	    //¼Ç¼½áÊøµØÖ·
+#if( DefCfg_LogBlock08_Sta )
+#if( DefCfg_LogFile08_PageSize <= DefCfg_LogFile08_PageRVS )
+#error "8:·ÖÅäµÄ¼Ç¼×Ü´óС±ØÐë´óÓÚÔ¤Áô¼Ç¼´óС"
+#endif
+#endif
+// 	</e>
+
+// 	<e>09. FLASH½»Ò׼Ǽ09Çø
+#define DefCfg_LogBlock09_Sta     0
+// ============================
+//      <o>¼Ç¼Ŀ¼ÎļþËù·ÖÅäµÄ×Ü´óС(Ò³) <1-8196:1><#/1>
+#define DefCfg_LogFile09_DirPageSize  	  	3
+//      <o>¼Ç¼ÎļþËù·ÖÅäµÄ×Ü´óС(Ò³) <1-8196:1><#/1>
+#define DefCfg_LogFile09_PageSize  	  		10
+//      <o>¼Ç¼ÎļþÔ¤Áô´óС(Ò³) <1-10:1><#/1>
+#define DefCfg_LogFile09_PageRVS	  	  	4
+//      <o>ÿһÌõ¼Ç¼³¤¶È,°üÀ¨CRC(×Ö½Ú) <3-300:1><#/1>
+#define DefCfg_LogFile09_RecLength    		280
+// ============================
+#define DefCfg_LogDirFile09_StaAdd	  ( DefCfg_LogFile08_EndAdd ) 	//¼Ç¼¿ªÊ¼µØÖ·
+#define DefCfg_LogDirFile09_EndAdd	  ( DefCfg_LogDirFile09_StaAdd + 	\
+                                        ( DefCfg_LogFile09_DirPageSize *  \
+                                            DEF_FLASH_PageSize *		 	\
+                                            DefCfg_LogBlock09_Sta ) )	//¼Ç¼½áÊøµØÖ·
+// ============================
+#define DefCfg_LogFile09_StaAdd		( DefCfg_LogDirFile09_EndAdd ) 	//¼Ç¼¿ªÊ¼µØÖ·
+#define DefCfg_LogFile09_EndAdd		( DefCfg_LogFile09_StaAdd + 	 \
+                                    ( DefCfg_LogFile09_PageSize *    \
+                                      DEF_FLASH_PageSize *		     \
+                                      DefCfg_LogBlock09_Sta ) )	    //¼Ç¼½áÊøµØÖ·
+#if( DefCfg_LogBlock09_Sta )
+#if( DefCfg_LogFile09_PageSize <= DefCfg_LogFile09_PageRVS )
+#error "9:·ÖÅäµÄ¼Ç¼×Ü´óС±ØÐë´óÓÚÔ¤Áô¼Ç¼´óС"
+#endif
+#endif
+// 	</e>
+
+// 	<e>10. FLASH½»Ò׼Ǽ10Çø
+#define DefCfg_LogBlock10_Sta     0
+// ============================
+//      <o>¼Ç¼Ŀ¼ÎļþËù·ÖÅäµÄ×Ü´óС(Ò³) <1-8196:1><#/1>
+#define DefCfg_LogFile10_DirPageSize  	  	3
+//      <o>¼Ç¼ÎļþËù·ÖÅäµÄ×Ü´óС(Ò³) <1-8196:1><#/1>
+#define DefCfg_LogFile10_PageSize  	  		10
+//      <o>¼Ç¼ÎļþÔ¤Áô´óС(Ò³) <1-10:1><#/1>
+#define DefCfg_LogFile10_PageRVS	  	  	3
+//      <o>ÿһÌõ¼Ç¼³¤¶È,°üÀ¨CRC(×Ö½Ú) <3-300:1><#/1>
+#define DefCfg_LogFile10_RecLength    		300
+// ============================
+#define DefCfg_LogDirFile10_StaAdd	  ( DefCfg_LogFile09_EndAdd ) 	//¼Ç¼¿ªÊ¼µØÖ·
+#define DefCfg_LogDirFile10_EndAdd	  ( DefCfg_LogDirFile10_StaAdd + 	\
+                                        ( DefCfg_LogFile10_DirPageSize *  \
+                                            DEF_FLASH_PageSize *		 	\
+                                            DefCfg_LogBlock10_Sta ) )	//¼Ç¼½áÊøµØÖ·
+// ============================
+#define DefCfg_LogFile10_StaAdd		( DefCfg_LogDirFile10_EndAdd ) 	//¼Ç¼¿ªÊ¼µØÖ·
+#define DefCfg_LogFile10_EndAdd		( DefCfg_LogFile10_StaAdd + 	 \
+                                    ( DefCfg_LogFile10_PageSize *    \
+                                      DEF_FLASH_PageSize *		     \
+                                      DefCfg_LogBlock10_Sta ) )	    //¼Ç¼½áÊøµØÖ·
+#if( DefCfg_LogBlock10_Sta )
+#if( DefCfg_LogFile10_PageSize <= DefCfg_LogFile10_PageRVS )
+#error "10:·ÖÅäµÄ¼Ç¼×Ü´óС±ØÐë´óÓÚÔ¤Áô¼Ç¼´óС"
+#endif
+#endif
+// 	</e>
+#define DefCfg_LogFileEndAdd             ( DefCfg_LogFile10_EndAdd )
+//FLASH½»Ò׼Ǽ´æ´¢µÄ½áÊøµØÖ·
+// </e>
+
+//=============================================>> (6) <<======================================================
+// <e>6. FLASHºÚÃûµ¥ÇøÅäÖÃ
+// <i> Enable or disable ºÚÃûµ¥ÇøÅäÖÃ
+#define BLACKLIST_CFG_ENABLE		1
+
+#define	BLACKLIST_START_ADDRESS		( DefCfg_LogFileEndAdd )
+//ºÚÃûµ¥´æ´¢¿ªÊ¼µØÖ·
+#define FLASH_PAGE_SIZE             ( DEF_FLASH_PageSize )
+
+//<e>1. µÚÒ»ºÚÃûµ¥ÇøÅäÖÃ
+// <i> Enable or disable ºÚÃûµ¥Çø¿éÅäÖã¨Ã¿¿éºÚÃûµ¥Çø°üº¬ÓжàÉÙ¿éFLASH¿é£©
+#define BLACKLIST1_CFG_ENABLE		1
+
+
+//   <o>ºÚÃûµ¥Ä¿Â¼ÎļþËù·ÖÅäµÄ×Ü´óС(Ò³) <1-8196:1><#/1>
+#define DefCfg_BlkFile01_DirPageSize  	  	20
+
+#define DefCfg_BlackFile01_StaAdd		( BLACKLIST_START_ADDRESS ) 		//ºÚÃû1µ¥¿ªÊ¼µØÖ·
+#define DefCfg_BlackFile01_EndAdd		DefCfg_BlackFile01_StaAdd + ( FLASH_PAGE_SIZE        * 	 \
+    BLACKLIST1_CFG_ENABLE  * 	 \
+    DefCfg_BlkFile01_DirPageSize )
+//ºÚÃû1µ¥½áÊøµØÖ·
+#define	BLACKLIST1_START_ADDRESS	DefCfg_BlackFile01_EndAdd
+
+//
+//   <o>ÿ¸öºÚÃûµ¥¿é°üº¬Flash¿éÒ³Êý  <1=> 1Ò³ <2=> 2Ò³ <3=> 3Ò³ <4=> 4Ò³
+//								<5=> 5ҳ  <6=> 6ҳ <7=> 7ҳ
+//   <i> ¶¨ÒåFLASHµÄÓÐЧÊÙÃü£¬Ó¦ÓÃÖÐÒÔ´ËÀ´½øÐÐÊÙÃü¼ÆËã
+//   <i> ĬÈÏ: 10
+#define BLACKLIST1_PAGE_SIZE		1
+
+//         <o>ºÚÃûµ¥ÇøËù·ÖÅäµÄºÚÃûµ¥¿éÊý <6-1000:2><#/1>
+//         <i>ºÚÃûµ¥ÇøËù·ÖÅäµÄ´óС
+//         <i>ĬÈÏ£º800
+#define BLACKLIST1_SECTION_SIZE		210
+
+//         <o>ÿ¸öºÚÃûµ¥µÄ³¤¶È <3=> 3×Ö½Ú <4=> 4×Ö½Ú <5=> 5×Ö½Ú
+//							   <6=> 6×Ö½Ú <8=> 8×Ö½Ú
+//         <i>ºÚÃûµ¥ÇøÊýÁ¿£¬À´Ó¦Óü¸¸öºÚÃûµ¥
+//         <i>ĬÈÏ£º6
+#define BLACKLIST1_LENGTH			4
+
+//         <o>ºÚÃûµ¥±È½Ï³¤¶È <3=> 3×Ö½Ú <4=> 4×Ö½Ú <5=> 5×Ö½Ú
+//							   <6=> 6×Ö½Ú <7=> 7×Ö½Ú <8=> 8×Ö½Ú
+//         <i>ºÚÃûµ¥ÇøÊýÁ¿£¬À´Ó¦Óü¸¸öºÚÃûµ¥
+//         <i>ĬÈÏ£º6
+#define BLACKLIST1_COMPARE_LENGTH	4
+
+//         <o>ºÚÃûµ¥¶ÔÆë·½·¨ <0=> ×ó¶ÔÆë <1=> ÓÒ¶ÔÆë
+//         <i>ºÚÃûµ¥ÇøÊýÁ¿£¬À´Ó¦Óü¸¸öºÚÃûµ¥
+//         <i>ĬÈÏ£º1
+#define	BLACKLIST1_FLUSH_METHOD		1
+
+// </e>
+
+
+//<e>2. µÚ¶þºÚÃûµ¥ÇøÅäÖÃ
+// <i> Enable or disable ºÚÃûµ¥Çø¿éÅäÖã¨Ã¿¿éºÚÃûµ¥Çø°üº¬ÓжàÉÙ¿éFLASH¿é£©
+#define BLACKLIST2_CFG_ENABLE		1
+
+
+//
+//   <o>ºÚÃûµ¥Ä¿Â¼ÎļþËù·ÖÅäµÄ×Ü´óС(Ò³) <1-8196:1><#/1>
+#define DefCfg_BlkFile02_DirPageSize  	  	6
+
+#define DefCfg_BlackFile02_StaAdd		DefCfg_BlackFile01_EndAdd + ( FLASH_PAGE_SIZE       * 	 \
+    BLACKLIST1_CFG_ENABLE * 	 \
+    BLACKLIST1_PAGE_SIZE  *    \
+    BLACKLIST1_SECTION_SIZE )
+//ºÚÃû1µ¥¿ªÊ¼µØÖ·
+#define DefCfg_BlackFile02_EndAdd		DefCfg_BlackFile02_StaAdd + ( FLASH_PAGE_SIZE       * 	 \
+    BLACKLIST2_CFG_ENABLE * 	 \
+    DefCfg_BlkFile02_DirPageSize )
+//ºÚÃû1µ¥½áÊøµØÖ·
+#define	BLACKLIST2_START_ADDRESS	DefCfg_BlackFile02_EndAdd
+
+
+
+//   <o>ÿ¸öºÚÃûµ¥¿é°üº¬Flash¿éÊýÁ¿ <1=> 1Ò³ <2=> 2Ò³ <3=> 3Ò³ <4=> 4Ò³
+//								<5=> 5ҳ  <6=> 6ҳ <7=> 7ҳ
+//   <i> ¶¨ÒåFLASHµÄÓÐЧÊÙÃü£¬Ó¦ÓÃÖÐÒÔ´ËÀ´½øÐÐÊÙÃü¼ÆËã
+//   <i> ĬÈÏ: 10
+#define BLACKLIST2_PAGE_SIZE		1
+
+//         <o>ºÚÃûµ¥ÇøËù·ÖÅäµÄºÚÃûµ¥¿éÊý <6-1000:2><#/1>
+//         <i>ºÚÃûµ¥ÇøËù·ÖÅäµÄ´óС
+//         <i>ĬÈÏ£º6
+#define BLACKLIST2_SECTION_SIZE		10
+
+//         <o>ÿ¸öºÚÃûµ¥µÄ³¤¶È <2=> 2×Ö½Ú <3=> 3×Ö½Ú <4=> 4×Ö½Ú <5=> 5×Ö½Ú
+//							   <6=> 6×Ö½Ú <7=> 7×Ö½Ú <8=> 8×Ö½Ú
+//         <i>ºÚÃûµ¥ÇøÊýÁ¿£¬À´Ó¦Óü¸¸öºÚÃûµ¥
+//         <i>ĬÈÏ£º6
+#define BLACKLIST2_LENGTH			2
+
+//         <o>ºÚÃûµ¥±È½Ï³¤¶È <2=> 2×Ö½Ú <3=> 3×Ö½Ú <4=> 4×Ö½Ú <5=> 5×Ö½Ú
+//							   <6=> 6×Ö½Ú <7=> 7×Ö½Ú <8=> 8×Ö½Ú
+//         <i>ºÚÃûµ¥ÇøÊýÁ¿£¬À´Ó¦Óü¸¸öºÚÃûµ¥
+//         <i>ĬÈÏ£º6
+#define BLACKLIST2_COMPARE_LENGTH	2
+
+//         <o>ºÚÃûµ¥¶ÔÆë·½·¨ <0=> ×ó¶ÔÆë <1=> ÓÒ¶ÔÆë
+//         <i>ºÚÃûµ¥ÇøÊýÁ¿£¬À´Ó¦Óü¸¸öºÚÃûµ¥
+//         <i>ĬÈÏ£º1
+#define	BLACKLIST2_FLUSH_METHOD		1
+
+// </e>
+
+//<e>3. µÚÈýºÚÃûµ¥ÇøÅäÖÃ
+// <i> Enable or disable ºÚÃûµ¥Çø¿éÅäÖã¨Ã¿¿éºÚÃûµ¥Çø°üº¬ÓжàÉÙ¿éFLASH¿é£©
+#define BLACKLIST3_CFG_ENABLE		0
+
+//
+//   <o>ºÚÃûµ¥Ä¿Â¼ÎļþËù·ÖÅäµÄ×Ü´óС(Ò³) <1-8196:1><#/1>
+#define DefCfg_BlkFile03_DirPageSize  	  	3
+
+#define DefCfg_BlackFile03_StaAdd		DefCfg_BlackFile02_EndAdd + ( FLASH_PAGE_SIZE       * 	 \
+    BLACKLIST2_CFG_ENABLE * 	 \
+    BLACKLIST2_PAGE_SIZE  *    \
+    BLACKLIST2_SECTION_SIZE )
+//ºÚÃû1µ¥¿ªÊ¼µØÖ·
+#define DefCfg_BlackFile03_EndAdd		DefCfg_BlackFile03_StaAdd + ( FLASH_PAGE_SIZE       * 	 \
+    BLACKLIST3_CFG_ENABLE * 	 \
+    DefCfg_BlkFile03_DirPageSize )
+//ºÚÃû1µ¥½áÊøµØÖ·
+#define	BLACKLIST3_START_ADDRESS	DefCfg_BlackFile03_EndAdd
+
+//   <o>ÿ¸öºÚÃûµ¥¿é°üº¬Flash¿éÊýÁ¿ <4=> 4¿é <5=> 5¿é <6=> 6¿é <7=> 7¿é
+//								<8=> 8¿é  <9=> 9¿é <10=> 10¿é
+//   <i> ¶¨ÒåFLASHµÄÓÐЧÊÙÃü£¬Ó¦ÓÃÖÐÒÔ´ËÀ´½øÐÐÊÙÃü¼ÆËã
+//   <i> ĬÈÏ: 10
+#define BLACKLIST3_PAGE_SIZE		10
+
+//         <o>ºÚÃûµ¥ÇøËù·ÖÅäµÄºÚÃûµ¥¿é´óС <6-1000:2><#/1>
+//         <i>ºÚÃûµ¥ÇøËù·ÖÅäµÄ´óС
+//         <i>ĬÈÏ£º6
+#define BLACKLIST3_SECTION_SIZE		8
+
+//         <o>ÿ¸öºÚÃûµ¥µÄ³¤¶È <3=> 3×Ö½Ú <4=> 4×Ö½Ú <5=> 5×Ö½Ú
+//							   <6=> 6×Ö½Ú <7=> 7×Ö½Ú <8=> 8×Ö½Ú
+//         <i>ºÚÃûµ¥ÇøÊýÁ¿£¬À´Ó¦Óü¸¸öºÚÃûµ¥
+//         <i>ĬÈÏ£º6
+#define BLACKLIST3_LENGTH			4
+
+//         <o>ºÚÃûµ¥±È½Ï³¤¶È <3=> 3×Ö½Ú <4=> 4×Ö½Ú <5=> 5×Ö½Ú
+//							   <6=> 6×Ö½Ú <7=> 7×Ö½Ú <8=> 8×Ö½Ú
+//         <i>ºÚÃûµ¥ÇøÊýÁ¿£¬À´Ó¦Óü¸¸öºÚÃûµ¥
+//         <i>ĬÈÏ£º6
+#define BLACKLIST3_COMPARE_LENGTH	4
+
+//         <o>ºÚÃûµ¥¶ÔÆë·½·¨ <0=> ×ó¶ÔÆë <1=> ÓÒ¶ÔÆë
+//         <i>ºÚÃûµ¥ÇøÊýÁ¿£¬À´Ó¦Óü¸¸öºÚÃûµ¥
+//         <i>ĬÈÏ£º1
+#define	BLACKLIST3_FLUSH_METHOD		1
+
+// </e>
+
+//<e>4. µÚËĺÚÃûµ¥ÇøÅäÖÃ
+// <i> Enable or disable ºÚÃûµ¥Çø¿éÅäÖã¨Ã¿¿éºÚÃûµ¥Çø°üº¬ÓжàÉÙ¿éFLASH¿é£©
+#define BLACKLIST4_CFG_ENABLE		0
+
+//
+//   <o>ºÚÃûµ¥Ä¿Â¼ÎļþËù·ÖÅäµÄ×Ü´óС(Ò³) <1-8196:1><#/1>
+#define DefCfg_BlkFile04_DirPageSize  	  	3
+
+#define DefCfg_BlackFile04_StaAdd		DefCfg_BlackFile03_EndAdd + ( FLASH_PAGE_SIZE       * 	 \
+    BLACKLIST3_CFG_ENABLE * 	 \
+    BLACKLIST3_PAGE_SIZE  *    \
+    BLACKLIST3_SECTION_SIZE )
+//ºÚÃû1µ¥¿ªÊ¼µØÖ·
+#define DefCfg_BlackFile04_EndAdd		DefCfg_BlackFile04_StaAdd + ( FLASH_PAGE_SIZE       * 	 \
+    BLACKLIST4_CFG_ENABLE * 	 \
+    DefCfg_BlkFile04_DirPageSize )
+//ºÚÃû1µ¥½áÊøµØÖ·
+#define	BLACKLIST4_START_ADDRESS	DefCfg_BlackFile04_EndAdd
+
+//   <o>ÿ¸öºÚÃûµ¥¿é°üº¬Flash¿éÊýÁ¿ <4=> 4¿é <5=> 5¿é <6=> 6¿é <7=> 7¿é
+//								<8=> 8¿é  <9=> 9¿é <10=> 10¿é
+//   <i> ¶¨ÒåFLASHµÄÓÐЧÊÙÃü£¬Ó¦ÓÃÖÐÒÔ´ËÀ´½øÐÐÊÙÃü¼ÆËã
+//   <i> ĬÈÏ: 10
+#define BLACKLIST4_PAGE_SIZE 		10
+
+//         <o>ºÚÃûµ¥ÇøËù·ÖÅäµÄºÚÃûµ¥¿é´óС <6-1000:2><#/1>
+//         <i>ºÚÃûµ¥ÇøËù·ÖÅäµÄ´óС
+//         <i>ĬÈÏ£º6
+#define BLACKLIST4_SECTION_SIZE		8
+
+//         <o>ÿ¸öºÚÃûµ¥µÄ³¤¶È <3=> 3×Ö½Ú <4=> 4×Ö½Ú <5=> 5×Ö½Ú
+//							   <6=> 6×Ö½Ú <7=> 7×Ö½Ú <8=> 8×Ö½Ú
+//         <i>ºÚÃûµ¥ÇøÊýÁ¿£¬À´Ó¦Óü¸¸öºÚÃûµ¥
+//         <i>ĬÈÏ£º6
+#define BLACKLIST4_LENGTH			4
+
+//         <o>ºÚÃûµ¥±È½Ï³¤¶È <3=> 3×Ö½Ú <4=> 4×Ö½Ú <5=> 5×Ö½Ú
+//							   <6=> 6×Ö½Ú <7=> 7×Ö½Ú <8=> 8×Ö½Ú
+//         <i>ºÚÃûµ¥ÇøÊýÁ¿£¬À´Ó¦Óü¸¸öºÚÃûµ¥
+//         <i>ĬÈÏ£º6
+#define BLACKLIST4_COMPARE_LENGTH	4
+
+//         <o>ºÚÃûµ¥¶ÔÆë·½·¨ <0=> ×ó¶ÔÆë <1=> ÓÒ¶ÔÆë
+//         <i>ºÚÃûµ¥ÇøÊýÁ¿£¬À´Ó¦Óü¸¸öºÚÃûµ¥
+//         <i>ĬÈÏ£º1
+#define	BLACKLIST4_FLUSH_METHOD		1
+
+// </e>
+
+//<e>5. µÚÎåºÚÃûµ¥ÇøÅäÖÃ
+// <i> Enable or disable ºÚÃûµ¥Çø¿éÅäÖã¨Ã¿¿éºÚÃûµ¥Çø°üº¬ÓжàÉÙ¿éFLASH¿é£©
+#define BLACKLIST5_CFG_ENABLE		0
+
+//
+//   <o>ºÚÃûµ¥Ä¿Â¼ÎļþËù·ÖÅäµÄ×Ü´óС(Ò³) <1-8196:1><#/1>
+#define DefCfg_BlkFile05_DirPageSize  	  	3
+
+#define DefCfg_BlackFile05_StaAdd		DefCfg_BlackFile04_EndAdd + ( FLASH_PAGE_SIZE       * 	 \
+    BLACKLIST4_CFG_ENABLE * 	 \
+    BLACKLIST4_PAGE_SIZE  *    \
+    BLACKLIST4_SECTION_SIZE )
+//ºÚÃû1µ¥¿ªÊ¼µØÖ·
+#define DefCfg_BlackFile05_EndAdd		DefCfg_BlackFile05_StaAdd + ( FLASH_PAGE_SIZE       * 	 \
+    BLACKLIST5_CFG_ENABLE * 	 \
+    DefCfg_BlkFile05_DirPageSize )
+//ºÚÃû1µ¥½áÊøµØÖ·
+#define	BLACKLIST5_START_ADDRESS	DefCfg_BlackFile05_EndAdd
+
+//   <o>ÿ¸öºÚÃûµ¥¿é°üº¬Flash¿éÊýÁ¿ <2=> 2¿é <4=> 4¿é <6=> 6¿é
+//								<8=> 8¿é <10=> 10¿é <12=> 12¿é
+//								<14=> 14¿é <16=> 16¿é <18=> 18¿é
+//								<20=> 20¿é
+//					<4096=> 4096Bytes <65536=> 64KBytes
+//   <i> ¶¨ÒåFLASHµÄÓÐЧÊÙÃü£¬Ó¦ÓÃÖÐÒÔ´ËÀ´½øÐÐÊÙÃü¼ÆËã
+//   <i> ĬÈÏ: 10
+#define BLACKLIST5_PAGE_SIZE		10
+
+//         <o>ºÚÃûµ¥ÇøËù·ÖÅäµÄºÚÃûµ¥¿é´óС <6-1000:2><#/1>
+//         <i>ºÚÃûµ¥ÇøËù·ÖÅäµÄ´óС
+//         <i>ĬÈÏ£º6
+#define BLACKLIST5_SECTION_SIZE		8
+
+//         <o>ÿ¸öºÚÃûµ¥µÄ³¤¶È <3=> 3×Ö½Ú <4=> 4×Ö½Ú <5=> 5×Ö½Ú
+//							   <6=> 6×Ö½Ú <7=> 7×Ö½Ú <8=> 8×Ö½Ú
+//         <i>ºÚÃûµ¥ÇøÊýÁ¿£¬À´Ó¦Óü¸¸öºÚÃûµ¥
+//         <i>ĬÈÏ£º6
+#define BLACKLIST5_LENGTH			4
+
+//         <o>ºÚÃûµ¥±È½Ï³¤¶È <3=> 3×Ö½Ú <4=> 4×Ö½Ú <5=> 5×Ö½Ú
+//							   <6=> 6×Ö½Ú <7=> 7×Ö½Ú <8=> 8×Ö½Ú
+//         <i>ºÚÃûµ¥ÇøÊýÁ¿£¬À´Ó¦Óü¸¸öºÚÃûµ¥
+//         <i>ĬÈÏ£º6
+#define BLACKLIST5_COMPARE_LENGTH	4
+
+//         <o>ºÚÃûµ¥¶ÔÆë·½·¨ <0=> ×ó¶ÔÆë <1=> ÓÒ¶ÔÆë
+//         <i>ºÚÃûµ¥ÇøÊýÁ¿£¬À´Ó¦Óü¸¸öºÚÃûµ¥
+//         <i>ĬÈÏ£º1
+#define	BLACKLIST5_FLUSH_METHOD		1
+
+// </e>
+
+#define	BLACKLIST_END_ADDRESS		DefCfg_BlackFile05_EndAdd + ( FLASH_PAGE_SIZE       * 	 \
+    BLACKLIST5_CFG_ENABLE * 	 \
+    BLACKLIST5_PAGE_SIZE  *    \
+    BLACKLIST5_SECTION_SIZE )
+
+//ºÚÃûµ¥´æ´¢½áÊøµØÖ·
+
+
+
+// </e>
+
+//=============================================>> (7) <<======================================================
+
+//=============================================>> (end) <<====================================================
+
+// </e>
+//------------- <<< end of configuration section >>> -----------------------
+
+/*
+**************************************************************************************************************
+*                                         Keil ²Ëµ¥ÅäÖýáÊø
+**************************************************************************************************************
+*/
+
+/*
+**************************************************************************************************************
+*                                          ¸¨ Öú Åä ÖÃ
+**************************************************************************************************************
+*/
+//========>>FLASH Ê£Óà
+#define  DEF_FLASH_ResStartAdd    ( BLACKLIST_END_ADDRESS )
+//Ê£ÓàFLASH¿Õ¼äµÄ¿ªÊ¼µØÖ·
+#define  DEF_FLASH_ResEndAdd      ( DEF_FLASH_Pages * DEF_FLASH_PageSize )
+//Ê£ÓàFLASH¿Õ¼äµÄ½áÊøµØÖ·
+#define  DEF_FLASH_ResSize 	   ( DEF_FLASH_ResEndAdd - DEF_FLASH_ResStartAdd )
+//Óû§¿ÉÒÔʹÓÃ×Ö½ÚÊý
+
+
+//========>>×î´ó¼Ç¼³¤¶È
+#define DEF_FLASH_MaxRecLength	( DefCfg_LogFile01_RecLength * DefCfg_LogBlock01_Sta )
+
+#if( DEF_FLASH_MaxRecLength < ( DefCfg_LogFile02_RecLength * DefCfg_LogBlock02_Sta ) )
+#undef	DEF_FLASH_MaxRecLength
+#define DEF_FLASH_MaxRecLength	( DefCfg_LogFile02_RecLength * DefCfg_LogBlock02_Sta )
+#endif
+
+#if( DEF_FLASH_MaxRecLength < ( DefCfg_LogFile03_RecLength * DefCfg_LogBlock03_Sta ) )
+#undef	DEF_FLASH_MaxRecLength
+#define DEF_FLASH_MaxRecLength	( DefCfg_LogFile03_RecLength * DefCfg_LogBlock03_Sta )
+#endif
+
+#if( DEF_FLASH_MaxRecLength < ( DefCfg_LogFile04_RecLength * DefCfg_LogBlock04_Sta ) )
+#undef	DEF_FLASH_MaxRecLength
+#define DEF_FLASH_MaxRecLength	( DefCfg_LogFile04_RecLength * DefCfg_LogBlock04_Sta )
+#endif
+
+#if( DEF_FLASH_MaxRecLength < ( DefCfg_LogFile05_RecLength * DefCfg_LogBlock05_Sta ) )
+#undef	DEF_FLASH_MaxRecLength
+#define DEF_FLASH_MaxRecLength	( DefCfg_LogFile05_RecLength * DefCfg_LogBlock05_Sta )
+#endif
+
+#if( DEF_FLASH_MaxRecLength < ( DefCfg_LogFile06_RecLength * DefCfg_LogBlock06_Sta ) )
+#undef	DEF_FLASH_MaxRecLength
+#define DEF_FLASH_MaxRecLength	( DefCfg_LogFile06_RecLength * DefCfg_LogBlock06_Sta )
+#endif
+
+#if( DEF_FLASH_MaxRecLength < ( DefCfg_LogFile07_RecLength * DefCfg_LogBlock07_Sta ) )
+#undef	DEF_FLASH_MaxRecLength
+#define DEF_FLASH_MaxRecLength	( DefCfg_LogFile07_RecLength * DefCfg_LogBlock07_Sta )
+#endif
+
+#if( DEF_FLASH_MaxRecLength < ( DefCfg_LogFile08_RecLength * DefCfg_LogBlock08_Sta ) )
+#undef	DEF_FLASH_MaxRecLength
+#define DEF_FLASH_MaxRecLength	( DefCfg_LogFile08_RecLength * DefCfg_LogBlock08_Sta )
+#endif
+
+#if( DEF_FLASH_MaxRecLength < ( DefCfg_LogFile09_RecLength * DefCfg_LogBlock09_Sta ) )
+#undef	DEF_FLASH_MaxRecLength
+#define DEF_FLASH_MaxRecLength	( DefCfg_LogFile09_RecLength * DefCfg_LogBlock09_Sta )
+#endif
+
+#if( DEF_FLASH_MaxRecLength < ( DefCfg_LogFile10_RecLength * DefCfg_LogBlock10_Sta ) )
+#undef	DEF_FLASH_MaxRecLength
+#define DEF_FLASH_MaxRecLength	( DefCfg_LogFile10_RecLength * DefCfg_LogBlock10_Sta )
+#endif
+
+//========>>×î´óºÚÃûµ¥»º³åÇø³¤¶È
+#define DEF_FLASH_MaxBlkBufSize	( BLACKLIST1_CFG_ENABLE * BLACKLIST1_PAGE_SIZE * DEF_FLASH_PageSize )
+
+#if( DEF_FLASH_MaxBlkBufSize < ( BLACKLIST2_CFG_ENABLE * BLACKLIST2_PAGE_SIZE * DEF_FLASH_PageSize ) )
+#undef	DEF_FLASH_MaxBlkBufSize
+#define DEF_FLASH_MaxBlkBufSize	( BLACKLIST2_CFG_ENABLE * BLACKLIST2_PAGE_SIZE * DEF_FLASH_PageSize )
+#endif
+
+#if( DEF_FLASH_MaxBlkBufSize < ( BLACKLIST3_CFG_ENABLE * BLACKLIST3_PAGE_SIZE * DEF_FLASH_PageSize ) )
+#undef	DEF_FLASH_MaxBlkBufSize
+#define DEF_FLASH_MaxBlkBufSize	( BLACKLIST3_CFG_ENABLE * BLACKLIST3_PAGE_SIZE * DEF_FLASH_PageSize )
+#endif
+
+#if( DEF_FLASH_MaxBlkBufSize < ( BLACKLIST4_CFG_ENABLE * BLACKLIST4_PAGE_SIZE * DEF_FLASH_PageSize ) )
+#undef	DEF_FLASH_MaxBlkBufSize
+#define DEF_FLASH_MaxBlkBufSize	( BLACKLIST4_CFG_ENABLE * BLACKLIST4_PAGE_SIZE * DEF_FLASH_PageSize )
+#endif
+
+#if( DEF_FLASH_MaxBlkBufSize < ( BLACKLIST5_CFG_ENABLE * BLACKLIST5_PAGE_SIZE * DEF_FLASH_PageSize ) )
+#undef	DEF_FLASH_MaxBlkBufSize
+#define DEF_FLASH_MaxBlkBufSize	( BLACKLIST5_CFG_ENABLE * BLACKLIST5_PAGE_SIZE * DEF_FLASH_PageSize )
+#endif
+
+//========>>ÿ¿é¼ÇÂ¼Çø×î´æ´¢¼Ç¼ÊýÁ¿ ÀíÂÛÁ¿´óÖµ
+#define	DEF_Rec01_MaxRecNum	( ( DefCfg_LogFile01_PageSize * DEF_FLASH_PageSize )/DefCfg_LogFile01_RecLength )
+#define	DEF_Rec02_MaxRecNum	( ( DefCfg_LogFile02_PageSize * DEF_FLASH_PageSize )/DefCfg_LogFile02_RecLength )
+#define	DEF_Rec03_MaxRecNum	( ( DefCfg_LogFile03_PageSize * DEF_FLASH_PageSize )/DefCfg_LogFile03_RecLength )
+#define	DEF_Rec04_MaxRecNum	( ( DefCfg_LogFile04_PageSize * DEF_FLASH_PageSize )/DefCfg_LogFile04_RecLength )
+#define	DEF_Rec05_MaxRecNum	( ( DefCfg_LogFile05_PageSize * DEF_FLASH_PageSize )/DefCfg_LogFile05_RecLength )
+#define	DEF_Rec06_MaxRecNum	( ( DefCfg_LogFile06_PageSize * DEF_FLASH_PageSize )/DefCfg_LogFile06_RecLength )
+#define	DEF_Rec07_MaxRecNum	( ( DefCfg_LogFile07_PageSize * DEF_FLASH_PageSize )/DefCfg_LogFile07_RecLength )
+#define	DEF_Rec08_MaxRecNum	( ( DefCfg_LogFile08_PageSize * DEF_FLASH_PageSize )/DefCfg_LogFile08_RecLength )
+#define	DEF_Rec09_MaxRecNum	( ( DefCfg_LogFile09_PageSize * DEF_FLASH_PageSize )/DefCfg_LogFile09_RecLength )
+#define	DEF_Rec10_MaxRecNum	( ( DefCfg_LogFile10_PageSize * DEF_FLASH_PageSize )/DefCfg_LogFile10_RecLength )
+
+
+
+
+
+//=========>>¿Õ¼äÓÃÊÇʹÓÃÍê
+#if( DEF_FLASH_ResStartAdd > DEF_FLASH_Pages * DEF_FLASH_PageSize )
+#error "FLASH·ÖÅä¿Õ¼ä³¬ÏÞ"
+#endif
+
+
+/*
+**************************************************************************************************************
+*                                   ¶Ô²¿·ÖÅäÖÃÐÅÏ¢½øÐмì²â
+*
+*  ×¢ Ò⣺ ¶ÔÅäÖÃÐÅÏ¢½øÐмì²âÖ»ÊǼòµ¥µÄ¼ì²â£¬²»ÒªÍêÈ«ÒÀÀµ´Ë¼ì²â¡£ÓÐЩ´íÎóÊDz»Äܼì²âµ½µÄ£¬½øÐÐÅäÖÃÊ±Ó¦ÌØ±ðÁôÒâ¡£
+*
+**************************************************************************************************************
+*/
+
+//======================================>> ºÚÃûµ¥ÅäÖüì²â
+#if( ( BLACKLIST1_SECTION_SIZE % 2 ) != 0 )
+#error "µÚÒ»ºÚÃûµ¥Çø¿éÊý²»ÊÇżÊý£¡Çëµ÷ÕûºÚÃûµ¥ÅäÖÃ"
+#endif
+#if( ( BLACKLIST2_SECTION_SIZE % 2 ) != 0 )
+#error "µÚ¶þºÚÃûµ¥Çø¿éÊý²»ÊÇżÊý£¡Çëµ÷ÕûºÚÃûµ¥ÅäÖÃ"
+#endif
+#if( ( BLACKLIST3_SECTION_SIZE % 2 ) != 0 )
+#error "µÚÈýºÚÃûµ¥Çø¿éÊý²»ÊÇżÊý£¡Çëµ÷ÕûºÚÃûµ¥ÅäÖÃ"
+#endif
+#if( ( BLACKLIST4_SECTION_SIZE % 2 ) != 0 )
+#error "µÚËĺÚÃûµ¥Çø¿éÊý²»ÊÇżÊý£¡Çëµ÷ÕûºÚÃûµ¥ÅäÖÃ"
+#endif
+#if( ( BLACKLIST5_SECTION_SIZE % 2 ) != 0 )
+#error "µÚÎåºÚÃûµ¥Çø¿éÊý²»ÊÇżÊý£¡Çëµ÷ÕûºÚÃûµ¥ÅäÖÃ"
+#endif
+
+
+#if( ( ( FLASH_PAGE_SIZE * BLACKLIST1_PAGE_SIZE ) % BLACKLIST1_LENGTH ) != 0 )
+#error "µÚÒ»ºÚÃûµ¥ÇøÃ¿¿é²»ÄÜ´æÕûÊý¸öºÚÃûµ¥£¡Çëµ÷ÕûºÚÃûµ¥ÅäÖÃ"
+#endif
+
+#if( ( ( FLASH_PAGE_SIZE * BLACKLIST2_PAGE_SIZE ) % BLACKLIST2_LENGTH ) != 0 )
+#error "µÚ¶þºÚÃûµ¥ÇøÃ¿¿é²»ÄÜ´æÕûÊý¸öºÚÃûµ¥£¡Çëµ÷ÕûºÚÃûµ¥ÅäÖÃ"
+#endif
+
+#if( ( ( FLASH_PAGE_SIZE * BLACKLIST3_PAGE_SIZE ) % BLACKLIST3_LENGTH ) != 0 )
+#error "µÚÈýºÚÃûµ¥ÇøÃ¿¿é²»ÄÜ´æÕûÊý¸öºÚÃûµ¥£¡Çëµ÷ÕûºÚÃûµ¥ÅäÖÃ"
+#endif
+
+#if( ( ( FLASH_PAGE_SIZE * BLACKLIST4_PAGE_SIZE ) % BLACKLIST5_LENGTH ) != 0 )
+#error "µÚËĺÚÃûµ¥ÇøÃ¿¿é²»ÄÜ´æÕûÊý¸öºÚÃûµ¥£¡Çëµ÷ÕûºÚÃûµ¥ÅäÖÃ"
+#endif
+
+#if( ( ( FLASH_PAGE_SIZE * BLACKLIST5_PAGE_SIZE ) % BLACKLIST5_LENGTH ) != 0 )
+#error "µÚÎåºÚÃûµ¥ÇøÃ¿¿é²»ÄÜ´æÕûÊý¸öºÚÃûµ¥£¡Çëµ÷ÕûºÚÃûµ¥ÅäÖÃ"
+#endif
+
+
+
+#if( BLACKLIST1_COMPARE_LENGTH > BLACKLIST1_LENGTH )
+#error "µÚÒ»ºÚÃûµ¥ÇøºÚÃûµ¥±È½Ï³¤¶È±ÈºÚÃûµ¥³¤¶È´ó£¡Çëµ÷ÕûºÚÃûµ¥ÅäÖÃ"
+#endif
+
+#if( BLACKLIST2_COMPARE_LENGTH > BLACKLIST2_LENGTH )
+#error "µÚ¶þºÚÃûµ¥ÇøºÚÃûµ¥±È½Ï³¤¶È±ÈºÚÃûµ¥³¤¶È´ó£¡Çëµ÷ÕûºÚÃûµ¥ÅäÖÃ"
+#endif
+
+#if( BLACKLIST3_COMPARE_LENGTH > BLACKLIST3_LENGTH )
+#error "µÚÈýºÚÃûµ¥ÇøºÚÃûµ¥±È½Ï³¤¶È±ÈºÚÃûµ¥³¤¶È´ó£¡Çëµ÷ÕûºÚÃûµ¥ÅäÖÃ"
+#endif
+
+#if( BLACKLIST4_COMPARE_LENGTH > BLACKLIST4_LENGTH )
+#error "µÚËĺÚÃûµ¥ÇøºÚÃûµ¥±È½Ï³¤¶È±ÈºÚÃûµ¥³¤¶È´ó£¡Çëµ÷ÕûºÚÃûµ¥ÅäÖÃ"
+#endif
+
+#if( BLACKLIST5_COMPARE_LENGTH > BLACKLIST5_LENGTH )
+#error "µÚÎåºÚÃûµ¥ÇøºÚÃûµ¥±È½Ï³¤¶È±ÈºÚÃûµ¥³¤¶È´ó£¡Çëµ÷ÕûºÚÃûµ¥ÅäÖÃ"
+#endif
+
+
+
+
+#endif
+
diff --git a/sys_hw/data_tools.c b/sys_hw/data_tools.c
new file mode 100644
index 0000000..6ca8143
--- /dev/null
+++ b/sys_hw/data_tools.c
@@ -0,0 +1,247 @@
+#include "data_tools.h"
+
+u8 int2array(u32 val, void* dest, u8 len)
+{
+	u8 index = 0;
+
+	if(len>4) return 1;
+
+	for(index=0;index<len;index++)
+		*((u8 *)dest+index) = (u32)val>>((len-1-index)<<3);
+
+	return 0;
+}
+
+u8 array2int(void* src, void* pval, u8 len)
+{
+	u8 index = 0;
+
+	if(len>4) return 1;
+
+	for(index=0;index<len;index++)
+	{
+		*((u8*)pval+len-1-index) = *((u8 *)src+index);
+	}
+	return 0;
+}
+
+u8 mem_test(void* src, u8 val, int count)
+{
+	if(!count) return 0;
+
+	while(count--){
+		if(*(char *)src != val) return 1;
+		src = (char *)src +1;
+	}
+	return 0;
+}
+
+u8 mem_reverse(void* src, int count)
+{
+	u8  temp;
+	int i; 
+    u8* pbuff = (u8 *)src;
+	
+	if(!count) return 0;
+
+	for(i=0;i<count/2;i++)
+	{
+		temp = *(pbuff + i);
+		*(pbuff + i) = *(pbuff + count - 1 -i);
+		*(pbuff + count - 1 -i) = temp;
+	}
+	return 0;
+}
+
+/**********************************************
+bcdÊý¾Ýת»»ÎªhexÊý¾Ý
+***********************************************/
+void bcd2hex(void* bcd, u32 len)
+{ 	
+	u32  i;
+    u8* pbuff = (u8 *)bcd;	
+	
+	for(i=0;i<len;i++)
+	{
+		*pbuff=((*pbuff)/16)*10+(*pbuff)%16;
+		pbuff++;
+	}
+}
+
+/*********************************************
+hexÊý¾Ýת»»Îªbcd
+**********************************************/
+void hex2bcd(void* hex, u32 len)
+{ 	
+	u32 i;
+    u8* pbuff = (u8 *)hex;
+	
+	for(i=0;i<len;i++)
+	{
+		*pbuff =(*pbuff/10)*16+(*pbuff)%10 ;	
+		pbuff++ ;
+	}
+}
+
+static int char2bin(u8 c, u8* bin)
+{	
+	if((c>='0') && (c<='9'))	
+	{
+		*bin = c - '0';
+	}
+	else if((c>='a') && (c<='f'))
+	{
+		*bin = c - 'a' + 0x0A;	
+	}
+	else if((c>='A') && (c<='F'))
+	{
+		*bin = c - 'A' + 0x0A;	
+	}
+	else
+	{
+		return 1; 	
+	}	
+	return 0;
+}
+
+int hex2bin(u8* in_buff, u8* out_buf, u32 len)
+{
+	u32 i;
+	u8 temp[2];
+	
+	if(len&0x01) return 1;
+	for(i=0;i<len;)
+	{
+		char2bin(*(in_buff + i), &temp[0]);
+		char2bin(*(in_buff + i + 1), &temp[1]);
+		*(out_buf+(i>>1)) = (temp[0]<<4) + temp[1];
+		i += 2;
+	}
+	return 0;	
+}
+
+int get_repetition_count(unsigned char* src, unsigned int src_left)
+{
+	unsigned int count = 0;
+	unsigned int i = 0;
+
+	while(i < src_left)
+	{
+		if(*src == *(src+i))
+		{
+			if(count<127)
+			{
+				count++;
+			}
+	
+		}
+		else
+		{
+			break;
+		}
+		i ++;
+	}
+	return count;
+}
+
+int get_non_repetition_count(unsigned char* src, unsigned int src_left)
+{
+	unsigned int count = 0;
+
+	while(count < src_left)
+	{
+		if(get_repetition_count(src+count, src_left-count)<3)
+		{
+			if(count<127)
+			{
+				count++;
+			}
+		}
+		else
+		{
+			break;
+		}
+	}
+	return count;
+
+}
+
+/*
+	rle½âѹËõ
+*/
+int rle_decode(unsigned char *in_buf, int in_sz, unsigned char *out_buf, int out_buf_sz)
+{
+    unsigned char *src = in_buf;
+    int i;
+    int dec_sz = 0;
+
+    while(src < (in_buf + in_sz))
+    {
+        unsigned char sign = *src++;
+        int count = sign & 0x7F;
+        if((dec_sz + count) > out_buf_sz) /*Êä³ö»º³åÇø¿Õ¼ä²»¹»ÁË*/
+        {
+            return -1;
+        }
+        if((sign & 0x80) == 0x80) /*Á¬ÐøÖظ´Êý¾Ý±êÖ¾*/
+        {
+            for(i = 0; i < count; i++)
+            {
+                out_buf[dec_sz++] = *src;
+            }
+            src++;
+        }
+        else
+        {
+            for(i = 0; i < count; i++)
+            {
+                out_buf[dec_sz++] = *src++;
+            }
+        }
+    }
+
+    return dec_sz;
+}
+
+/*
+	rleѹËõ
+*/
+int rle_encode(unsigned char *in_buf, int in_sz, unsigned char *out_buf, int out_buf_sz)
+{
+    unsigned char *src = in_buf;
+    int i;
+    int enc_sz = 0;
+    int src_left = in_sz;
+
+    while(src_left > 0)
+    {
+        int count = get_repetition_count(src, src_left);
+
+        if(count>2) /*ÊÇ·ñÁ¬ÐøÈý¸ö×Ö½ÚÊý¾ÝÏàͬ£¿*/
+        {
+            if((enc_sz + 2) > out_buf_sz) /*Êä³ö»º³åÇø¿Õ¼ä²»¹»ÁË*/
+            {
+                return -1;
+            }
+            out_buf[enc_sz++] = count | 0x80;
+            out_buf[enc_sz++] = *src;
+            src += count;
+            src_left -= count;
+        }
+        else
+        {
+            count = get_non_repetition_count(src, src_left);
+            if((enc_sz + count + 1) > out_buf_sz) /*Êä³ö»º³åÇø¿Õ¼ä²»¹»ÁË*/
+            {
+                return -1;
+            }
+            out_buf[enc_sz++] = count;
+            for(i = 0; i < count; i++) /*Öð¸ö¸´ÖÆÕâЩÊý¾Ý*/
+            {
+                out_buf[enc_sz++] = *src++;;
+            }
+            src_left -= count;
+        }
+    }
+    return enc_sz;
+}
diff --git a/sys_hw/data_tools.h b/sys_hw/data_tools.h
new file mode 100644
index 0000000..018dc0d
--- /dev/null
+++ b/sys_hw/data_tools.h
@@ -0,0 +1,20 @@
+#ifndef __data_tools_h__
+#define __data_tools_h__
+
+#include "stm32f10x.h"
+
+extern u8 int2array(u32 val, void * dest, u8 len);
+extern u8 array2int(void * src, void* pval, u8 len);
+
+extern u8 mem_reverse(void * src, int count);
+extern u8 mem_test(void * src, u8 val, int count);
+
+extern void hex2bcd(void* hex, u32 len);
+extern void bcd2hex(void* bcd, u32 len);
+extern int hex2bin(u8* in_buff, u8* out_buf, u32 len);
+
+extern int rle_encode(unsigned char *in_buf, int in_sz, unsigned char *out_buf, int out_buf_sz);
+extern int rle_decode(unsigned char *in_buf, int in_sz, unsigned char *out_buf, int out_buf_sz);
+
+#endif /* __data_tools_h__ */
+
diff --git a/sys_hw/drv_adc.c b/sys_hw/drv_adc.c
new file mode 100644
index 0000000..ad54096
--- /dev/null
+++ b/sys_hw/drv_adc.c
@@ -0,0 +1,321 @@
+#include "drv_adc.h"
+#include "stm32f10x.h"
+#include "keypad.h"
+#include "string.h"
+#include "../supwisdom/sp_util.h"
+#include "../supwisdom/sp_flash.h"
+
+//#include "mifare_one_hw_lib.h"
+#include "timer.h"
+#include "data_tools.h"
+//#include "crc.h"
+//#include "dbg.h"
+
+#define PDDThreshod_Votage    80
+#define PDDThreshod_ADCVal    (PDDThreshod_Votage*4095L/713L)
+
+#define Reset_Votage          74       //TPS54160Í£Ö¹¹¤×÷µçѹ7.1V
+#define Reset_ADCVal          (Reset_Votage*4095L/713L)
+
+
+typedef void (*adc_timer_tick_t)(void);
+
+volatile uint8_t  adc_timer;
+volatile uint8_t  ch_idx;
+volatile uint16_t adc_val_vdd=4095;
+volatile uint16_t adc_val;
+dac_para_t dac_para = {890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 0}; //dacÊä³öµçѹĬÈÏ3.3V
+adc_timer_tick_t p_adc_timer_tick = 0;
+volatile uint16_t adc_buff[ADC_MAX_CH_NUM];
+static const uint8_t adc_ch_tbl[ADC_MAX_CH_NUM] =
+{
+  ADC_Channel_9,         //key_adc1,pb1
+  ADC_Channel_4,         //key_adc2,pa4
+  ADC_Channel_1,         //key_adc3,pa1
+  ADC_Channel_8,         //key_adc4,pb0
+  ADC_Channel_3,         //key_adc5,pa3
+  ADC_Channel_0,         //key_adc6,pa0
+  ADC_Channel_15,        //key_adc7,pc5
+  ADC_Channel_2,         //key_adc8,pa2
+  ADC_Channel_13,        //key_adc9,pc3
+  ADC_Channel_11,        //key_adc10,pc1
+  ADC_Channel_10,        //key_adc11,pc0
+  ADC_Channel_12,        //key_adc12,pc2
+  ADC_Channel_6,         //vcc_adc_in,pa6
+  ADC_Channel_14,        //fa_adc_in,pc4
+  ADC_Channel_7          //hall_adc_in,pa7
+};
+
+void adc_timer_tick(void);
+static void timer4_init(void);
+
+static void adc_gpio_init(void)
+{
+  GPIO_InitTypeDef GPIO_InitStructure;
+
+  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |
+                         RCC_APB2Periph_GPIOB |
+                         RCC_APB2Periph_GPIOC, ENABLE);
+
+  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
+
+  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 |
+                                GPIO_Pin_1 |
+                                GPIO_Pin_2 |
+                                GPIO_Pin_3 |
+                                GPIO_Pin_4 |
+                                GPIO_Pin_6 |
+                                GPIO_Pin_7;
+  GPIO_Init(GPIOA, &GPIO_InitStructure);
+
+  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 |
+                                GPIO_Pin_1;
+  GPIO_Init(GPIOB, &GPIO_InitStructure);
+
+  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 |
+                                GPIO_Pin_1 |
+                                GPIO_Pin_2 |
+                                GPIO_Pin_3 |
+                                GPIO_Pin_4 |
+                                GPIO_Pin_5;
+  GPIO_Init(GPIOC, &GPIO_InitStructure);
+}
+
+static void adc_channels_init(void)
+{
+  ADC_InitTypeDef ADC_InitStructure;
+
+  RCC_ADCCLKConfig(RCC_PCLK2_Div6);
+  RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
+
+  ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
+  ADC_InitStructure.ADC_ScanConvMode = DISABLE;
+  ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
+  ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
+  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
+  ADC_InitStructure.ADC_NbrOfChannel = 1;
+  ADC_Init(ADC1, &ADC_InitStructure);
+  ADC1->CR2 |= 0x0010000;
+
+  //key adc 1 - 12
+  ch_idx = 0;
+  ADC_RegularChannelConfig(ADC1, adc_ch_tbl[ch_idx], 1,
+                           ADC_SampleTime_239Cycles5);
+  ADC_Cmd(ADC1, ENABLE);
+
+  ADC_ResetCalibration(ADC1);
+  while(ADC_GetResetCalibrationStatus(ADC1));
+
+  ADC_StartCalibration(ADC1);
+  while(ADC_GetCalibrationStatus(ADC1));
+  ADC_SoftwareStartConvCmd(ADC1, ENABLE);
+  p_adc_timer_tick = adc_timer_tick;
+}
+
+static void adc_dma_init(void)
+{
+}
+
+static void adc_nvic_init(void)
+{
+
+}
+
+static void dac_init(void)
+{
+  GPIO_InitTypeDef GPIO_InitStructure;
+
+  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
+
+  DAC_DeInit();
+
+  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
+
+  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
+  GPIO_Init(GPIOA, &GPIO_InitStructure);
+
+
+  RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);
+
+  DAC->CR |= 0x00010000;
+  DAC_SetChannel2Data(DAC_Align_12b_R, dac_para.val[0]);
+}
+/**
+**У׼°´¼ü
+**/
+void calibrate_key(uint8 cache_enable)
+{
+  const uint8 len = sizeof(dac_para) +2;
+  uint8 buf[len];
+  if(cache_enable)
+  {
+    uint8 crc[2];
+    sp_flash_read(ADDR_KEY_PARA,buf,len);
+    sp_protocol_crc(buf ,len -2,crc);
+    if(memcmp(buf +len -2,crc,2) == 0)
+    {
+      memcpy((uint8*)&dac_para,buf,sizeof(dac_para));
+      return;
+    }
+  }
+  dac_para_auto_set();
+  memcpy(buf,(uint8*)&dac_para,sizeof(dac_para));
+  sp_protocol_crc(buf,len -2,buf +len -2);
+  sp_flash_erase(ADDR_KEY_PARA);
+  sp_flash_write(ADDR_KEY_PARA,buf,len);
+}
+
+void adc_init(void)
+{
+  timer4_init();
+  dac_init();
+  adc_gpio_init();
+  adc_nvic_init();
+  adc_dma_init();
+  adc_channels_init();
+  calibrate_key(1);
+}
+
+uint16_t adc_get_val(uint8_t ch)
+{
+  if(ch<ADC_MAX_CH_NUM)
+  {
+    return adc_buff[ch];
+  }
+  else
+  {
+    return 0;
+  }
+}
+
+void adc_timer_tick(void)
+{
+  adc_timer ++;
+  if(adc_timer>=8)
+  {
+    adc_timer = 0;
+  }
+  if(adc_timer==0)
+  {
+    adc_buff[ch_idx] = ADC_GetConversionValue(ADC1);
+    ch_idx ++;
+    if(ch_idx >= ADC_MAX_CH_NUM)
+    {
+      keypad_scan();
+      ch_idx = 0;
+    }
+
+    if(ch_idx < 12)
+    {
+      DAC_SetChannel2Data(DAC_Align_12b_R, dac_para.val[ch_idx]);
+    }
+  }
+  else if(adc_timer == 7)
+  {
+    ADC_RegularChannelConfig(ADC1, adc_ch_tbl[ch_idx], 1,
+                             ADC_SampleTime_239Cycles5);
+    ADC_SoftwareStartConvCmd(ADC1, ENABLE);
+  }
+}
+
+void adc_timer_task(void)
+{
+  if(p_adc_timer_tick)
+  {
+    //ÒѾ­³õʼ»¯Íê³É
+    p_adc_timer_tick();
+  }
+}
+
+void dac_para_auto_set(void)
+{
+  uint8_t i;
+  uint16_t dac_val = 4095;
+  uint8_t  adj_flags[12];
+
+  p_adc_timer_tick = 0;
+  delay_ms(10);
+  memset(adj_flags, 1, sizeof(adj_flags));
+  while((dac_val*3300ul*66/40950) > 2000)     //ÔË·ÅÊä³ö²»µÍÓÚ2V
+  {
+    for(i=0; i<12; i++)
+    {
+      if(adj_flags[i])
+      {
+        dac_para.val[i] = dac_val;
+      }
+      DAC_SetChannel2Data(DAC_Align_12b_R, dac_val);
+      delay_ms(6);
+      ADC_RegularChannelConfig(ADC1, adc_ch_tbl[i], 1, ADC_SampleTime_239Cycles5);
+      ADC_SoftwareStartConvCmd(ADC1, ENABLE);
+      delay_ms(2);
+      if(ADC_GetConversionValue(ADC1) < 300ul)
+      {
+        adj_flags[i] = 0;
+      }
+      else
+      {
+        adj_flags[i] = 1;
+      }
+    }
+
+    if(mem_test(adj_flags, 0, sizeof(adj_flags)) == 0)
+    {
+      break;
+    }
+    dac_val -= 124;
+  }
+  p_adc_timer_tick = adc_timer_tick;
+
+}
+
+static void timer4_init(void)
+{
+  uint16_t PrescalerValue = 0;
+  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
+  TIM_OCInitTypeDef  TIM_OCInitStructure;
+
+  GPIO_InitTypeDef GPIO_InitStructure;
+
+  /* TIM4 clock enable */
+  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
+
+  /* GPIOA and GPIOB clock enable */
+  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO, ENABLE);
+
+  /*GPIOB Configuration: TIM4 channel3 and 4 */
+  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_8 | GPIO_Pin_9;
+  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
+  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
+  GPIO_Init(GPIOB, &GPIO_InitStructure);
+
+  PrescalerValue = (uint16_t)(SystemCoreClock / 72000000) - 1;
+  /* Time base configuration */
+  TIM_TimeBaseStructure.TIM_Period = 719;
+  TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue;
+  TIM_TimeBaseStructure.TIM_ClockDivision = 0;
+  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
+
+  TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);
+
+  /* PWM1 Mode configuration: Channel1 */
+  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
+  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
+  TIM_OCInitStructure.TIM_Pulse = 359;
+  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
+  TIM_OC3Init(TIM4, &TIM_OCInitStructure);
+  TIM_OC3PreloadConfig(TIM4, TIM_OCPreload_Enable);
+
+  /* PWM1 Mode configuration: Channel2 */
+  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
+  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
+  TIM_OCInitStructure.TIM_Pulse = 359;
+  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
+  TIM_OC4Init(TIM4, &TIM_OCInitStructure);
+  TIM_OC4PreloadConfig(TIM4, TIM_OCPreload_Enable);
+
+  TIM_ARRPreloadConfig(TIM4, ENABLE);
+
+  /* TIM4 enable counter */
+  TIM_Cmd(TIM4, ENABLE);
+}
diff --git a/sys_hw/drv_adc.h b/sys_hw/drv_adc.h
new file mode 100644
index 0000000..9de4c5d
--- /dev/null
+++ b/sys_hw/drv_adc.h
@@ -0,0 +1,29 @@
+#ifndef __adc_h__
+#define __adc_h__
+
+#include "stm32f10x.h"
+
+#define ADC_MAX_CH_NUM     (15u)
+
+#pragma pack(push)
+#pragma pack(1)
+
+typedef struct
+{
+	volatile uint16_t val[12];
+	uint16_t crc;
+} dac_para_t;
+
+#pragma pack(pop)
+
+extern dac_para_t dac_para;
+
+extern volatile uint16_t adc_buff[ADC_MAX_CH_NUM];
+
+extern void adc_init(void);
+extern void adc_timer_task(void);
+extern uint16_t adc_get_val(uint8_t ch);
+extern void dac_para_auto_set(void);
+extern void calibrate_key(uint8_t force);
+
+#endif
diff --git a/sys_hw/drv_usart.h b/sys_hw/drv_usart.h
new file mode 100644
index 0000000..8cb22df
--- /dev/null
+++ b/sys_hw/drv_usart.h
@@ -0,0 +1,15 @@
+#ifndef __drv_usart_h__
+#define __drv_usart_h__
+
+#include "../../st_fw_lib/stm32f10x.h"
+#include "string.h"
+
+#define G401_UART5_FW_VER   (0x0001)
+
+extern void usart_init(void);
+extern void usart_send(u8* buf, u8 len);
+extern u16 usart_read(u8* dest, u16 sz);
+extern void usart_isr_proc(void); 
+extern void ComOverTimeProceed(void);
+
+#endif
diff --git a/sys_hw/keypad.c b/sys_hw/keypad.c
new file mode 100644
index 0000000..5599c40
--- /dev/null
+++ b/sys_hw/keypad.c
@@ -0,0 +1,195 @@
+#include "keypad.h"
+#include "string.h"
+#include "../supwisdom/sp_util.h"
+#include "drv_adc.h"
+//#include "timer.h"
+//#include "Include_All.H"
+//#include "glcd.h"
+//#include "dbg.h"
+
+#define __key_dbg_en__  0
+#if(__key_dbg_en__)
+#define key_dbg(...)   dbg(__VA_ARGS__)
+#else
+#define key_dbg(...)
+#endif
+
+#define KEY_DOWN_THRESHOLD    300u
+#define KEY_UP_THRESHOLD      100u
+
+struct key_sta_t
+{
+	volatile uint16_t adc_val_pre;
+	volatile uint16_t adc_val_last;
+	volatile uint16_t adc_val_now;
+	volatile uint16_t down_timer;
+	volatile uint8_t  adc_chg_cnt;
+	volatile uint8_t  is_pressed;
+	volatile uint8_t  is_pressed_long;
+	volatile uint8_t  long_pressed_timer;
+};
+
+struct
+{
+	volatile uint8_t   is_inited;
+	volatile uint8_t   lock;
+	volatile uint16_t  key_value;
+	struct   key_sta_t key_sta[MAX_KEY_NUM];
+} keypad;
+
+uint8_t keypad_init(void)
+{
+	uint8_t i;
+
+	keypad.is_inited = 0;
+	memset(&keypad, 0, sizeof(keypad));
+	Delay_ms(500);
+	for(i=0; i<MAX_KEY_NUM; i++)
+	{
+		keypad.key_sta[i].adc_val_pre = adc_get_val(i);
+	}
+	keypad.is_inited = 1;
+	return 0;
+}
+
+__weak void keypad_cb_on_preesed(uint8_t key_val)
+{
+
+}
+
+uint8_t keypad_get_key(void)
+{
+	if(keypad.key_value != KEY_NONE)
+	{
+		uint8_t temp = keypad.key_value;
+
+		keypad.key_value = KEY_NONE;
+		keypad_cb_on_preesed(temp);
+		return temp;
+	}
+	return KEY_NONE;
+}
+
+void keypad_scan(void)
+{
+	uint8_t i;
+	uint16_t max_delt = 0;
+	uint8_t  key_idx  = MAX_KEY_NUM;
+
+	key_dbg("\r\nsys_tick:%u\r\n", sys_timer_tick);
+	for(i=0; i<MAX_KEY_NUM; i++)
+	{
+		keypad.key_sta[i].adc_val_now = adc_get_val(i);
+		if(keypad.key_sta[i].adc_val_pre == 0)
+		{
+			keypad.key_sta[i].adc_val_pre = adc_get_val(i);
+			return;
+		}
+		if(keypad.key_sta[i].adc_val_last == 0)
+		{
+			keypad.key_sta[i].adc_val_last = adc_get_val(i);
+			return;
+		}
+
+		if(keypad.key_sta[i].down_timer)
+		{
+			keypad.key_sta[i].down_timer --;
+			if(!keypad.key_sta[i].down_timer)
+			{
+				keypad.key_sta[i].is_pressed = 0;
+				keypad.key_value = i+1;
+				keypad.key_sta[i].adc_val_last = keypad.key_sta[i].adc_val_now;
+				keypad.key_sta[i].adc_val_pre  = keypad.key_sta[i].adc_val_now;
+				keypad.lock = 0;
+			}
+		}
+
+		if((keypad.key_sta[i].adc_val_now > keypad.key_sta[i].adc_val_last)&&(!keypad.key_sta[i].is_pressed)&&(!keypad.lock))
+		{
+			uint16_t temp_delt = keypad.key_sta[i].adc_val_now - keypad.key_sta[i].adc_val_last;
+
+			if(temp_delt > KEY_DOWN_THRESHOLD)
+			{
+				if(keypad.key_sta[i].adc_chg_cnt<10)
+				{
+					keypad.key_sta[i].adc_chg_cnt ++;
+				}
+
+				if(temp_delt>max_delt)
+				{
+					max_delt = temp_delt;
+					key_idx  = i;
+				}
+				else
+				{
+					keypad.key_sta[i].adc_chg_cnt  = 0;
+				}
+			}
+			else
+			{
+				keypad.key_sta[i].adc_val_last = keypad.key_sta[i].adc_val_pre;
+				keypad.key_sta[i].adc_val_pre = keypad.key_sta[i].adc_val_now;
+				keypad.key_sta[i].adc_chg_cnt  = 0;
+				keypad.key_sta[i].is_pressed_long = 0;
+			}
+		}
+		else
+		{
+			if(keypad.key_sta[i].is_pressed)
+			{
+				if(keypad.key_sta[i].adc_val_now < keypad.key_sta[i].adc_val_pre)
+				{
+					if((keypad.key_sta[i].adc_val_pre - keypad.key_sta[i].adc_val_now) > KEY_UP_THRESHOLD)
+					{
+						keypad.key_sta[i].adc_chg_cnt ++;
+					}
+				}
+				else
+				{
+					keypad.key_sta[i].adc_chg_cnt = 0;
+				}
+
+				if(keypad.key_sta[i].adc_chg_cnt > 1)
+				{
+					keypad.key_value = i+1;
+					keypad.key_sta[i].adc_val_last = keypad.key_sta[i].adc_val_pre;
+					keypad.key_sta[i].adc_val_pre  = keypad.key_sta[i].adc_val_now;
+					keypad.key_sta[i].adc_chg_cnt = 0;
+					keypad.key_sta[i].is_pressed = 0;
+					keypad.key_sta[i].down_timer = 0;
+					keypad.key_sta[i].is_pressed_long = 0;
+					keypad.lock = 0;
+				}
+			}
+			else
+			{
+				keypad.key_sta[i].adc_val_last = keypad.key_sta[i].adc_val_pre;
+				keypad.key_sta[i].adc_val_pre  = keypad.key_sta[i].adc_val_now;
+				keypad.key_sta[i].adc_chg_cnt  = 0;
+				keypad.key_sta[i].is_pressed_long = 0;
+			}
+		}
+		key_dbg("%02u:%4hu,%4hu,%4hu,%4hu,%4hhu,%4hhu,%4hhu,%4hhu\r\n", i,
+		        keypad.key_sta[i].adc_val_pre,
+		        keypad.key_sta[i].adc_val_last,
+		        keypad.key_sta[i].adc_val_now,
+		        keypad.key_sta[i].down_timer,
+		        keypad.key_sta[i].adc_chg_cnt,
+		        keypad.key_sta[i].is_pressed,
+		        keypad.key_sta[i].is_pressed_long,
+		        keypad.key_sta[i].long_pressed_timer);
+	}
+
+	if(key_idx<MAX_KEY_NUM)
+	{
+		if(keypad.key_sta[key_idx].adc_chg_cnt>0)
+		{
+			keypad.key_sta[key_idx].is_pressed = 1;
+			keypad.key_sta[key_idx].down_timer = 9;   //°´¼üɨÃèÖÜÆÚ112ms£¬112*9ԼΪ1008ms
+			keypad.key_sta[key_idx].adc_chg_cnt  = 0;
+			keypad.lock = 1;
+
+			keypad.key_sta[key_idx].adc_val_pre = keypad.key_sta[key_idx].adc_val_now;
+		}
+	}
+}
diff --git a/sys_hw/keypad.h b/sys_hw/keypad.h
new file mode 100644
index 0000000..65fd08f
--- /dev/null
+++ b/sys_hw/keypad.h
@@ -0,0 +1,27 @@
+#ifndef __keypad_h__
+#define __keypad_h__
+
+#include "stdint.h"
+
+#define MAX_KEY_NUM      (12u)
+
+#define KEY_NONE         ( 0u)          //空闲状æ??
+#define KEY_DIG0         (10u)          //数字é”?0
+#define KEY_DIG1         ( 1u)          //数字é”?1
+#define KEY_DIG2         ( 2u)          //数字é”?2
+#define KEY_DIG3         ( 3u)          //数字é”?3
+#define KEY_DIG4         ( 4u)          //数字é”?4
+#define KEY_DIG5         ( 5u)          //数字é”?5
+#define KEY_DIG6         ( 6u)          //数字é”?6
+#define KEY_DIG7         ( 7u)          //数字é”?7
+#define KEY_DIG8         ( 8u)          //数字é”?8
+#define KEY_DIG9         ( 9u)          //数字é”?9
+#define KEY_ENTER        (12u)          //确认é”?
+#define KEY_CANCEL       (11u)          //取消é”?
+
+extern uint8_t keypad_init(void);
+extern uint8_t keypad_get_key(void);
+extern void    keypad_scan(void);
+extern void    keypad_cb_on_preesed(uint8_t key_val);
+
+#endif
diff --git a/sys_hw/rtc.c b/sys_hw/rtc.c
new file mode 100644
index 0000000..61f263c
--- /dev/null
+++ b/sys_hw/rtc.c
@@ -0,0 +1,165 @@
+#include "rtc.h"
+#include "time.h"
+#include "data_tools.h"
+#include "string.h"
+#include "timer.h"
+
+uint32_t CrystalStartErrFlag;
+
+static uint8_t rtc_wait_flag(uint32_t* reg, uint32_t mask, uint32_t flag, uint32_t timeout)
+{
+    uint32_t t = timeout/100;
+    
+    while(((*reg)&mask) != flag)
+    {
+        delay_ms(100);
+        t --;
+        if(t == 0)
+            return 1;
+    }
+    
+    return 0;
+}
+
+uint32_t rtc_get_counter(void)
+{
+    return (uint32_t)((RTC->CNTH << 16) | RTC->CNTL);
+}
+
+static uint8_t rtc_set_counter(uint32_t cnt)
+{
+    PWR->CR	 |= PWR_CR_DBP;         	// ʹÄÜ·ÃÎÊRTC, BDC ¼Ä´æÆ÷
+	RTC->CRL |=RTC_CRL_CNF;    		    // ÉèÖÃRTCÅäÖñê¼Ç,ÔÊÐíÅäÖÃ			
+	RTC->CNTH = (cnt>>16)&0xffff;
+	RTC->CNTL = cnt&0xffff ;
+	RTC->CRL  &= ~RTC_CRL_CNF; 			// ÉèÖÃRTCÅäÖñê¼Ç,²»ÔÊÐíÅäÖà 
+    if(rtc_wait_flag((uint32_t*)&RTC->CRL, RTC_FLAG_RTOFF, RTC_FLAG_RTOFF, 4000ul))  //µÈ´ýÅäÖÃÍê³É 
+    {
+        PWR->CR   &= ~PWR_CR_DBP;      	// ²»ÔÊÐíÅäÖÃRTC¡¢BDC¼Ä´æÆ÷  
+        return 1;
+    }
+	PWR->CR   &= ~PWR_CR_DBP;      	// ²»ÔÊÐíÅäÖÃRTC¡¢BDC¼Ä´æÆ÷  
+    return 0;    
+}
+
+void rtc_init(void)
+{
+    CrystalStartErrFlag = 0;
+    RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); 
+
+    //RTCÊ×´ÎÉϵç»òʱÖÓ¶ªÊ§
+    if(BKP_ReadBackupRegister(BKP_DR1) != 0x5A5A)
+    {
+        RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP, ENABLE);       
+        PWR_BackupAccessCmd(ENABLE);
+        BKP_DeInit();
+        RCC_LSEConfig(RCC_LSE_ON);
+
+        //²ÎÕÕstm32f10x datasheet£¬LES startup time
+        //tsu(lse) = 3S (Typ)
+        //´Ë´¦µÈ´ýLSEÆðÕñÑÓʱԼ4S
+        if(rtc_wait_flag((uint32_t*)&RCC->BDCR, 0x02, 0x02, 4000ul))
+            CrystalStartErrFlag = 1;
+        
+        if(!CrystalStartErrFlag)
+        {
+            RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
+            RCC_RTCCLKCmd(ENABLE);
+			/* Clear RSF flag */
+			RTC->CRL &= (u16)~RTC_FLAG_RSF;            
+			/* Loop until RSF flag is set */
+            if(rtc_wait_flag((uint32_t*)&RTC->CRL, RTC_FLAG_RSF, RTC_FLAG_RSF, 4000ul))
+                CrystalStartErrFlag = 1;
+            
+			//rtc wait for last task
+            if(rtc_wait_flag((uint32_t*)&RTC->CRL, RTC_FLAG_RTOFF, RTC_FLAG_RTOFF, 4000ul))
+                CrystalStartErrFlag = 1;
+            
+            RTC_SetPrescaler(32767);
+			//rtc wait for last task
+            if(rtc_wait_flag((uint32_t*)&RTC->CRL, RTC_FLAG_RTOFF, RTC_FLAG_RTOFF, 4000ul))
+                CrystalStartErrFlag = 1;  
+    
+            BKP_WriteBackupRegister(BKP_DR1, 0x5A5A);
+        } 
+        PWR_BackupAccessCmd(DISABLE); 
+        RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP, DISABLE); 
+    }
+    else
+    {
+		/* Clear RSF flag */
+		RTC->CRL &= (u16)~RTC_FLAG_RSF;
+		/* Loop until RSF flag is set */
+        if(rtc_wait_flag((uint32_t*)&RTC->CRL, RTC_FLAG_RSF, RTC_FLAG_RSF, 4000ul))
+            CrystalStartErrFlag = 1; 
+        else
+        {
+            //0x386D4380ul 2000Äê1ÔÂ1ÈÕÃëÊý
+            if(rtc_get_counter()<0x386D4380ul)
+            {
+                rtc_set_counter(0x386D4380ul);
+            }
+            
+//            rtc_get_time(&SystemTime);
+        }
+    }
+}
+
+uint32_t rtc_mk_time(_SystemTime* t)
+{
+    struct tm temp_time; 
+    _SystemTime temp_time_hex; 
+
+    memcpy(&temp_time_hex, t, sizeof(_SystemTime));
+    bcd2hex(&temp_time_hex, sizeof(temp_time_hex));
+    temp_time.tm_year = temp_time_hex.year+100;   //´Ó1900Ä꿪ʼ   
+    temp_time.tm_mon  = temp_time_hex.month-1;  
+    temp_time.tm_mday = temp_time_hex.day;    
+    temp_time.tm_wday = temp_time_hex.week;   
+    temp_time.tm_hour = temp_time_hex.hour;   
+    temp_time.tm_min  = temp_time_hex.minute; 
+    temp_time.tm_sec  = temp_time_hex.second; 
+    
+    return mktime(&temp_time);
+}
+
+uint8_t rtc_set_time(_SystemTime* t)
+{
+    uint8_t ret = 0;
+    time_t seconds = rtc_mk_time(t);
+    
+    ret = rtc_set_counter(seconds);
+    
+    return ret;
+}
+
+uint8_t rtc_get_time(_SystemTime* t)
+{
+    struct tm* temp_time;
+    _SystemTime temp_time_bcd;
+    time_t seconds = rtc_get_counter();
+    
+    temp_time = localtime(&seconds);
+    if(temp_time->tm_year<100)
+        temp_time_bcd.year = 0;
+    else
+        temp_time_bcd.year   = temp_time->tm_year - 100;
+    
+    temp_time_bcd.month  = temp_time->tm_mon+1;
+    temp_time_bcd.day    = temp_time->tm_mday;
+    temp_time_bcd.week   = temp_time->tm_wday;
+    temp_time_bcd.hour   = temp_time->tm_hour;
+    temp_time_bcd.minute = temp_time->tm_min;
+    temp_time_bcd.second = temp_time->tm_sec;
+    hex2bcd(&temp_time_bcd, sizeof(temp_time_bcd));
+    memcpy(t, &temp_time_bcd, sizeof(temp_time_bcd));
+    return 0;
+}
+
+uint32_t rtc_time_diff(void* t1, void* t2)
+{
+    uint32_t t1_sec = rtc_mk_time((_SystemTime*)t1);    
+    uint32_t t2_sec = rtc_mk_time((_SystemTime*)t2);
+    
+    return (t1_sec-t2_sec);
+}
diff --git a/sys_hw/rtc.h b/sys_hw/rtc.h
new file mode 100644
index 0000000..c62efc3
--- /dev/null
+++ b/sys_hw/rtc.h
@@ -0,0 +1,27 @@
+#ifndef __rtc_h__
+#define __rtc_h__
+
+#include "stm32f10x.h"
+
+//ϵͳʱ¼ä½á¹¹
+typedef struct
+{
+	uint8_t			year;						//Äê	
+	uint8_t			month;						//ÔÂ
+	uint8_t			day;						//ÈÕ
+	uint8_t 		week;    					//ÐÇÆÚ
+	uint8_t 		hour;						//ʱ
+	uint8_t 		minute;						//·Ö
+	uint8_t 		second;						//Ãë
+}_SystemTime ;
+
+//extern _SystemTime SystemTime,SystemTimeBak;
+
+extern void rtc_init(void);
+extern uint8_t  rtc_set_time(_SystemTime* t);
+extern uint8_t  rtc_get_time(_SystemTime* t);
+//extern uint32_t rtc_mk_time(_SystemTime* t);
+//extern uint32_t rtc_time_diff(void* t1, void* t2);
+//extern uint32_t rtc_get_counter(void);
+
+#endif
diff --git a/sys_hw/timer.c b/sys_hw/timer.c
new file mode 100644
index 0000000..b66ec32
--- /dev/null
+++ b/sys_hw/timer.c
@@ -0,0 +1,43 @@
+#include "timer.h"
+#include "icc_apdu_lib_v02.h"
+#include "HW_CAN_LIB.H"
+#include "drv_adc.h"
+#include "drv_valve.h"
+#include "drv_flowsensor.h"
+#include "drv_usart.h"
+
+//static vu32 timertick = 0;
+vu32 timertick = 0;
+
+void SysTick_cfg(void)
+{
+    SysTick_Config(SystemCoreClock/1000ul);
+}
+
+void TimerTick(void)
+{	
+
+	update_sam_ticker();
+	
+	adc_timer_task();
+
+	ComOverTimeProceed();
+	hw_can_sta_proc();
+	
+	timertick++;
+
+	flowsensor_update_count();
+
+	valve_timer_dec();
+}
+
+u32 timer_get_ticker(void)
+{
+	return timertick;
+}
+void delay_ms(u32 t)
+{
+    u32 temp = timertick;
+
+    while((timertick - temp) < t);
+}
diff --git a/sys_hw/timer.h b/sys_hw/timer.h
new file mode 100644
index 0000000..072bdba
--- /dev/null
+++ b/sys_hw/timer.h
@@ -0,0 +1,11 @@
+#ifndef __timer_h__
+#define __timer_h__
+
+#include "stm32f10x.h"
+
+//extern void SysTick_cfg(void);
+extern void TimerTick(void);
+extern u32 timer_get_ticker(void);
+extern void delay_ms(u32 t);
+
+#endif