From b20f94fd39346787a0e99940f0370aae0d84090a Mon Sep 17 00:00:00 2001 From: chen <15335560115@163.com> Date: 星期六, 21 六月 2025 18:18:34 +0800 Subject: [PATCH] 无感闸机基站第一版,增加存授权表和查表逻辑,将接收标签id改为4字节,但是未找到tagupdate直接回将tagnum清0的问题,导致一直抢占 --- keil/include/drivers/global_param.c | 40 ++++++++++++++++++++++++++++++++++++---- 1 files changed, 36 insertions(+), 4 deletions(-) diff --git a/keil/include/drivers/global_param.c b/keil/include/drivers/global_param.c index c9ab191..153ef6d 100644 --- a/keil/include/drivers/global_param.c +++ b/keil/include/drivers/global_param.c @@ -4,8 +4,9 @@ #include <string.h> #define FLASH_IAP_CTRL_MAP (uint32_t)0x0402E000 //the control map start address, 63K MK8000修改 #define FLASH_Authorization_MAP (uint32_t)0x0402f000 //授权标签列表起始地址 - -uint32_t tag_id_authorization_list[1024]; +#define AUTHORIZATION_NUM 1024 +uint32_t tag_id_authorization_list[AUTHORIZATION_NUM]; +uint32_t tag_id_authorization_list_num; uint16_t g_com_map[COM_MAP_SIZE]; uint8_t parameter_check(void) { @@ -47,15 +48,33 @@ result=flash_open(FLASH_ID0,NULL); //MK8000没有对应函数 if(!result) { + flash_erase(FLASH_ID0,FLASH_Authorization_MAP,FLASH_SECTOR_SIZE); + flash_write_nbytes(FLASH_ID0, FLASH_Authorization_MAP, (const uint8_t*)g_com_map, sizeof(g_com_map)); + } + //flash_close(FLASH_ID0); + __enable_irq(); + return result; +} +uint32_t save_taglist_map_to_flash(void) +{ + uint32_t result = 0; + if(parameter_check()) //参数错误,不保存 + { + return 1; + } + __disable_irq(); + //result = FLASH_Prepare(FLASH_IAP_CTRL_MAP, (COM_MAP_SIZE<<1));MK8000修改 + result=flash_open(FLASH_ID0,NULL); + //MK8000没有对应函数 + if(!result) { flash_erase(FLASH_ID0,FLASH_IAP_CTRL_MAP,FLASH_SECTOR_SIZE); - flash_write_nbytes(FLASH_ID0, FLASH_IAP_CTRL_MAP, (const uint8_t*)g_com_map, sizeof(g_com_map)); + flash_write_nbytes(FLASH_ID0, FLASH_IAP_CTRL_MAP, (const uint8_t*)tag_id_authorization_list, sizeof(tag_id_authorization_list)); //result = FLASH_Write(FLASH_IAP_CTRL_MAP, (const uint8_t*)g_com_map, (COM_MAP_SIZE<<1)); } //flash_close(FLASH_ID0); __enable_irq(); return result; } - void parameter_init(void)//注意看前面有没有关闭flash如果有则打开flash在读取,否则会出错 { flash_open(FLASH_ID0,NULL); //FLASH_Read(FLASH_IAP_CTRL_MAP, (uint8_t*)&g_com_map, (COM_MAP_SIZE<<1));MK8000修改 @@ -100,6 +119,18 @@ } +uint32_t check_tag_id_authorization_list_num(void) +{ + uint32_t count = 0; + + for (uint32_t i = 0; i < AUTHORIZATION_NUM; i++) { + if (tag_id_authorization_list[i] != 0) { + count++; + } + } + + return count; +} void parameter_init_anchor(void) { flash_open(FLASH_ID0,NULL); @@ -143,4 +174,5 @@ } //新增上电获取授权标签列表 flash_read(FLASH_ID0, FLASH_Authorization_MAP, (uint8_t*)&tag_id_authorization_list, sizeof(tag_id_authorization_list));//从flash中拿出来授权表 + tag_id_authorization_list_num=check_tag_id_authorization_list_num();//获取实际有效长度减少轮训开销 } \ No newline at end of file -- Gitblit v1.9.3