发卡通行组举例-内存完美设计-一个优化的地方-PAD++看

内存设计:
#define GIDMAX 40

typedef struct
{
    uint8_t     code[25];
    uint8_t     len;
}CQdianmaType;//设备点码26字节


typedef struct
{
    uint64_t     version;
    uint8_t      gid[GIDMAX][20];
}GidType;

typedef struct
{
	uint8_t ip[50];
	uint16_t port;
}serverAddrType;//网诺地址52字节
typedef struct
{
    CQdianmaType devcode;      //26
    uint8_t      locatcode[23];//23 
    uint8_t      jin[13];      //13
    uint8_t      wei[13];      //13	
    serverAddrType net;        //52
    GidType gidtype;           //20*X+8
}_CQType;

那么设计多大比较好?

#define     DSYS_DIANMA_ADDR          0x0807E000
这一页是2K也就是2048个字节!

所以可以X最大是95!修改 #define GIDMAX 90

流程设计:
上电直接读出来到结构体
hip_flash_read( DSYS_DIANMA_ADDR ,(uint8_t *)&CQType ,sizeof(_CQType)
如果是FF那就是新设备 
清空即可 所以cqdefault是没有必要的!!

已经没有这个大地方放置了 找一个SRAM
也就是一个数据在SRAM 一个保存在FLASH
_CQType CQType@(0x10000000);
uint8_t 				mqttreadbuf[2048]@(0x10000800);	

开始流程,配置以后就写入!


流程设计:
1上电就读片内FLASH,数据放在结构体中--void sysCfg_init( void ){config.read(CFG_SYS_CQDM , (void **)&CQType );}
2每次修改数据就是改动这个结构体的部分--ble接口指令
3每次保存 可以直接擦除 在写入 因为我保证了结构体其他的没变化
4每次使用 的时候还需要去FLASH读吗?其实不用了 因为我一直都是最新的 





思考:为什么我要保存20-22的呢?我可以直接保存10-11呀 

余力卡举例:
50 01 20 00 02 00 03 01 01 01 19 10 17 01 01 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 43 51 

typedef struct 
{
   _Code Code[5]; // 5个块儿 每个块儿一个点码
   _Info Info;   //  1个块儿 其他信息   
}_YULICARD

钉钉你的例子,用一个块儿写:点码20
“50012000020003010101191017010100”
写入点码10
0X50,0X01,0X20,0x00,0x02,0x00,0x03,0x01,0x01,0x01
在写入有效期到19年10月17日过期
0X19,0X10,0X17,
在写入类型标识 用户卡
0X01
在写入使能位
0x01
在写入CRC
0xXX

typedef struct 
{  
    uint8_t cqcode[10];      // 点码20变10
    uint8_t endtime[3];      // 截止时间    3字节
    uint8_t setting;         // 设置卡类别   
    uint8_t enable;          //该块数据是否使能
    uint8_t crc0;            // 校验    该块 一共16个字节 CRC8=8
}_Code

typedef struct 
{  
    uint8_t UID[4];      // UID
    uint8_t ID[9];        // 身份证9位 暂时0XFF
    uint8_t doornum;     // 前面5个enable累和
    uint8_t mark[2];     //固定填写‘C’‘Q’ 方便快速和富凯卡分开"CQ"-->67 81--->0X43 0X51-->这样写卡!!
}_Info



思考:为什么我要保存20-22的呢?

我可以直接保存10-11呀 那样我可以保持多一倍!!!

猜你喜欢

转载自blog.csdn.net/weixin_42381351/article/details/88637867