大理水控初始版本
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