当前位置: 首页 > news >正文

DA14585墨水屏学习

一、do_min_word

void do_min_work(void)
{timer_used_min = app_easy_timer(APP_PERIPHERAL_CTRL_TIMER_DELAY_MINUTES, do_min_work);current_unix_time += time_offset;time_offset = 60;// if (isconnected == 1)// {//     GPIO_SetActive(GPIO_LED_PORT, GPIO_LED_PIN);//     GPIO_SetInactive(GPIO_LED_PORT, GPIO_LED_G_PIN);//     DEV_Delay_ms(5);// }arch_printf("current_unix_time:%d\n", current_unix_time);do_time_show();if (step == 0){// do_img_save();step = 1;display();}// time_refresh_count++;// if ((time_refresh_count >= Time_To_Refresh) && (g_tm.tm_min == 0 && g_tm.tm_hour == 0))// {//     if (step == 0)//     {//         // do_img_save();//         step = 1;//         display();//     }// }// GPIO_SetActive(GPIO_LED_PORT, GPIO_LED_G_PIN);// GPIO_SetInactive(GPIO_LED_PORT, GPIO_LED_PIN);
}

这段代码是一个定时器回调函数,用于每分钟执行一次系统时间更新和显示刷新操作。以下是对代码的详细解释:

void do_min_work(void)
{// 1. 重新设置定时器,确保每分钟执行一次timer_used_min = app_easy_timer(APP_PERIPHERAL_CTRL_TIMER_DELAY_MINUTES, do_min_work);// 2. 时间更新逻辑current_unix_time += time_offset;  // 累加当前时间(秒)time_offset = 60;                  // 重置偏移量为60秒(1分钟)// 3. 调试输出当前时间arch_printf("current_unix_time:%d\n", current_unix_time);// 4. 显示时间do_time_show();// 5. 状态机控制(仅在step=0时执行一次)if (step == 0){step = 1;         // 切换状态display();        // 更新显示内容}
}

其中:APP_PERIPHERAL_CTRL_TIMER_DELAY_MINUTES是一个宏,其定义如下 :

#define APP_PERIPHERAL_CTRL_TIMER_DELAY_MINUTES 6000,这时是否少了一个0,不得而知。

代码关键点解释

  1. 定时器机制

    • 通过app_easy_timer函数设置一个每分钟触发的定时器
    • 每次回调执行时会重新设置定时器,形成循环调用
    • APP_PERIPHERAL_CTRL_TIMER_DELAY_MINUTES应定义为 60000ms(1 分钟)
  2. 时间维护

    • current_unix_time存储当前的 Unix 时间戳(秒)
    • time_offset初始为 60,每次累加后重置,确保每分钟递增 60 秒
    • 这种设计允许系统在无法获取 RTC 时通过软件维护时间
  3. 显示控制

    • do_time_show():更新时间显示
    • display():刷新整个显示内容
    • 使用step变量实现状态机控制,确保某些操作只执行一次
  4. 注释代码分析

    • 被注释的 LED 控制代码表明系统可能通过 LED 指示连接状态
    • do_img_save()可能用于保存屏幕截图或图像数据
    • 时间刷新条件检查(午夜 0 点)被注释,可能用于每日特定操作

二、app_easy_timer函数

timer_hnd app_easy_timer(const uint32_t delay, timer_callback fn)
{// Sanity checksASSERT_ERROR(delay > 0);                  // Delay should not be zeroASSERT_ERROR(delay <= KE_TIMER_DELAY_MAX); // Delay should not be more than maximum allowedtimer_hnd timer_id = set_callback(fn);if (timer_id == EASY_TIMER_INVALID_TIMER){return EASY_TIMER_INVALID_TIMER; //No timers available}// Create timercreate_timer(timer_id, delay);return timer_id;
}

其中timer_hnd定义如下 :typedef uint8_t timer_hnd;

app_easy_timer 函数用于创建一个定时器,在指定的延时后执行回调函数。它提供了参数检查、资源分配和定时器初始化的功能。

timer_hnd app_easy_timer(const uint32_t delay, timer_callback fn)
{// 1. 参数有效性检查ASSERT_ERROR(delay > 0);                  // 延时必须大于0ASSERT_ERROR(delay <= KE_TIMER_DELAY_MAX); // 延时不能超过系统最大限制// 2. 分配定时器资源并注册回调函数timer_hnd timer_id = set_callback(fn);if (timer_id == EASY_TIMER_INVALID_TIMER){return EASY_TIMER_INVALID_TIMER; // 没有可用的定时器资源}// 3. 创建并启动定时器create_timer(timer_id, delay);// 4. 返回定时器句柄供后续操作使用return timer_id;
}

核心功能分析 1.  参数检查: ◦ delay > 0:确保延时时间有效 ◦ delay <= KE_TIMER_DELAY_MAX:防止过大的延时值导致系统异常 ◦ ASSERT_ERROR 通常是断言宏,参数不合法时会触发错误处理   2.  资源分配: ◦ set_callback(fn) 函数: ◦ 分配一个定时器 ID ◦ 将传入的回调函数 fn 与该 ID 关联 ◦ 返回 EASY_TIMER_INVALID_TIMER 表示资源不足     3.  定时器初始化: ◦ create_timer(timer_id, delay) 函数: ◦ 使用分配的 ID 配置硬件 / 软件定时器 ◦ 设置延时值 delay(单位通常为毫秒) ◦ 启动定时器开始倒计时     4.  错误处理: ◦ 当无可用定时器资源时,函数会立即返回错误码 ◦ 上层应用需要检查返回值以处理错误情况

相关文章:

  • LLMs之ChatGPT:《Connecting GitHub to ChatGPT deep research》翻译与解读
  • [学习]RTKLib详解:sbas.c与rtcm.c
  • cursor sign in 网页登录成功,sursor软件里一直登陆不成功没有登陆信息
  • 扫雷革命:矩阵拓扑与安全扩散的数学之美
  • [架构之美]Spring Boot多环境5种方案实现Dev/Test/Prod环境隔离
  • 二、Hive安装部署详细过程
  • 深度学习中的目标检测:从 PR 曲线到 AP
  • 各种音频产品及场景总结
  • 【生存技能】ubuntu 24.04 如何pip install
  • 好用的播放器推荐
  • MySQL索引详解(上)(结构/分类/语法篇)
  • expo多网络请求设定。
  • Pycharm(二十)张量的运算与操作
  • 泛型加持的策略模式:打造高扩展的通用策略工具类
  • 流动式起重机Q2考试的实操部分,重点复习内容包括哪些方面?
  • 嵌入式学习--江协51单片机day4
  • 【Linux系统】从零开始构建简易 Shell:从输入处理到命令执行的深度剖析
  • C 语言数据结构基石:一维数组的定义、访问与使用详解
  • 【基于 LangChain 的异步天气查询1】异步调用 Open-Meteo API 查询该城市当前气温
  • 如何借助AI模拟复杂业务流程数据?
  • 报告:4月份新增发行的1763亿元专项债中,投向房地产相关领域约717亿元
  • 王受文已任全国工商联党组成员
  • 招行:拟出资150亿元全资发起设立金融资产投资公司
  • 央行:5月8日起,下调个人住房公积金贷款利率0.25个百分点
  • 预告:央行等部门将发声,介绍“一揽子金融政策支持稳市场稳预期”有关情况
  • 新华每日电讯:上海“绿色大民生”撑起“春日大经济”