RT_Thread 调试笔记:时间相关,时钟管理函数,延时,定时器、 毫秒转换为时分秒 等

news/2024/11/20 19:45:20/

说明:记录日常使用 RT_Thread 开发时做的笔记。

持续更新中,欢迎收藏。

1. 延时函数

1. us延时函数

rt_hw_us_delay(rt_uint32_t us);//输如数据是us
rt_hw_us_delay(200);//输入数据是us

2. ms延时函数

rt_thread_mdelay(1000);//输入数据是ms

2. 定时器函数

官网资料:https://www.rt-thread.org/document/site/programming-manual/timer/timer/#_14

/* 定时器的控制块 */
static struct rt_timer timer1;
static int cnt = 0;/* 定时器 1 超时函数 */
static void timeout1(void* parameter)
{rt_kprintf("定时器触发  第  %d 次\n",cnt);/* 运行 10 次 */if (cnt++>= 9){rt_timer_stop(&timer1); /*关闭定时器*/}
}int timer_static_sample(void)
{/* 初始化定时器 */rt_timer_init(&timer1, "timer1",  /* 定时器名字是 timer1 */timeout1, /* 超时时回调的处理函数 */RT_NULL, /* 超时函数的入口参数 */1000, /* 定时长度,以 OS Tick 为单位,即 10 个 OS Tick */RT_TIMER_FLAG_PERIODIC|RT_TIMER_FLAG_SOFT_TIMER ); /* 周期性定时器|软件定时器 *//* 启动定时器 */rt_timer_start(&timer1);return 0;
}
INIT_APP_EXPORT(timer_static_sample);/*以下是其他应用记录:在运行过程中根据需求变更定时器时间*/ 
uint32_t timeout;                  
rt_timer_control(&uvled_off_time, RT_TIMER_CTRL_SET_TIME, &timeout);/* 20210924 新增:设置定时器时间 */
rt_timer_start(&uvled_off_time); /* 启动定时器 */

3. 获取时钟节拍 rt_tick_t rt_tick_get(void);

        由于全局变量 rt_tick 在每经过一个时钟节拍时,值就会加 1,通过调用 rt_tick_get 会返回当前 rt_tick 的值,即可以获取到当前的时钟节拍值。

        此接口可用于记录系统的运行时间长短,或者测量某任务运行的时间。接口函数如下:

rt_tick_t rt_tick_get(void);

下表描述了 rt_tick_get() 函数的返回值:

返回

描述

rt_tick

当前时钟节拍值

1.应用范例

rt_tick_t start_time = 0;
start_time = rt_tick_get();

2. 毫秒转换为时分秒

uint32_t sys_time,sys_hour,sys_minute,sys_second;sys_time = rt_tick_get();  /* 获取时钟节拍 */
sys_second = sys_time/1000;
sys_hour = sys_second / 3600;          /* 开机运行时间 小时 */
sys_minute = sys_second % 3600 / 60;   /* 开机运行时间 分 */
sys_second = sys_second % 60;          /* 开机运行时间 秒 */
rt_kprintf("> 开机   %d 时  %d 分  %d 秒 \r\n",sys_hour,sys_minute,sys_second);

3. 获取时钟节拍(ST库函数)

HAL_GetTick();
应用:timestamp 时间戳
uint32_t timestamp = HAL_GetTick();

4. 计算 x 毫秒是多少时钟节拍 rt_tick_from_millisecond(timeout)

在用时钟节拍作为定时的场合下应用

rt_tick_from_millisecond(timeout)  这个函数把多少 ms 计算成系统对应的时钟节拍

如下应用案例

rt_tick_t start_time = 0;
start_time = rt_tick_get();
if (rt_tick_get() - start_time > rt_tick_from_millisecond(timeout))
{....
}


http://www.ppmy.cn/news/1295423.html

相关文章

数据库系列MySQL:存储过程

# 创建一个名为ShowStu的存储过程,查询student表的内容 delimiter // create PROCEDURE ShowStu() begin select * from student; end// delimiter ;call ShowStu();# 存储过程的参数 1. IN输入参数 表示调用者向过程传入值(传入值可以是字面量或变量&…

docker部署mysql主从复制篇

环境准备:docker服务安装,mysql镜像 配置文件方式:可以挂载目录,也可以写好配置文件,利用docker cp 到容器内,这里直接在启动镜像创建容器时候挂载目录方式服务器上配置文件内容(下图标红路径)&#xff1a…

编译原理复习的有用链接

2024年1月7日,考完编译原理,是时候和考试时候的她说再见了,整理一些收藏夹里的链接和思考吧 实验看这里: 编译原理_HNU岳麓山大小姐的博客-CSDN博客 课后习题看这里: 编译原理作业答案github LL1文法复习 [编译原…

【KD】知识蒸馏(knowledge distillation)简单介绍

最近学到了知识蒸馏的相关知识,来简单总结一下૮꒰ ˶• ༝ •˶꒱ა。 知识蒸馏 知识蒸馏,是一种模型压缩的手段。通过训练学生模仿教师的行为,将嵌入在大的教师模型中的知识迁移到小的学生模型。 例如,TinyBERT(Jiao et al.,2…

C语言之详解数组【附三子棋和扫雷游戏实战】

文章目录 一、一维数组的创建和初始化1、数组的创建2、数组的初始化3、一维数组的使用4、 一维数组在内存中的存储 二、二维数组的创建和初始化1、二维数组的创建2、二维数组的初始化3、二维数组的使用4、二维数组在内存中的存储 三、数组越界边界值考虑不当导致越界访问数组大…

智能寻迹避障机器人设计(第一章)

1 绪论 1.1 研究背景及意义 伴随着社会经济的日益发展,汽车价格时续走低,汽车便成了人们出行工具的首先。汽车的使用总量也逐年创新高,因而交通拥堵情况随处可见,撞车事件时常发生,造成的人员伤亡数不胜数。根据不完…

C#,入门教程(10)——常量、变量与命名规则的基础知识

上一篇: C#,入门教程(09)——运算符的基础知识https://blog.csdn.net/beijinghorn/article/details/123908269 C#用于保存计算数据的元素,称为“变量”。 其中一般不改变初值的变量,称为常变量,简称“常量”。 无论…

力扣(leetcode)第459题重复的子字符串(Python)

459.重复的子字符串 题目链接:459.重复的子字符串 给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。 示例 1: 输入: s “abab” 输出: true 解释: 可由子串 “ab” 重复两次构成。 示例 2: 输入: s “aba” 输出: false 示例 …