712 lines
16 KiB
C
712 lines
16 KiB
C
|
|
|
|||
|
|
#define _IN_NORPARAS_C
|
|||
|
|
#include "norparas.h"
|
|||
|
|
|
|||
|
|
|
|||
|
|
#if (MAX_PARA_BLOCK > 0)
|
|||
|
|
#include "norflash.h"
|
|||
|
|
#include "inout.h"
|
|||
|
|
#include "shell.h"
|
|||
|
|
#include "delay.h"
|
|||
|
|
|
|||
|
|
//----------------------------------------------------
|
|||
|
|
|
|||
|
|
#define NORPARA_BEG_ADDR (SNF_PARAS_BEGIN) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ,ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռһ<D5BC><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>16<31><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
#define NP_BLOCK_BYTES SNF_BYTES_PER_PAGE // ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3>С(һҳ)
|
|||
|
|
#define NP_SAVE_BYTES_PER_BLOCK SNF_BYTES_PER_SEC // ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С(һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
|||
|
|
#define NP_SAVE_BLOCKS_PER_SEC 16 // ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3>,<2C><>һҳ<D2BB>洢<EFBFBD><E6B4A2><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3>Ч<EFBFBD><D0A7>־,ʵ<>ʹ<EFBFBD>15<31><35>ҳ<EFBFBD><D2B3><EFBFBD>ڴ洢<DAB4><E6B4A2><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
|
|||
|
|
#define GET_NORPARA_BLOCK_ADDR(bidx) (NORPARA_BEG_ADDR+(bidx)*NP_SAVE_BYTES_PER_BLOCK) // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ
|
|||
|
|
|
|||
|
|
//----------------------------------------------------
|
|||
|
|
|
|||
|
|
typedef struct
|
|||
|
|
{
|
|||
|
|
int paraEn; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>־
|
|||
|
|
NorParaBlock norParaBlock; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
s32 * pParaList; // <20><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>С<EFBFBD><D0A1><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>Ĭ<EFBFBD><C4AC>ֵ)
|
|||
|
|
char * pParasName; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
|
|||
|
|
|
|||
|
|
// <20>洢
|
|||
|
|
u32 pageFlag[NP_SAVE_BLOCKS_PER_SEC]; // <20><><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3>־
|
|||
|
|
|
|||
|
|
}NorParaBlockCtrl;
|
|||
|
|
|
|||
|
|
NorParaBlockCtrl g_norParaBlockList[MAX_PARA_BLOCK];
|
|||
|
|
|
|||
|
|
//----------------------------------------------------
|
|||
|
|
|
|||
|
|
const char * SHOWP_STR =
|
|||
|
|
"\t" " <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> " "\r\n"
|
|||
|
|
"\t" " p1 p2" "\r\n"
|
|||
|
|
"\t" " 0 0 <09><>ʾȫ<CABE><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> " "\r\n"
|
|||
|
|
"\t" " b001 0 <09><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>b " "\r\n"
|
|||
|
|
"\t" " b002 0 <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>b<EFBFBD><62><EFBFBD><EFBFBD>Ĭ<EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD> " "\r\n"
|
|||
|
|
"\t" " b003 0 <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>b<EFBFBD><62><EFBFBD>¼<EFBFBD><C2BC>ز<EFBFBD><D8B2><EFBFBD> " "\r\n"
|
|||
|
|
;
|
|||
|
|
|
|||
|
|
void ShowPara(char * para1, char * para2);
|
|||
|
|
|
|||
|
|
const char * SETP_STR =
|
|||
|
|
"\t" "<EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><EFBFBD><EFBFBD> " "\r\n"
|
|||
|
|
"\t" " p1 p2" "\r\n"
|
|||
|
|
"\t" " b00x val <09><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>b, <20><><EFBFBD><EFBFBD>ID x, <20><><EFBFBD><EFBFBD>ֵ val " "\r\n"
|
|||
|
|
"\t" " 10b000 0 <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>b " "\r\n"
|
|||
|
|
;
|
|||
|
|
|
|||
|
|
void SetPara(char * para1, char * para2);
|
|||
|
|
//----------------------------------------------------
|
|||
|
|
|
|||
|
|
void InitNorParas(void)
|
|||
|
|
{
|
|||
|
|
static int g_inited = 0;
|
|||
|
|
|
|||
|
|
if (g_inited == 0)
|
|||
|
|
{
|
|||
|
|
g_inited = 1;
|
|||
|
|
InitNorSpi(); // <20><>ʼ<EFBFBD><CABC> nor flash <20><><EFBFBD><EFBFBD> SPI
|
|||
|
|
SNFlashInit(SetNorSpiNssOn, SetNorSpiNssOff, NorSpiReadByte, NorSpiWriteByte); // <20><>ʼ<EFBFBD><CABC>nor flash <20><>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
|
|||
|
|
for(int i = 0; i < MAX_PARA_BLOCK; i++)
|
|||
|
|
{
|
|||
|
|
memset(&g_norParaBlockList[i], 0, sizeof(NorParaBlockCtrl));
|
|||
|
|
LoadNorParas(i);
|
|||
|
|
}
|
|||
|
|
AddShellCmd("SHOWPARA", SHOWP_STR, ShowPara);
|
|||
|
|
AddShellCmd("SETPARA", SETP_STR, SetPara);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>־
|
|||
|
|
int GetNorParaEn(int bIdx)
|
|||
|
|
{
|
|||
|
|
if (bIdx < 0 || bIdx >= MAX_PARA_BLOCK)
|
|||
|
|
{
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return g_norParaBlockList[bIdx].paraEn;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>ҳ<EFBFBD><D2B3>Ч<EFBFBD><D0A7>־
|
|||
|
|
int LoadParaPageFlag(int bIdx)
|
|||
|
|
{
|
|||
|
|
NorParaBlockCtrl * pCtrl;
|
|||
|
|
|
|||
|
|
if (bIdx < 0 || bIdx >= MAX_PARA_BLOCK)
|
|||
|
|
{
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
pCtrl = &g_norParaBlockList[bIdx];
|
|||
|
|
|
|||
|
|
return DatFlashRdData(GET_NORPARA_BLOCK_ADDR(bIdx), (u8 *)(&pCtrl->pageFlag[0]), NP_SAVE_BLOCKS_PER_SEC*sizeof(u32));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3>Ч<EFBFBD><D0A7>־
|
|||
|
|
int SaveParaPageFlag(int bIdx)
|
|||
|
|
{
|
|||
|
|
NorParaBlockCtrl * pCtrl;
|
|||
|
|
|
|||
|
|
if (bIdx < 0 || bIdx >= MAX_PARA_BLOCK)
|
|||
|
|
{
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
pCtrl = &g_norParaBlockList[bIdx];
|
|||
|
|
|
|||
|
|
return DatFlashWrData(GET_NORPARA_BLOCK_ADDR(bIdx), (u8 *)(&pCtrl->pageFlag[0]), NP_SAVE_BLOCKS_PER_SEC*sizeof(u32));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>ҳ<EFBFBD><D2B3>Ч<EFBFBD><D0A7>־
|
|||
|
|
int SetParaPageFlagValue(int bIdx, int pIdx, int enFlag)
|
|||
|
|
{
|
|||
|
|
if (bIdx < 0 || bIdx >= MAX_PARA_BLOCK || pIdx < 0 || pIdx >= NP_SAVE_BLOCKS_PER_SEC)
|
|||
|
|
{
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (enFlag == 0)
|
|||
|
|
{
|
|||
|
|
g_norParaBlockList[bIdx].pageFlag[pIdx] = 0; // ʧЧ,0xffffffffδʹ<CEB4><CAB9>ҳ
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
g_norParaBlockList[bIdx].pageFlag[pIdx] = PARA_VALID+pIdx; // <20><>Ч
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20>Ӳ<EFBFBD><D3B2><EFBFBD>ҳ<EFBFBD><D2B3>־<EFBFBD>õ<EFBFBD><C3B5><EFBFBD>ǰ<EFBFBD><C7B0>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD>ҳ
|
|||
|
|
int GetSaveIdxFromPageFlag(int bIdx)
|
|||
|
|
{
|
|||
|
|
int i;
|
|||
|
|
NorParaBlockCtrl * pCtrl;
|
|||
|
|
|
|||
|
|
if (bIdx < 0 || bIdx >= MAX_PARA_BLOCK)
|
|||
|
|
{
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
pCtrl = &g_norParaBlockList[bIdx];
|
|||
|
|
|
|||
|
|
for(i = 1; i < NP_SAVE_BLOCKS_PER_SEC; i++)
|
|||
|
|
{
|
|||
|
|
if (pCtrl->pageFlag[i] == PARA_VALID+i)
|
|||
|
|
{
|
|||
|
|
return i;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return -2;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20>õ<EFBFBD><C3B5><EFBFBD>һ<EFBFBD><D2BB>δʹ<CEB4><CAB9>ҳ
|
|||
|
|
int GetNextSaveIdxFromPageFlag(int bIdx)
|
|||
|
|
{
|
|||
|
|
int i;
|
|||
|
|
NorParaBlockCtrl * pCtrl;
|
|||
|
|
|
|||
|
|
if (bIdx < 0 || bIdx >= MAX_PARA_BLOCK)
|
|||
|
|
{
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
pCtrl = &g_norParaBlockList[bIdx];
|
|||
|
|
|
|||
|
|
for (i = 1; i < NP_SAVE_BLOCKS_PER_SEC; i++)
|
|||
|
|
{
|
|||
|
|
if (pCtrl->pageFlag[i] == 0xffffffff)
|
|||
|
|
{
|
|||
|
|
return i;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return -2;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
|||
|
|
// bIdx:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID
|
|||
|
|
// return: -1:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD><D8B4><EFBFBD>,<2C><><EFBFBD>в<EFBFBD><D0B2><EFBFBD>ҳ<EFBFBD><D2B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,δ<>ҵ<EFBFBD><D2B5><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD>
|
|||
|
|
// 0:<3A><>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>ֵ
|
|||
|
|
int LoadNorParas(int bIdx)
|
|||
|
|
{
|
|||
|
|
u32 addr; //
|
|||
|
|
NorParaBlockCtrl * pCtrl;
|
|||
|
|
int idx, rslt;
|
|||
|
|
|
|||
|
|
if (bIdx < 0 || bIdx >= MAX_PARA_BLOCK)
|
|||
|
|
{
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
pCtrl = &g_norParaBlockList[bIdx];
|
|||
|
|
|
|||
|
|
memset(pCtrl, 0, sizeof(NorParaBlockCtrl));
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>洢<EFBFBD><E6B4A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>־
|
|||
|
|
rslt = LoadParaPageFlag(bIdx);
|
|||
|
|
if (rslt < 0)
|
|||
|
|
{
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
idx = GetSaveIdxFromPageFlag(bIdx); // <20>õ<EFBFBD><C3B5><EFBFBD>ǰ<EFBFBD><C7B0>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD>ҳid
|
|||
|
|
|
|||
|
|
if (idx < 0)
|
|||
|
|
{
|
|||
|
|
printf("load nor para error, code=%d\r\n", idx);
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
printf("load nor para block %d, page is %d\r\n", bIdx, idx);
|
|||
|
|
|
|||
|
|
addr = GET_NORPARA_BLOCK_ADDR(bIdx) + (idx * NP_BLOCK_BYTES);
|
|||
|
|
DatFlashRdData(addr, (u8*)&pCtrl->norParaBlock, sizeof(NorParaBlock));
|
|||
|
|
|
|||
|
|
g_norParaBlockList[bIdx].paraEn = PARA_VALID; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
|
|||
|
|
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
//bIdx <20><><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD>ID
|
|||
|
|
int SaveNorParas(int bIdx)
|
|||
|
|
{
|
|||
|
|
u32 addr;
|
|||
|
|
int cidx, nidx;
|
|||
|
|
|
|||
|
|
if (bIdx < 0 || bIdx >= MAX_PARA_BLOCK)
|
|||
|
|
{
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
cidx = GetSaveIdxFromPageFlag(bIdx);
|
|||
|
|
nidx = GetNextSaveIdxFromPageFlag(bIdx);
|
|||
|
|
if (cidx < 0)
|
|||
|
|
{
|
|||
|
|
cidx = 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (nidx < 0) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
printf("overflow, erase 4k\r\n");
|
|||
|
|
DatFlash4kErase(GET_NORPARA_BLOCK_ADDR(bIdx), 1); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
LoadParaPageFlag(bIdx);
|
|||
|
|
cidx = 0;
|
|||
|
|
nidx = GetNextSaveIdxFromPageFlag(bIdx);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (nidx < 0) //
|
|||
|
|
{
|
|||
|
|
printf("SaveNorParas error\r\n");
|
|||
|
|
return -2;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>洢<EFBFBD><E6B4A2>֮<EFBFBD><D6AE><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3>
|
|||
|
|
addr = GET_NORPARA_BLOCK_ADDR(bIdx) + ((nidx) * NP_BLOCK_BYTES);
|
|||
|
|
DatFlashWrDataWithErase(addr, (u8 *)&g_norParaBlockList[bIdx].norParaBlock, sizeof(NorParaBlock));
|
|||
|
|
|
|||
|
|
SetParaPageFlagValue(bIdx, nidx, 1); // <20><><EFBFBD><EFBFBD><EFBFBD>²<EFBFBD><C2B2><EFBFBD><EFBFBD>洢ҳ<E6B4A2><D2B3>Ч
|
|||
|
|
|
|||
|
|
SetParaPageFlagValue(bIdx, cidx, 0); // <20><><EFBFBD><EFBFBD><EFBFBD>ɵIJ<C9B5><C4B2><EFBFBD><EFBFBD>洢ҳ
|
|||
|
|
|
|||
|
|
SaveParaPageFlag(bIdx); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3>־
|
|||
|
|
|
|||
|
|
g_norParaBlockList[bIdx].paraEn = PARA_VALID; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
|
|||
|
|
|
|||
|
|
printf("save nor para successful, page is %d \r\n", nidx);
|
|||
|
|
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><D8B2><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
NorParaBlock * GetNorParaBlock(int bIdx)
|
|||
|
|
{
|
|||
|
|
if (bIdx < 0 || bIdx >= MAX_PARA_BLOCK)
|
|||
|
|
{
|
|||
|
|
return NULL;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return &g_norParaBlockList[bIdx].norParaBlock;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
void SetNorParaNameString(int bIdx, void * pName)
|
|||
|
|
{
|
|||
|
|
if (bIdx < 0 || bIdx >= MAX_PARA_BLOCK )
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
g_norParaBlockList[bIdx].pParasName = pName;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD>б<EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>С<EFBFBD><D0A1><EFBFBD><EFBFBD>ֵĬ<D6B5><C4AC>ֵ)
|
|||
|
|
void SetNorParaList(int bIdx, void * pPara)
|
|||
|
|
{
|
|||
|
|
if (bIdx < 0 || bIdx >= MAX_PARA_BLOCK )
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
g_norParaBlockList[bIdx].pParaList = pPara;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD>Ĭ<EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD>
|
|||
|
|
void LoadNorDefPara(int bIdx)
|
|||
|
|
{
|
|||
|
|
if (bIdx < 0 || bIdx >= MAX_PARA_BLOCK || g_norParaBlockList[bIdx].pParaList == NULL)
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
for(int i = 0; i < PARA_NUM_PER_BLK; i++)
|
|||
|
|
{
|
|||
|
|
int offset = i * 4 + 3;
|
|||
|
|
g_norParaBlockList[bIdx].norParaBlock.buff[i] = * ( g_norParaBlockList[bIdx].pParaList + offset );
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
|||
|
|
void CheckParaRange(int bIdx)
|
|||
|
|
{
|
|||
|
|
if (bIdx < 0 || bIdx >= MAX_PARA_BLOCK || g_norParaBlockList[bIdx].pParaList == NULL)
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
for(int i = 0; i < PARA_NUM_PER_BLK; i++)
|
|||
|
|
{
|
|||
|
|
int paratype, minOffset, maxOffset; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>С<EFBFBD><D0A1><EFBFBD><EFBFBD>ֵָ<D6B5><D6B8>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD>
|
|||
|
|
paratype = (i * 4);
|
|||
|
|
minOffset = (i * 4 + 1);
|
|||
|
|
maxOffset = (i * 4 + 2);
|
|||
|
|
if ((*(g_norParaBlockList[bIdx].pParaList + paratype)) == PTYPE_S)
|
|||
|
|
{
|
|||
|
|
if (g_norParaBlockList[bIdx].norParaBlock.buff[i] < (*(g_norParaBlockList[bIdx].pParaList + minOffset)) )
|
|||
|
|
{
|
|||
|
|
g_norParaBlockList[bIdx].norParaBlock.buff[i] = (*( g_norParaBlockList[bIdx].pParaList + minOffset));
|
|||
|
|
printf("less than min, equal min, block %d, id is %d\r\n", bIdx, i+1);
|
|||
|
|
}
|
|||
|
|
else if (g_norParaBlockList[bIdx].norParaBlock.buff[i] > (*( g_norParaBlockList[bIdx].pParaList + maxOffset)) )
|
|||
|
|
{
|
|||
|
|
g_norParaBlockList[bIdx].norParaBlock.buff[i] = (*( g_norParaBlockList[bIdx].pParaList + maxOffset));
|
|||
|
|
printf("more than max, equal max, block %d, id is %d\r\n", bIdx, i+1);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else if ((*(g_norParaBlockList[bIdx].pParaList + paratype)) == PTYPE_U)
|
|||
|
|
{
|
|||
|
|
if ((u32)g_norParaBlockList[bIdx].norParaBlock.buff[i] < (u32)(*(g_norParaBlockList[bIdx].pParaList + minOffset)) )
|
|||
|
|
{
|
|||
|
|
g_norParaBlockList[bIdx].norParaBlock.buff[i] = (*( g_norParaBlockList[bIdx].pParaList + minOffset));
|
|||
|
|
printf("less than min, equal min, block %d, id is %d\r\n", bIdx, i+1);
|
|||
|
|
}
|
|||
|
|
else if ((u32)g_norParaBlockList[bIdx].norParaBlock.buff[i] > (u32)(*( g_norParaBlockList[bIdx].pParaList + maxOffset)) )
|
|||
|
|
{
|
|||
|
|
g_norParaBlockList[bIdx].norParaBlock.buff[i] = (*( g_norParaBlockList[bIdx].pParaList + maxOffset));
|
|||
|
|
printf("more than max, equal max, block %d, id is %d\r\n", bIdx, i+1);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>ij<EFBFBD><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
|||
|
|
void CheckAParaRange(int bIdx, int id)
|
|||
|
|
{
|
|||
|
|
if (bIdx < 0 || bIdx >= MAX_PARA_BLOCK || g_norParaBlockList[bIdx].pParaList == NULL)
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (id >= 0 && id < PARA_NUM_PER_BLK)
|
|||
|
|
{
|
|||
|
|
int paratype, minOffset, maxOffset; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>С<EFBFBD><D0A1><EFBFBD><EFBFBD>ֵָ<D6B5><D6B8>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD>
|
|||
|
|
paratype = (id * 4);
|
|||
|
|
minOffset = (id * 4 + 1);
|
|||
|
|
maxOffset = (id * 4 + 2);
|
|||
|
|
if ((*(g_norParaBlockList[bIdx].pParaList + paratype)) == PTYPE_S)
|
|||
|
|
{
|
|||
|
|
if (g_norParaBlockList[bIdx].norParaBlock.buff[id] < (*( g_norParaBlockList[bIdx].pParaList + minOffset)) )
|
|||
|
|
{
|
|||
|
|
g_norParaBlockList[bIdx].norParaBlock.buff[id] = (*( g_norParaBlockList[bIdx].pParaList + minOffset));
|
|||
|
|
printf("less than min, equal min\r\n");
|
|||
|
|
}
|
|||
|
|
else if (g_norParaBlockList[bIdx].norParaBlock.buff[id] > (*( g_norParaBlockList[bIdx].pParaList + maxOffset)) )
|
|||
|
|
{
|
|||
|
|
g_norParaBlockList[bIdx].norParaBlock.buff[id] = (*( g_norParaBlockList[bIdx].pParaList + maxOffset));
|
|||
|
|
printf("more than max, equal max\r\n");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else if ((*(g_norParaBlockList[bIdx].pParaList + paratype)) == PTYPE_U)
|
|||
|
|
{
|
|||
|
|
if ((u32)g_norParaBlockList[bIdx].norParaBlock.buff[id] < (u32)(*( g_norParaBlockList[bIdx].pParaList + minOffset)) )
|
|||
|
|
{
|
|||
|
|
g_norParaBlockList[bIdx].norParaBlock.buff[id] = (*( g_norParaBlockList[bIdx].pParaList + minOffset));
|
|||
|
|
printf("less than min, equal min\r\n");
|
|||
|
|
}
|
|||
|
|
else if ((u32)g_norParaBlockList[bIdx].norParaBlock.buff[id] > (u32)(*( g_norParaBlockList[bIdx].pParaList + maxOffset)) )
|
|||
|
|
{
|
|||
|
|
g_norParaBlockList[bIdx].norParaBlock.buff[id] = (*( g_norParaBlockList[bIdx].pParaList + maxOffset));
|
|||
|
|
printf("more than max, equal max\r\n");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
// <20><>ȡһ<C8A1><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
s32 GetANorPara(int bIdx, int id)
|
|||
|
|
{
|
|||
|
|
if (bIdx < 0 || bIdx >= MAX_PARA_BLOCK )
|
|||
|
|
{
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (GetNorParaEn(bIdx) == PARA_VALID)
|
|||
|
|
{
|
|||
|
|
int idx = id - 1;
|
|||
|
|
|
|||
|
|
if (idx >= 0 && idx < PARA_NUM_PER_BLK)
|
|||
|
|
{
|
|||
|
|
return g_norParaBlockList[bIdx].norParaBlock.buff[idx];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// <20>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ṩ<EFBFBD><E1B9A9><EFBFBD>湦<EFBFBD><E6B9A6>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><C9BA>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// ע:norflash<73><68><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>д
|
|||
|
|
void SetANorPara(int bIdx, int id, s32 val)
|
|||
|
|
{
|
|||
|
|
if (bIdx < 0 || bIdx >= MAX_PARA_BLOCK )
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
char * pInfo = NULL;
|
|||
|
|
int idx = id - 1;
|
|||
|
|
|
|||
|
|
if (idx >= 0 && idx < PARA_NUM_PER_BLK)
|
|||
|
|
{
|
|||
|
|
if ((*(g_norParaBlockList[bIdx].pParaList + idx*4)) == PTYPE_S)
|
|||
|
|
{
|
|||
|
|
s32 old;
|
|||
|
|
|
|||
|
|
pInfo = (g_norParaBlockList[bIdx].pParasName+(idx)*PARA_STR_LEN);
|
|||
|
|
|
|||
|
|
printf("set para block %d\r\n", bIdx+1);
|
|||
|
|
|
|||
|
|
old = g_norParaBlockList[bIdx].norParaBlock.buff[idx];
|
|||
|
|
g_norParaBlockList[bIdx].norParaBlock.buff[idx] = val;
|
|||
|
|
|
|||
|
|
CheckAParaRange(bIdx, idx);
|
|||
|
|
|
|||
|
|
if (pInfo == NULL)
|
|||
|
|
{
|
|||
|
|
pInfo = "";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
printf("%d. (%s) = %d, oldvalue=%d\r\n", (id), pInfo, val, old);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
u32 old;
|
|||
|
|
|
|||
|
|
pInfo = (g_norParaBlockList[bIdx].pParasName+(idx)*PARA_STR_LEN);
|
|||
|
|
|
|||
|
|
printf("set para block %d\r\n", bIdx+1);
|
|||
|
|
|
|||
|
|
old = (u32)g_norParaBlockList[bIdx].norParaBlock.buff[idx];
|
|||
|
|
g_norParaBlockList[bIdx].norParaBlock.buff[idx] = val;
|
|||
|
|
|
|||
|
|
CheckAParaRange(bIdx, idx);
|
|||
|
|
|
|||
|
|
if (pInfo == NULL)
|
|||
|
|
{
|
|||
|
|
pInfo = "";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
printf("%d. (%s) = %d, oldvalue=%d\r\n", (id), pInfo, (u32)val, old);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
* p1 p2
|
|||
|
|
* 1001 val // <20><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>1,<2C><><EFBFBD><EFBFBD>ID 1,<2C><><EFBFBD><EFBFBD>ֵval
|
|||
|
|
* 1002 val // <20><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>1,<2C><><EFBFBD><EFBFBD>ID 2,<2C><><EFBFBD><EFBFBD>ֵval
|
|||
|
|
......
|
|||
|
|
* 2001 val // <20><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>2,<2C><><EFBFBD><EFBFBD>ID 1,<2C><><EFBFBD><EFBFBD>ֵval
|
|||
|
|
* 2002 val // <20><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>2,<2C><><EFBFBD><EFBFBD>ID 2,<2C><><EFBFBD><EFBFBD>ֵval //<2F><><EFBFBD>ṩ<EFBFBD><E1B9A9><EFBFBD>湦<EFBFBD><E6B9A6>
|
|||
|
|
......
|
|||
|
|
* 101000 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1
|
|||
|
|
* 102000 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
void SetPara(char * para1, char * para2)
|
|||
|
|
{
|
|||
|
|
int p1, p2, p3;
|
|||
|
|
|
|||
|
|
if (para1 == NULL || para2 == NULL)
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
printf("para1=%s, para2=%s\r\n", para1, para2);
|
|||
|
|
|
|||
|
|
p1 = 0;
|
|||
|
|
p2 = 0;
|
|||
|
|
if (strcmp(para1, "") != 0)
|
|||
|
|
{
|
|||
|
|
p1 = atoi(para1);
|
|||
|
|
}
|
|||
|
|
if (strcmp(para2, "") != 0)
|
|||
|
|
{
|
|||
|
|
p2 = atoi(para2);
|
|||
|
|
}
|
|||
|
|
if (p1 == p2)
|
|||
|
|
{
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
p3 = p1 / 1000; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>id
|
|||
|
|
p1 = p1 % 1000; // <20><><EFBFBD><EFBFBD>id
|
|||
|
|
// p2:<3A><><EFBFBD><EFBFBD>ֵ
|
|||
|
|
|
|||
|
|
if (p3 > 0 && p3 <= MAX_PARA_BLOCK)
|
|||
|
|
{
|
|||
|
|
SetANorPara(p3-1, p1, p2);
|
|||
|
|
}
|
|||
|
|
else if (p3 > 100 && p3 <= 116)
|
|||
|
|
{
|
|||
|
|
p3 -= 101;
|
|||
|
|
printf("save block %d\r\n", p3+1);
|
|||
|
|
SaveNorParas(p3);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
* p1 p2
|
|||
|
|
* // <20><>ʾȫ<CABE><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* 1001 // <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1
|
|||
|
|
* 2001 // <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2
|
|||
|
|
* 1002 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD>Ĭ<EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD>
|
|||
|
|
* 2002 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD>Ĭ<EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD>
|
|||
|
|
* 1003 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD>¼<EFBFBD><C2BC>ز<EFBFBD><D8B2><EFBFBD>
|
|||
|
|
* 2003 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD><32><EFBFBD>¼<EFBFBD><C2BC>ز<EFBFBD><D8B2><EFBFBD>
|
|||
|
|
*/
|
|||
|
|
void ShowPara(char * para1, char * para2)
|
|||
|
|
{
|
|||
|
|
int p1, p2, p3;
|
|||
|
|
|
|||
|
|
if (para1 == NULL || para2 == NULL)
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
printf("para1=%s, para2=%s\r\n", para1, para2);
|
|||
|
|
|
|||
|
|
p1 = 0;
|
|||
|
|
p2 = 0;
|
|||
|
|
if (strcmp(para1, "") != 0)
|
|||
|
|
{
|
|||
|
|
p1 = atoi(para1);
|
|||
|
|
}
|
|||
|
|
if (strcmp(para2, "") != 0)
|
|||
|
|
{
|
|||
|
|
p2 = atoi(para2);
|
|||
|
|
}
|
|||
|
|
if (p1 == p2)
|
|||
|
|
{
|
|||
|
|
}
|
|||
|
|
p3 = p1 / 1000; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>id
|
|||
|
|
p1 = p1 % 1000; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// p2: <20><><EFBFBD><EFBFBD>ID
|
|||
|
|
|
|||
|
|
if (p3 <= MAX_PARA_BLOCK)
|
|||
|
|
{
|
|||
|
|
switch(p1)
|
|||
|
|
{
|
|||
|
|
case 0:
|
|||
|
|
{
|
|||
|
|
// <20><>ʾȫ<CABE><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
for (int j = 0; j < MAX_PARA_BLOCK; j++)
|
|||
|
|
{
|
|||
|
|
printf("\r\npara block %d:\r\n", j+1);
|
|||
|
|
|
|||
|
|
if (g_norParaBlockList[j].pParasName == NULL)
|
|||
|
|
{
|
|||
|
|
continue;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
for(int i = 0; i < PARA_NUM_PER_BLK; i++)
|
|||
|
|
{
|
|||
|
|
char * pStr;
|
|||
|
|
pStr = g_norParaBlockList[j].pParasName + (i*PARA_STR_LEN);
|
|||
|
|
if (pStr == NULL)
|
|||
|
|
{
|
|||
|
|
pStr = "";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ( strcmp(pStr, "") != 0 )
|
|||
|
|
{
|
|||
|
|
if ((*(g_norParaBlockList[j].pParaList+i*4)) == PTYPE_S)
|
|||
|
|
{
|
|||
|
|
printf("%d. (%s) val=%d, min=%d, max=%d, def=%d\r\n", i+1, pStr,
|
|||
|
|
GetANorPara(j, i+1),
|
|||
|
|
*(g_norParaBlockList[j].pParaList+ i*4+1),
|
|||
|
|
*(g_norParaBlockList[j].pParaList+ i*4+2),
|
|||
|
|
*(g_norParaBlockList[j].pParaList+ i*4+3) );
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
printf("%d. (%s) val=%d, min=%d, max=%d, def=%d\r\n", i+1, pStr,
|
|||
|
|
(u32)GetANorPara(j, i+1),
|
|||
|
|
(u32)(*(g_norParaBlockList[j].pParaList+ i*4+1)),
|
|||
|
|
(u32)(*(g_norParaBlockList[j].pParaList+ i*4+2)),
|
|||
|
|
(u32)(*(g_norParaBlockList[j].pParaList+ i*4+3)) );
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
DelayMs(1);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case 1:
|
|||
|
|
{
|
|||
|
|
// <20><>ʾij<CABE><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
printf("\r\npara block %d:\r\n", p3);
|
|||
|
|
|
|||
|
|
if (g_norParaBlockList[p3-1].pParasName != NULL)
|
|||
|
|
{
|
|||
|
|
for(int i = 0; i < PARA_NUM_PER_BLK; i++)
|
|||
|
|
{
|
|||
|
|
char * pStr;
|
|||
|
|
pStr = g_norParaBlockList[p3-1].pParasName + (i*PARA_STR_LEN);
|
|||
|
|
if (pStr == NULL)
|
|||
|
|
{
|
|||
|
|
pStr = "";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ( strcmp(pStr, "") != 0 )
|
|||
|
|
{
|
|||
|
|
if ((*(g_norParaBlockList[j].pParaList+i*4)) == PTYPE_S)
|
|||
|
|
{
|
|||
|
|
printf("%d. (%s) val=%d, min=%d, max=%d, def=%d\r\n", i+1, pStr,
|
|||
|
|
GetANorPara(p3-1, i+1),
|
|||
|
|
*(g_norParaBlockList[p3-1].pParaList+ i*4+1),
|
|||
|
|
*(g_norParaBlockList[p3-1].pParaList+ i*4+2),
|
|||
|
|
*(g_norParaBlockList[p3-1].pParaList+ i*4+3) );
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
printf("%d. (%s) val=%d, min=%d, max=%d, def=%d\r\n", i+1, pStr,
|
|||
|
|
(u32)GetANorPara(p3-1, i+1),
|
|||
|
|
(u32)(*(g_norParaBlockList[p3-1].pParaList+ i*4+1)),
|
|||
|
|
(u32)(*(g_norParaBlockList[p3-1].pParaList+ i*4+2)),
|
|||
|
|
(u32)(*(g_norParaBlockList[p3-1].pParaList+ i*4+3)) );
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
DelayMs(1);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case 2:
|
|||
|
|
{
|
|||
|
|
int bidx = p3 - 1;
|
|||
|
|
// <20><><EFBFBD><EFBFBD>Ĭ<EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD>
|
|||
|
|
if (bidx >= 0)
|
|||
|
|
{
|
|||
|
|
printf("load def para block %d:\r\n", p3);
|
|||
|
|
LoadNorDefPara(bidx);
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case 3:
|
|||
|
|
{
|
|||
|
|
int bidx = p3 - 1;
|
|||
|
|
if (bidx >= 0)
|
|||
|
|
{
|
|||
|
|
printf("load para block %d:\r\n", p3);
|
|||
|
|
// <20><><EFBFBD>¼<EFBFBD><C2BC>ز<EFBFBD><D8B2><EFBFBD>
|
|||
|
|
LoadNorParas(bidx);
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
default:
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#endif
|
|||
|
|
|