RT-Thread 15. list_timer与软定时器

1. 代码
void rt_thread_usr1_entry(void *parameter)
{/* set LED2 pin mode to output */rt_pin_mode(LED2_PIN, PIN_MODE_OUTPUT);while (1){rt_pin_write(LED2_PIN, PIN_HIGH);rt_thread_mdelay(2000);rt_pin_write(LED2_PIN, PIN_LOW);rt_thread_mdelay(3000);} 
}int main(void)
{rt_thread_init(&usr1_thread,USR1_THREAD_NAME,rt_thread_usr1_entry,RT_NULL,&usr1_thread_stack[0],sizeof(usr1_thread_stack),RT_USR1_THREAD_PRIO,20);rt_thread_startup(&usr1_thread);/* set LED1 pin mode to output */rt_pin_mode(LED1_PIN, PIN_MODE_OUTPUT);while (1){rt_pin_write(LED1_PIN, PIN_HIGH);rt_thread_mdelay(500);rt_pin_write(LED1_PIN, PIN_LOW);rt_thread_mdelay(600);}
}
2. list_timer结果

在这里插入图片描述

3. 解释
usr1     0x0000012c 0x00000dad activated   one shot

0x0000012c: 300个时钟周期,即处于rt_thread_mdelay(3000);

main     0x00000032 0x00000d17 activated   one shot

0x00000032: 50个时钟周期,即处于rt_thread_mdelay(500);

4.增加软定时器

//usrtimer.c

#include <rtthread.h>/* 定时器的控制块 */
static struct rt_timer timer1;
static struct rt_timer timer2;
static int cnt = 0;/* 定时器 1 超时函数 */
static void timeout1(void* parameter)
{rt_kprintf("periodic timer is timeout\n");/* 运行 10 次 */if (cnt++>= 9){rt_timer_stop(&timer1);}
}/* 定时器 2 超时函数 */
static void timeout2(void* parameter)
{rt_kprintf("one shot timer is timeout\n");
}int timer_static_sample(void)
{/* 初始化定时器 */rt_timer_init(&timer1, "timer1",  /* 定时器名字是 timer1 */timeout1, /* 超时时回调的处理函数 */RT_NULL, /* 超时函数的入口参数 */100, /* 定时长度,以 OS Tick 为单位,即 10 个 OS Tick */RT_TIMER_FLAG_PERIODIC); /* 周期性定时器 */rt_timer_init(&timer2, "timer2",   /* 定时器名字是 timer2 */timeout2, /* 超时时回调的处理函数 */RT_NULL, /* 超时函数的入口参数 */300, /* 定时长度为 30 个 OS Tick */RT_TIMER_FLAG_ONE_SHOT); /* 单次定时器 *//* 启动定时器 */rt_timer_start(&timer1);rt_timer_start(&timer2);return 0;
}
/* 导出到 msh 命令列表中 */
MSH_CMD_EXPORT(timer_static_sample, timer_static sample);
5. MSH命令开启软件定时器
msh > timer_static_sample

timer_static_sample()会执行,timer1和timer2会开始工作。输入list_timer,发现多了timer1、timer2

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/631869.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity URP切换品质和Feature开关的性能问题

现在对我的项目进行安卓端发布&#xff0c;需要切换品质和一些Feature开关。 我是这样做的。 划分品质 首先Renerer分为2个Android和PC&#xff0c;图中其他不用参考。 每个副本的URP Asset分为pc和android&#xff0c;例如图中的 hall和hall_android。 我们可以看到hall用的…

python贪吃蛇游戏

为了实现这个游戏&#xff0c;需要用到Python的pygame模块&#xff0c;它是一个专门用于开发游戏的模块&#xff0c;提供了很多方便的功能&#xff0c;比如窗口、图形、音效、事件处理等。 用pygame来创建一个窗口&#xff0c;设置游戏的背景色&#xff0c;画出蛇和食物&#…

解决Reinitialized existing Git repository

非初始化提交 可能是因为你想重新初始化已存在的Git仓库。这可能是因为你想重置Git仓库的状态&#xff0c;或者想重新开始一个新的Git历史记录。 要解决这个问题&#xff0c;你可以按照以下步骤操作&#xff1a; 确保你在正确的目录下。在命令行中使用cd命令切换到你的Git仓库…

VUE工程化项目--vue组件化

组件化开发 & 根组件 &#xff1a; ① 组件化&#xff1a; 一个页面可以拆分成 一个个组件 &#xff0c;每个组件有着自己独立的 结构、样式、行为 。 好处&#xff1a;便于 维护 &#xff0c;利于 复用 → 提升 开发效率 。 组件分类&#xff1a;普通组件、根组件。 …

智慧灌区解决方案:针对典型灌区水利管理需求

​随着国家对农业水利的重视,各地积极推进智慧灌区建设,以实现对水资源的精准调度和科学化管理。下面我们针对典型灌区水利管理需求,推荐智慧灌区解决方案。 一、方案构成智慧水利解决方案- 智慧水利信息化系统-智慧水利平台-智慧水利公司 - 星创智慧水利 一、方案构成 (一)水…

《设计模式的艺术》笔记 - 代理模式

介绍 代理模式是给某一个对象提供一个代理&#xff0c;并由代理对象控制对原对象的引用。代理模式是一种对象结构型模式。 实现 myclass.h // // Created by yuwp on 2024/1/12. //#ifndef DESIGNPATTERNS_MYCLASS_H #define DESIGNPATTERNS_MYCLASS_H#include <iostream&…

