This commit is contained in:
2026-03-20 21:19:04 +08:00
parent 90c3d919df
commit 9d3b4b836f
247 changed files with 22127 additions and 30305 deletions

192
user/MCU/lhl_flash.h Executable file → Normal file
View File

@@ -1,152 +1,86 @@
#ifndef __LHL_FLASH_H__
#define __LHL_FLASH_H__
//ϵͳ<EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD><EFBFBD><EFBFBD>
#define FLASH_PAGE_SIZE_MAX FLASH_PAGE_SIZE //0x1000 ÿҳ<C3BF><D2B3><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD> 4k 4096byte
//FLASH<EFBFBD><EFBFBD>ַ
#define FLASH_PAGE_SIZE_MAX FLASH_PAGE_SIZE //ÿҳ<C3BF><D2B3><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD> 4096
#define FLASH_PAGE_MAXZISE 30 //<2F><><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3> 120K <20><>30ҳ(0-29ҳ)
#define FLASH_PAGE_BYTE_SIZE FLASH_PAGE_SIZE_MAX //<2F><>ǰ<EFBFBD><C7B0>Ҫһҳ<D2BB><D2B3>С<>ʾ<EFBFBD><CABE><EFBFBD>һ<EFBFBD><D2BB>ҳbyte
#define CORRECT_PAGE_NUM 4 //У׼<D0A3><D7BC><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC>ҳ<EFBFBD><D2B3>
#define CORRECT_DATA_PAGE (FLASH_PAGE_MAXZISE - CORRECT_PAGE_NUM-1)//У׼<D0A3><D7BC><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3>ʼҳ
//FLASH<53>洢ҳ<E6B4A2><D2B3>
#define APP_PAGE 0 //<2F><><EFBFBD><EFBFBD>ҳ Ĭ<><C4AC>ֵ,<2C><>0X8000000<30><30>ʼ
#define VENDER_PARAMS_PAGE 16 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳ
#define USER_PARAMS_PAGE 17 //<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>ҳ
#define USER_DCOEF_TAG_PAGE 18 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǩҳ
//ϵͳ<EFBFBD><EFBFBD><EFBFBD>
#define FLASH_PAGE_MAXZISE 30 //<2F><><EFBFBD><EFBFBD>ҳ<EFBFBD><EFBFBD> 120K <20><>30ҳ(0-29ҳ)
//FLASHʵ<EFBFBD>ʵ<EFBFBD>ַ0x08000000<EFBFBD><EFBFBD>ʼ
#define VENDER_PARAMS_ADDR (FLASH_START_ADDRESS + (FLASH_PAGE_SIZE*VENDER_PARAMS_PAGE))//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ洢λ<EFBFBD><EFBFBD>
#define USER_PARAMS_ADDR (FLASH_START_ADDRESS + (FLASH_PAGE_SIZE*USER_PARAMS_PAGE)) //<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>洢λ<E6B4A2><CEBB>
#define USER_DCOEF_TAG_ADDR (FLASH_START_ADDRESS + (FLASH_PAGE_SIZE*USER_DCOEF_TAG_PAGE))//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǩҳ
#define CORRECT_DATA_ADDR (FLASH_START_ADDRESS + (FLASH_PAGE_SIZE*CORRECT_DATA_PAGE)) //У׼<D0A3><D7BC><EFBFBD><EFBFBD><EFBFBD>洢λ<E6B4A2><CEBB>
#define APP_PAGE 4 //<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳҳ<EFBFBD><EFBFBD> Ĭ<><C4AC>ֵ,<2C><>0X8000000<30><30>ʼ <20><><EFBFBD><EFBFBD>bootLoader<65><72>ռ0x4000 <20><>4ҳ,<2C><>0X8004000<30><30>ʼ
#define CORRECT_DATA_SIZE (CORRECT_PAGE_NUM* FLASH_PAGE_SIZE) //У׼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>󳤶<EFBFBD>
#define CORRECT_DATA_MID (CORRECT_DATA_SIZE / 2) //У׼<D0A3><D7BC><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD>λ<EFBFBD><CEBB>
#define USER_PARAMS_PAGE 19 //<2F>û<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳҳ<EFBFBD><EFBFBD>
#define USER_PARAMS_ADDR (FLASH_START_ADDRESS + (FLASH_PAGE_SIZE_MAX*USER_PARAMS_PAGE)) //FLASHʵ<48>ʵ<EFBFBD>ַ <20>û<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>洢λ<EFBFBD><EFBFBD>
#define CALIB_INDEX_INTEERVAL (CALIB_REAL_SIZE / 3) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define CALIB_MAX_INDEX (CALIB_SIZE / 3 - 2*CALIB_COMP_FAC) //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define CALIB_MIN_INDEX (CALIB_COMP_FAC*3) //3<><33>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define USER_DCOEF_TAG_PAGE 20 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǩҳҳ<D2B3><D2B3>
#define USER_DCOEF_TAG_ADDR (FLASH_START_ADDRESS + (FLASH_PAGE_SIZE_MAX*USER_DCOEF_TAG_PAGE))//FLASHʵ<48>ʵ<EFBFBD>ַ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǩҳ
#define CALIB_REAL_SIZE (CORRECT_PAGE_NUM*FLASH_PAGE_SIZE) //ʵ<><CAB5><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD>С
#define CALIB_SIZE CALIB_REAL_SIZE*CALIB_COMP_FAC //<2F><><EFBFBD><EFBFBD><EFBFBD>ܳ<EFBFBD>
#define CALIB_COMP_FAC 6 //ѹ<><D1B9><EFBFBD><EFBFBD><><D6A7>2,4,6,8<><38>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>8192,16384,24576,32768
#define CALIB_WIDTH 64 //<2F>̶<EFBFBD><CCB6><EFBFBD><EFBFBD><EFBFBD>64<36>ֽ<EFBFBD> <20><><EFBFBD><EFBFBD>Flashÿ<68><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>4<EFBFBD>ֽڣ<D6BD><DAA3>Ը<EFBFBD>ֵӦ<D6B5><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define CALIB_DEPTH (CALIB_SIZE/CALIB_WIDTH) //768 //֡<><D6A1>
#define CALIB_DATA_LEN (CALIB_DEPTH/CALIB_COMP_FAC) //128 //ѹ<><D1B9><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><>ʴ<EFBFBD><CAB4><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><D6A1>
#define CORRECT_PAGE_NUM (CALIB_STORED_SIZE / FLASH_PAGE_SIZE_MAX) //<2F><><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>У׼<D0A3><D7BC><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC>ҳ<EFBFBD><D2B3> У׼<D0A3><D7BC><EFBFBD>ݴ洢<DDB4><E6B4A2>С/ÿҳ<C3BF><D2B3>С
#define CORRECT_DATA_PAGE (FLASH_PAGE_MAXZISE - CORRECT_PAGE_NUM) //У׼<D0A3><D7BC><EFBFBD><EFBFBD>ҳ<EFBFBD><EFBFBD>ʼҳҳ<EFBFBD><EFBFBD>
#define CORRECT_DATA_ADDR (FLASH_START_ADDRESS + (FLASH_PAGE_SIZE_MAX*CORRECT_DATA_PAGE)) //У׼<D0A3><D7BC><EFBFBD><EFBFBD><EFBFBD>洢λ<E6B4A2><CEBB>
#define CORRECT2_PAGE_NUM 4 //У׼<D0A3><D7BC><EFBFBD><EFBFBD>ռ<EFBFBD><EFBFBD>ҳ<EFBFBD><EFBFBD>
#define CORRECT2_DATA_ADDR CORRECT_DATA_ADDR-(5*FLASH_PAGE_SIZE)//У׼<D0A3><D7BC><EFBFBD><EFBFBD><EFBFBD>洢λ<E6B4A2><CEBB>
#define CALIB_STORED_SIZE CALIB_REAL_SIZE
#define USER_REG_COUNT USER_INX_MAX //<2F>û<EFBFBD><C3BB>Ĵ<EFBFBD><C4B4><EFBFBD><>ֽ<EFBFBD>)<29><><EFBFBD><EFBFBD> 336
#define USER_REG_SIZE (USER_REG_COUNT * REG_WORD_WIDTH) //USER<45><52><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܴ<EFBFBD>С 1008 bytes
#define WORD_REG_COUNT WORD_INX_MAX //˫<>ֽڼĴ<DABC><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 128
#define WORD_REG_SIZE (WORD_REG_COUNT * REG_WORD_WIDTH) //WORD<52><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܴ<EFBFBD>С 384 bytes
#define DWORD_REG_COUNT DWORD_INX_MAX// <20><><EFBFBD>ֽڼĴ<DABC><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> //64
#define DWORD_REG_SIZE (DWORD_REG_COUNT * REG_DWORD_WIDTH) //DWORD<52><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܴ<EFBFBD>С 320 bytes
#define TOTAL_PARAM_SIZE (WORD_REG_SIZE + DWORD_REG_SIZE + USER_REG_SIZE) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܴ<EFBFBD>С 1712bytes <20><>Ӧ<EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>С
///**********************************************************************************************************************/
////Ĭ<><C4AC>У׼<D0A3><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//// ====== <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>======
//#define CALIB_COMP_FAC 3 // ѹ<><D1B9><EFBFBD><EFBFBD> <09><><EFBFBD><EFBFBD>>0 ֵԽ<D6B5><D4BD><><D1B9>Խǿ,Flashռ<68><D5BC>Խ<EFBFBD><D4BD>,<2C><>ʧ<EFBFBD><CAA7><EFBFBD><EFBFBD>
//#define CALIB_WIDTH 64 // ÿ֡<C3BF><D6A1><EFBFBD><EFBFBD><EFBFBD>ֽڿ<D6BD><DABF><EFBFBD> <20><><EFBFBD><EFBFBD>32/64/128<32><38><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>CALIB_SIZE
//#define CALIB_MAX_INDEX_REQ 5800 // 24000 // <20>㷨Ҫ<E3B7A8><D2AA><EFBFBD>ĺ<EFBFBD><C4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//// ====== <20><EFBFBD><E6B4A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>===================
//// Ԥ<><D4A4> 2*CALIB_COMP_FAC <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ䣨Э<E4A3A8><D0AD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
//#define CALIB_SIZE_MIN_RAW ((CALIB_MAX_INDEX_REQ + 2 * CALIB_COMP_FAC) * 3)//#define BYTES_PER_INDEX 3 // ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ3<D5BC>ֽڣ<D6BD><DAA3><EFBFBD><EFBFBD>dz<EFBFBD><C7B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɸ<EFBFBD><C9B8>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Э<EFBFBD><D0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD>[H,M,L])
//// <20><><EFBFBD><EFBFBD><E3B7A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><EFBFBD><E6B4A2><EFBFBD><EFBFBD>
//// ѹ<><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><EFBFBD>ռ<D5BC><E4A3A8><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
//#define CALIB_STORED_MIN (((CALIB_SIZE_MIN_RAW) + CALIB_COMP_FAC - 1) / CALIB_COMP_FAC)
//// <20><><EFBFBD>϶<EFBFBD><CFB6>뵽Flashҳ
//#define CALIB_STORED_SIZE (((CALIB_STORED_MIN + FLASH_PAGE_SIZE_MAX - 1) / FLASH_PAGE_SIZE_MAX) * FLASH_PAGE_SIZE_MAX) //ʵ<>ʴ洢<CAB4><E6B4A2>С
////EEPROM<4F><4D><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3><EFBFBD><EFBFBD><EBA3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD>
////#define CALIB_STORED_SIZE (((CALIB_SIZE_MIN_RAW) + CALIB_COMP_FAC - 1) / CALIB_COMP_FAC)
//// ====== <20>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD>======================
//// CALIB_STORED_SIZE <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>EEPROM<4F><4D><EFBFBD><EFBFBD>Flash<73><68><EFBFBD>ø<EFBFBD>ֵ<EFBFBD><D6B5>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD>ռ<D5BC><E4A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>΢<EFBFBD><CEA2><EFBFBD><EFBFBD>һ<EFBFBD>¿ռ<C2BF><D5BC>Ƿ<EFBFBD><C7B7>
//#define CALIB_SIZE (CALIB_STORED_SIZE * CALIB_COMP_FAC)// ʵ<><CAB5>ԭʼ<D4AD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽڣ<D6BD>= <20><EFBFBD>ռ<EFBFBD><><D1B9><EFBFBD><EFBFBD>
//#define CALIB_DEPTH (CALIB_SIZE / CALIB_WIDTH) // ԭʼ<D4AD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><D6A1>
//#define CALIB_MAX_INDEX ((CALIB_SIZE / 3) - (2 * CALIB_COMP_FAC)) // ʵ<><CAB5>֧<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>루Flash<73>»<EFBFBD><C2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>
//#if ((CALIB_DEPTH) % (CALIB_COMP_FAC)) != 0
// #error "CALIB_DEPTH must be divisible by CALIB_COMP_FAC!"
//#endif
//#if (CALIB_SIZE % CALIB_WIDTH) != 0
// #error "CALIB_SIZE must be divisible by CALIB_WIDTH! Adjust page count or width."
//#endif
///**********************************************************************************************************************/
//#ifndef ENABLE_2ND_CURVE
//#pragma message("[undefined] ENABLE_2ND_CURVE")
//#elif(ENABLE_2ND_CURVE)
////У׼<D0A3><D7BC><EFBFBD><EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD>
//// ====== <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>======
//#define CALIB_COMP_FAC2 3 // ѹ<><D1B9><EFBFBD><EFBFBD> ֵԽ<D6B5><D4BD><><D1B9>Խǿ,Flashռ<68><D5BC>Խ<EFBFBD><D4BD>,<2C><>ʧ<EFBFBD><CAA7><EFBFBD><EFBFBD>
//#define CALIB_WIDTH2 64 // ÿ֡<C3BF><D6A1><EFBFBD><EFBFBD><EFBFBD>ֽڿ<D6BD><DABF><EFBFBD> <20><><EFBFBD><EFBFBD>32/64/<2F>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>CALIB_SIZE
//#define CALIB_MAX_INDEX_REQ2 24000 // <20>㷨Ҫ<E3B7A8><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//// ====== <20><EFBFBD><E6B4A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>===================
//// Ԥ<><D4A4> 2*CALIB_COMP_FAC <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ䣨Э<E4A3A8><D0AD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
//#define CALIB_SIZE_MIN_RAW2 ((CALIB_MAX_INDEX_REQ2 + 2 * CALIB_COMP_FAC2) * 3)//Э<><D0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD>[H,M,L])
//// <20><><EFBFBD><EFBFBD><E3B7A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><EFBFBD><E6B4A2><EFBFBD><EFBFBD>
//// ѹ<><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><EFBFBD>ռ<D5BC><E4A3A8><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
//#define CALIB_STORED_MIN2 (((CALIB_SIZE_MIN_RAW2) + CALIB_COMP_FAC2 - 1) / CALIB_COMP_FAC2)
//// <20><><EFBFBD>϶<EFBFBD><CFB6>뵽Flashҳ
//#define CALIB_STORED_SIZE2 (((CALIB_STORED_MIN2 + FLASH_PAGE_SIZE_MAX - 1) / FLASH_PAGE_SIZE_MAX) * FLASH_PAGE_SIZE_MAX) //ʵ<>ʴ洢<CAB4><E6B4A2>С
//#define CORRECT_PAGE_NUM2 (CALIB_STORED_SIZE2 / FLASH_PAGE_SIZE_MAX) //<2F><><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>У׼<D0A3><D7BC><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC>ҳ<EFBFBD><D2B3> У׼<D0A3><D7BC><EFBFBD>ݴ洢<DDB4><E6B4A2>С/ÿҳ<C3BF><D2B3>С
//// ====== <20>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD>======================
//// CALIB_STORED_SIZE <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>EEPROM<4F><4D><EFBFBD><EFBFBD>Flash<73><68><EFBFBD>ø<EFBFBD>ֵ<EFBFBD><D6B5>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD>ռ<D5BC><E4A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>΢<EFBFBD><CEA2><EFBFBD><EFBFBD>һ<EFBFBD>¿ռ<C2BF><D5BC>Ƿ<EFBFBD><C7B7>
//#define CALIB_SIZE2 (CALIB_STORED_SIZE2 * CALIB_COMP_FAC2)// ʵ<><CAB5>ԭʼ<D4AD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽڣ<D6BD>= <20><EFBFBD>ռ<EFBFBD><><D1B9><EFBFBD><EFBFBD>
//#define CALIB_DEPTH2 (CALIB_SIZE2 / CALIB_WIDTH2) // ԭʼ<D4AD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><D6A1>
//#define CALIB_MAX_INDEX2 ((CALIB_SIZE2 / 3) - (2 * CALIB_COMP_FAC2)) // ʵ<><CAB5>֧<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>루Flash<73>»<EFBFBD><C2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>
//#if (CALIB_DEPTH2 % CALIB_COMP_FAC2) != 0
// #error "CALIB_DEPTH must be divisible by CALIB_COMP_FAC!"
//#endif
//#if (CALIB_SIZE2 % CALIB_WIDTH2) != 0
// #error "CALIB_SIZE must be divisible by CALIB_WIDTH! Adjust page count or width."
//#endif
//#endif
///**********************************************************************************************************************/
// #ifndef ENABLE_3RD_CURVE
//#pragma message("[undefined] ENABLE_2ND_CURVE")
//#elif(ENABLE_3RD_CURVE)
////У׼<D0A3><D7BC><EFBFBD><EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD>
//// ====== <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>======
//#define CALIB_COMP_FAC3 3 // ѹ<><D1B9><EFBFBD><EFBFBD> ֵԽ<D6B5><D4BD><><D1B9>Խǿ,Flashռ<68><D5BC>Խ<EFBFBD><D4BD>,<2C><>ʧ<EFBFBD><CAA7><EFBFBD><EFBFBD>
//#define CALIB_WIDTH3 64 // ÿ֡<C3BF><D6A1><EFBFBD><EFBFBD><EFBFBD>ֽڿ<D6BD><DABF><EFBFBD> <20><><EFBFBD><EFBFBD>32/64/<2F>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>CALIB_SIZE
//#define CALIB_MAX_INDEX_REQ3 24000 // <20>㷨Ҫ<E3B7A8><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//// ====== <20><EFBFBD><E6B4A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>===================
//// Ԥ<><D4A4> 2*CALIB_COMP_FAC <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ䣨Э<E4A3A8><D0AD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
//#define CALIB_SIZE_MIN_RAW3 ((CALIB_MAX_INDEX_REQ3 + 2 * CALIB_COMP_FAC3) * 3)//Э<><D0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD>[H,M,L])
//// <20><><EFBFBD><EFBFBD><E3B7A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><EFBFBD><E6B4A2><EFBFBD><EFBFBD>
//// ѹ<><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><EFBFBD>ռ<D5BC><E4A3A8><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
//#define CALIB_STORED_MIN3 (((CALIB_SIZE_MIN_RAW3) + CALIB_COMP_FAC3 - 1) / CALIB_COMP_FAC3)
//// <20><><EFBFBD>϶<EFBFBD><CFB6>뵽Flashҳ
//#define CALIB_STORED_SIZE3 (((CALIB_STORED_MIN3 + FLASH_PAGE_SIZE_MAX - 1) / FLASH_PAGE_SIZE_MAX) * FLASH_PAGE_SIZE_MAX) //ʵ<>ʴ洢<CAB4><E6B4A2>С
//#define CORRECT_PAGE_NUM3 (CALIB_STORED_SIZE3 / FLASH_PAGE_SIZE_MAX) //<2F><><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>У׼<D0A3><D7BC><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC>ҳ<EFBFBD><D2B3> У׼<D0A3><D7BC><EFBFBD>ݴ洢<DDB4><E6B4A2>С/ÿҳ<C3BF><D2B3>С
//// ====== <20>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD>======================
//// CALIB_STORED_SIZE <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>EEPROM<4F><4D><EFBFBD><EFBFBD>Flash<73><68><EFBFBD>ø<EFBFBD>ֵ<EFBFBD><D6B5>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD>ռ<D5BC><E4A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>΢<EFBFBD><CEA2><EFBFBD><EFBFBD>һ<EFBFBD>¿ռ<C2BF><D5BC>Ƿ<EFBFBD><C7B7>
//#define CALIB_SIZE3 (CALIB_STORED_SIZE3 * CALIB_COMP_FAC3)// ʵ<><CAB5>ԭʼ<D4AD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽڣ<D6BD>= <20><EFBFBD>ռ<EFBFBD><><D1B9><EFBFBD><EFBFBD>
//#define CALIB_DEPTH3 (CALIB_SIZE3 / CALIB_WIDTH3) // ԭʼ<D4AD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><D6A1>
//#define CALIB_MAX_INDEX3 ((CALIB_SIZE3 / 3) - (2 * CALIB_COMP_FAC3)) // ʵ<><CAB5>֧<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>루Flash<73>»<EFBFBD><C2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>
//#if (CALIB_DEPTH3 % CALIB_COMP_FAC3) != 0
// #error "CALIB_DEPTH must be divisible by CALIB_COMP_FAC!"
//#endif
//#if (CALIB_SIZE3 % CALIB_WIDTH3) != 0
// #error "CALIB_SIZE must be divisible by CALIB_WIDTH! Adjust page count or width."
//#endif
//#endif
///**********************************************************************************************************************/
void update_param_bufferFromFlash(void);//<2F><>Ҫ
u16 ReadShortParameterFromFlash(u16 parameterAdr , u16 parameterDefault);
u32 ReadLongParameterFromFlash(u16 parameterAdr , u16 parameterDefault);
void ReadMultiByteFromFlash(u16 address,u8 *wrtData, u16 dataLenth, u8 flashAdr);
u16 WriteShortParameterToFlash(u16 parameterAdr);
u32 WriteLongParameterToFlash(u16 parameterAdr);
void WriteMultiByteToFlash(u16 address, u8 *wrtData, u16 dataLenth, u8 flashAdr);
extern u8 munWriteParams;//д<>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ <20><><EFBFBD>еIJ<D0B5><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>£<EFBFBD>
//д<>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
#define WP_NOT 0x00 //<2F><>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define WP_USER 0x01 //д<>û<EFBFBD><C3BB>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>־
#define WP_VENDER 0x02 //д<><D0B4><EFBFBD>ҼĴ<D2BC><C4B4><EFBFBD><EFBFBD><EFBFBD>־
#define WP_DEF 0x03 //<2F>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC>ֵ
#define WP_DCOEF_TAG 0x04 //д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>tag
#define WP_CORRECT 0x05 //дУ׼<D0A3><D7BC>־
extern u8 mucSaveParams;//Flashд״̬<D7B4><CCAC>־λ <20><><EFBFBD>еIJ<D0B5><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>£<EFBFBD>
//Flash״̬<D7B4><CCAC>־
#define PARAMS_COMPL 0x00 //д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define PARAMS_READY 0xAA //׼<><D7BC>д<EFBFBD><D0B4>
#define PARAMS_READY_AX 0xBB //׼<><D7BC>д<EFBFBD><D0B4>
#define PARAMS_ING 0x55 //д<><D0B4><EFBFBD><EFBFBD>
extern volatile u8 * const USER_PARAMS ;
extern volatile u8 * const VENDER_PARAMS ;
extern volatile u8 * const CORRECT_DATA ;
extern volatile u8 * const CORRECT2_DATA ;
void FLASH_Erase_Data_Page(u8 UserPage) ;//__attribute__((noinline));// <20><><EFBFBD>ӽ<EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void FLASH_Write_Data_Page(u8 UserPage, void *pBuffer, u32 byteSize) ;//__attribute__((noinline));// <20><><EFBFBD>ӽ<EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void ReadParameterFromFlash( void *value,u16 offset, u8 size ,u8 UserPage );
void FLASH_Write_Calib_Data_ToFlash(u16 FrameX, u8 *pBuffer);
void FLASH_Write_Calib2_Data_ToFlash(u16 FrameN, u8 *pBuffer );
void ReadCalibDataFromFlash(u32 frameN , u8 *data ,u16 size ) ;//__attribute__((noinline));// <20><><EFBFBD>ӽ<EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void ReadCalib2DataFromFlash(u32 frameN , u8 *data ,u16 size );
void ReadDataFromFlash(u32 offset , u8 *data ,u16 size );
void SaveSysParams(void);
/*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/