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

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.  错误处理: ◦ 当无可用定时器资源时,函数会立即返回错误码 ◦ 上层应用需要检查返回值以处理错误情况

http://www.xdnf.cn/news/5166.html

相关文章:

  • 电子电器架构 --- 新能源高压上下电那点事一文通
  • 浅谈装饰模式
  • 旅游推荐数据分析可视化系统算法
  • 数据结构中的栈与队列:原理、实现与应用
  • C++学习-入门到精通-【6】指针
  • 【AI智能推荐系统】第七篇:跨领域推荐系统的技术突破与应用场景
  • [RoarCTF 2019]Easy Calc1
  • 【许可证】Open Source Licenses
  • 异地多活单元化架构下的微服务体系
  • 某某文KU下载工具,请低调再低调使用!
  • Hadoop 2.x设计理念解析
  • 【大模型】使用 LLaMA-Factory 进行大模型微调:从入门到精通
  • AI 驱动数据库交互技术路线详解:角色、提示词工程与输入输出分析
  • Linux——Mysql索引和事务
  • 【验证码】⭐️集成图形验证码实现安全校验
  • Linux进程管理
  • journalctl使用
  • 网络地址转换之SNAT和DNAT
  • 《自动驾驶封闭测试场地建设技术要求》 GB/T 43119-2023——解读
  • Web3 学习全流程攻略
  • 用AI写简历是否可行?
  • MacOS 用brew 安装、配置、启动Redis
  • 低成本自动化改造技术锚点深度解析
  • L48.【LeetCode题解】904. 水果成篮
  • 《 指针变量的创建:初探内存世界的钥匙》
  • 【技巧】如何把win10 wsl的安装目录从c盘迁移到d盘
  • 【Gradio】helloworld程序
  • 嵌入式开发学习(第二阶段 C语言基础)
  • 随笔-近况
  • 插槽、生命周期