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