From a95c209ade37589fa69990670da2506f5d10cc88 Mon Sep 17 00:00:00 2001 From: chen <15335560115@163.com> Date: 星期日, 22 六月 2025 16:47:29 +0800 Subject: [PATCH] 无感闸机测试可用版本,解决多标签时数组访问越界问题,存入授权表问题,但是多个设备的控制gpio的关断间隔过短,导致频繁开关未解决 --- keil/include/drivers/global_param.c | 38 +++++++++++++++++++++++++++++++++++--- 1 files changed, 35 insertions(+), 3 deletions(-) diff --git a/keil/include/drivers/global_param.c b/keil/include/drivers/global_param.c index c9ab191..682e44d 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) { @@ -49,13 +50,31 @@ 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_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_Authorization_MAP,4*FLASH_SECTOR_SIZE); + flash_write_nbytes(FLASH_ID0, FLASH_Authorization_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] != 0xffffffff) { + 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