RHEL8 Samba服务器详细配置用户模式

任务&#xff1a; 配置server01为samba服务器&#xff0c;samba服务器的/companydata/sales为共享目录&#xff0c;共享名为sales&#xff0c;里面创建测试文件test_share.tar&#xff0c;创建用户组sales&#xff0c;创建组内用户sale1&#xff0c;要求配置用户模式访问&#…

react umi/max 页签(react-activation)

思路&#xff1a;通过react-activation实现页面缓存&#xff0c;通过umi-plugin-keep-alive将react-activation注入umi框架&#xff0c;封装页签组件最后通过路由的wrappers属性引入页面。 浏览本博客之前先看一下我的博客实现的功能是否满足需求&#xff0c;实现功能&#xf…

【SpringBoot】Bean 是什么?

感兴趣的话&#xff0c;可以看我另外一篇关于 Bean 的文章&#xff1a;【Java基础】Spring 中 Bean 的理解与使用 一、Bean 定义 Bean 作为 Spring 框架面试中不可或缺的概念&#xff0c;其本质上是指代任何被 Spring 加载生成出来的对象。&#xff08;本质上区别于 Java Bea…

MySQL 基于创建时间进行RANGE分区

MySQL是一款广泛使用的关系型数据库。在MySQL中&#xff0c;大量数据场景提高查询效率是非常关键的&#xff0c;所以&#xff0c;对数据表进行分区是一个很好的选择。 在创建分区表之前&#xff0c;需要了解一下MySQL分区的基本概念。MySQL分区可以将一个大表分成多个小表&…

【MySQL】使用 CAST 函数处理 unsigned 相减错误(BIGINT UNSIGNED value is out of range)

力扣题 1、题目地址 2175. 世界排名的变化 2、模拟表 表&#xff1a;TeamPoints Column NameTypeteam_idintnamevarcharpointsint team_id 包含唯一值。这张表的每一行均包含了一支国家队的 ID&#xff0c;它所代表的国家&#xff0c;以及它在全球排名中的得分。没有两支…

Mellanox Cumulus 10GB交换机 - 网卡接口配置成网桥

服务器上有一张网卡KVM虚拟机网桥&#xff0c;模拟出多套虚拟网桥 登陆交换机Mellanox Cumulus 第一步&#xff1a;创建桥 - 名称为bridge sudo brctl addbr bridge 第二步&#xff1a;添加接口至master bridge sudo brctl addif br0 swp17 启动master bridge接口 sudo …

软件需求规格说明书-word

软件需求规格说明书编写规范 1.项目背景 2.项目目标 3.系统架构 4.总体流程 5.名称解释 6.功能模块 软件开发全文档获取&#xff1a;软件项目开发全套文档下载_软件项目文档-CSDN博客

【JavaEE进阶】 图书管理系统开发日记——壹

文章目录 &#x1f332;序言&#x1f334;前端代码的引入&#x1f38b;约定前后端交互接口&#x1f343;后端服务器代码实现&#x1f6a9;UserController.java&#x1f6a9;BookController.java ⭕总结 &#x1f332;序言 该图书管理系统&#xff0c;博主将一步一步进行实现。…

react中如何使用其他字体

找到一个.ttf字体文件放入到assets文件夹中在global.less文件中利用font-face全局注册使用&#xff1a;font-family: "YouSheBiaoTiHei";

Template -- Vue3

Vue3 版本 Node 21.6.0Npm 10.2.4 项目 创建 npm init vite 项目名称vuejsnpm inpm run dev 依赖 npm i element-plus # UI npm i axios # 网络 npm i vue-router4 # 路由 npm i vuexnext # 状态管理npm i sass -D …

Python之可迭代对象、迭代器、生成器

Python可迭代对象&#xff08;Iterable&#xff09; Python中经常使用for来对某个对象进行遍历&#xff0c;此时被遍历的这个对象就是可迭代对象&#xff0c;像常见的list,tuple都是。如果给一个准确的定义的话&#xff0c;就是只要它定义了可以返回一个迭代器的__iter__方法…

鸿蒙HarmonyOS应用开发者认证 题库+答案案

建议用手机和PC两台设备协助&#xff0c;一台考试&#xff0c;一台找答案 1.在Colum和Row容器组件中&#xff0c;justifycontent用于设置子组件在主轴方向上的对齐格式&#xff0c;alignItems用于设置子组件在交叉抽方向上的对齐格式。 正确(True) 2.Video组件可以支持本地视频…

linux开机自启动方法

服务开机自启 docker 开机自启方法 容器没有自启 执行一下 docker update --restartalways NAMES[容器名称]java 服务器开机自启方法 第一种&#xff1a;利用 rc.local 文件完成开机自启&#xff0c;vi /etc/rc.local #!/bin/bash # THIS FILE IS ADDED FOR COMPATIBILITY …

甜蜜而简洁——深入了解Pytest插件pytest-sugar

在日常的软件开发中,测试是确保代码质量的关键步骤之一。然而,对于测试报告的生成和测试结果的可读性,一直以来都是开发者关注的焦点。Pytest插件 pytest-sugar 以其清晰而美观的输出,为我们提供了一种愉悦的测试体验。本文将深入介绍 pytest-sugar 插件的基本用法和实际案…