Demo
3 Mar 2025
Read time: 2 minute(s)
如果要获取 RTC 时间,调用 RT-Thread 的标准时间接口即可,比如,[1]这接口写法对吗?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);
}
}-
[2]需要确认是否需要添加额外的说明信息。如果光放一个 demo 代码,用户能懂吗?所有模块都有这个问题。2024/10/2218:04:35+08:00包含必要的头文件:
确保包含了
time.h和sys/time.h等头文件。#include <stdio.h>: 标准输入输出库。#include <time.h>: 时间处理相关函数。#include <sys/time.h>: 更高精度的时间处理函数。#include "rtthread.h": RT-Thread 核心头文件。
-
定义回调函数:
定义一个回调函数,当 alarm 触发时会调用这个函数。test_alarm_callback: 当 alarm 触发时会被调用的回调函数。在上述 demo 代码中,该函数只是打印一条信息。
-
实现命令函数:
实现一个命令函数,用于解析输入参数并设置 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。
