Edit online

Demo

3 Mar 2025
Read time: 2 minute(s)

如果要获取 RTC 时间,调用 RT-Thread 的标准时间接口即可,比如,[1]yan.wang这接口写法对吗?2024/10/2217:57:08+08:00- time() - clock_gettime() - gettimeofday()

本 Demo 是 test_alarm 的源码 bsp/examples/test-alarm/test_alarm.c,展示了在 RT-Thread 中,设置一个 oneshot 类型的 alarm 并使用标准时间接口获取当前时间的参考示例:
static void test_alarm_callback(rt_alarm_t alarm, time_t timestamp)
{
    pr_info("Test alarm callback function.\n");
}

static void cmd_test_alarm(int argc, char **argv)
{
    struct rt_alarm_setup setup;
    struct rt_alarm *alarm = RT_NULL;
    u32 timeout = 0;
    time_t now;
    struct tm p_tm;

    if (argc != 2) {
        pr_err("Invalid parameter\n");
        return;
    }
    sscanf((char *)argv[1], "%u", &timeout);

    now = time(NULL) + timeout;
    gmtime_r(&now, &p_tm);

    setup.wktime = p_tm;
    alarm = rt_alarm_create(test_alarm_callback, &setup);
    if (alarm) {
        alarm->flag = RT_ALARM_ONESHOT;
        rt_alarm_start(alarm);
    }
}
  1. [2]yan.wang需要确认是否需要添加额外的说明信息。如果光放一个 demo 代码,用户能懂吗?所有模块都有这个问题。2024/10/2218:04:35+08:00包含必要的头文件

    确保包含了 time.hsys/time.h 等头文件。

    • #include <stdio.h>: 标准输入输出库。
    • #include <time.h>: 时间处理相关函数。
    • #include <sys/time.h>: 更高精度的时间处理函数。
    • #include "rtthread.h": RT-Thread 核心头文件。
  2. 定义回调函数

    定义一个回调函数,当 alarm 触发时会调用这个函数。
    • test_alarm_callback: 当 alarm 触发时会被调用的回调函数。在上述 demo 代码中,该函数只是打印一条信息。
  3. 实现命令函数

    实现一个命令函数,用于解析输入参数并设置 alarm。

    • cmd_test_alarm: 函数的解析输入参数,设置一个 oneshot 类型的 alarm,并在指定时间后触发。
    • sscanf((char *)argv[1], "%u", &timeout): 从命令行参数中读取超时时间(以秒为单位)。
    • now = time(NULL) + timeout: 获取当前时间并加上超时时间。
    • gmtime_r(&now, &p_tm): 将时间转换为 struct tm 结构体。
    • setup.wktime = p_tm: 设置 alarm 的时间。
    • alarm->flag = RT_ALARM_ONESHOT: 将 alarm 设置为 oneshot 类型。
    • rt_alarm_start(alarm): 启动 alarm。
Internal