用代码解决下刚刚说的开锁次数记录
时间: 2024-11-22 08:36:53 浏览: 3
在上述代码基础上,为了精确记录每天的开锁次数,你可以添加一些额外的步骤。首先,确保`UnlockLog`结构包含日期字段(例如`unlock_date`)。然后,在保存解锁记录时,同时更新该日期对应的开锁计数。
```c
typedef struct {
uint8_t unlock_type; // 0x00 指纹,0x01 蓝牙
uint32_t unlock_timestamp; // 时间戳
date_t unlock_date; // 日期
} UnlockLog;
// 更新解锁记录时,检查日期是否已经改变
void update_unlock_log_with_date(UnlockLog* log, date_t new_date) {
if (log->unlock_date != new_date) {
// 新的一天开始,清零当天的开锁次数
clear_daily_count(new_date);
log->unlock_date = new_date;
}
// 对相应类型的解锁增加计数
switch (log->unlock_type) {
case 0x00: // 指纹解锁
increment_daily_count(new_date, UNLOCK_TYPE_FINGERPRINT);
break;
case 0x01: // 蓝牙解锁
increment_daily_count(new_date, UNLOCK_TYPE_BLUETOOTH);
break;
// 添加其他解锁类型的分支...
}
}
// 定义日期相关的辅助函数
void clear_daily_count(date_t day) {
daily_counts[day] = 0;
}
void increment_daily_count(date_t day, uint8_t unlock_type) {
daily_counts[day][unlock_type]++;
}
// 每天的日间处理任务
static void process_daily_counts() {
date_t today = get_current_day(); // 获取当前日期
while (daily_counts[today]) { // 遍历当天的解锁记录
UnlockLog log = daily_counts[today].front();
update_unlock_log_with_date(&log, today);
remove_first_record(daily_counts[today]); // 移除已处理的记录
}
save_daily_counts_to_flash(today); // 保存今天的统计到Flash
}
```
这里假设存在一个`date_t`类型表示日期,以及一个`daily_counts`数组,用于存储每天不同类型的开锁次数。`get_current_day()`获取当前日期,`remove_first_record()`移除第一个记录等都是假设的辅助函数。
每天的日间处理任务`process_daily_counts`会检查是否有新的解锁记录需要更新统计,最后将当天的统计结果保存到Flash。
阅读全文