内存设计:
#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
发卡通行组举例-内存完美设计-一个优化的地方-PAD++看
猜你喜欢
转载自blog.csdn.net/weixin_42381351/article/details/88637867
今日推荐
周排行