N32L406 移植MultiTimer教程 mdk5

server/2024/9/20 3:57:51/ 标签: MultiTimer, 移植, mdk

MultiTimer_0">MultiTimer

首先感谢开源作者

开源地址;

github.com https://github.com/0x1abin/MultiTimer

简介

MultiTimer 是一个软件定时器扩展模块,可无限扩展你所需的定时器任务,取代传统的标志位判断方式, 更优雅更便捷地管理程序的时间触发时序。

移植方法

  1. 配置系统时间基准接口,安装定时器驱动
uint64_t platform_ticks_get_interface(void) {return get_sys_tick();
}multi_timer_install_ticks(platform_ticks_get_interface);
  1. 实例化一个定时器对象;
multi_timer_t g_timer1_;
  1. 设置定时时间,超时回调处理函数, 用户上下指针,启动定时器;
void fun_multi_timer_callback(multi_timer_t* timer, void* user_data)
{//添加这一行代码,定时器就是一个周期定时器multi_timer_start(&g_timer1_, 1000, fun_multi_timer_callback , NULL);
}multi_timer_start(&g_timer1_, 1000, fun_multi_timer_callback , NULL);
  1. 在主循环调用定时器后台处理函数
int main(int argc, char *argv[])
{while (1) {multi_timer_yield();}
}

功能限制

1.定时器的时钟频率直接影响定时器的精确度,尽可能采用1ms/5ms/10ms这几个精度较高的tick;

2.定时器的回调函数内不应执行耗时操作,否则可能因占用过长的时间,导致其他定时器无法正常超时;

3.由于定时器的回调函数是在 multi_timer_yield 内执行的,需要注意栈空间的使用不能过大,否则可能会导致栈溢出

移植步骤

0.复制代码值工程目录middle下

在这里插入图片描述

1.添加代码

在这里插入图片描述

2.添加头文件

…\middle\multi_timer

在这里插入图片描述

3.设置获取系统的时间戳回调

  //配置一个时间戳给MutiTimermulti_timer_install_ticks(get_sys_tick);

4.创建一个定时器

static multi_timer_t g_timer1_;

5.调用multi_timer_yield

这里使用了一个线程来调用multi_timer_yield,这样就提高了实时性

void fun_multi_timer_callback(multi_timer_t* timer, void* user_data)
{led_on_blink(OUT_LED0);//添加这一行代码,定时器就是一个周期定时器multi_timer_start(&g_timer1_, 1000, fun_multi_timer_callback , NULL);
}static  void  AppTaskStart (void *p_arg)
{multi_timer_start(&g_timer1_, 1000, fun_multi_timer_callback , NULL);while (1) {vTaskDelay(5/portTICK_RATE_MS);//5ms调用一次multi_timer_yield();}
}

1.如果是主函数内部调用multi_timer_yield可以执行一些稍微有点耗时操作的代码,但是可能因占用过长的时间,导致其他定时器无法正常超时

2.硬件实施期中断中调用multi_timer_yield函数,定时器的回调函数内不应执行耗时操作,否则可能因占用过长的时间,导致其他定时器无法正常超时;

3.实现线程的方式(线程优先级降低),基本不用考虑耗时问题,至少不会影响到其他线程


http://www.ppmy.cn/server/90892.html

相关文章

Linux安装与配置

下载VMware 首先我们需要下载一个叫VMware的软件: 进入官方下载,地址:https://www.vmware.com/cn/products/workstation-pro/workstation-pro-evaluation.html选择与自己电脑版本适配的VMware版本【 输入许可证密钥 MC60H-DWHD5-H80U9-6V85…

MySQL --- 表的操作

在对表进行操作时,需要先选定操作的表所在的数据库,即先执行 use 数据库名; 一、创建表 create table 表名( field1 datatype, field2 datatype, field3 datatype ) character set 字符集 collate 校验规则 engine 存储引擎 ; 说明&#xff1a…

【BUG】已解决:No Python at ‘C:Users…Python Python39python. exe’

No Python at ‘C:Users…Python Python39python. exe’ 目录 No Python at ‘C:Users…Python Python39python. exe’ 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰,211科班…

IT运维必备神器!PsShutdown,定时关机重启一键搞定!

嘿,各位技术小能手们,小江湖今天要给大家安利一个宝贝——PsShutdown!这可不是一般的关机小工具哦;当你坐在电脑前,手指轻轻敲几下键盘,就能实现定时任务,无论是关机、重启,还是注销…

【BUG】已解决:You are using pip version 10.0.1, however version 21.3.1 is available.

You are using pip version 10.0.1, however version 21.3.1 is available. 目录 You are using pip version 10.0.1, however version 21.3.1 is available. 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#…

Java泛型的介绍和基本使用

什么是泛型 ​ 泛型就是将类型参数化,比如定义了一个栈,你必须在定义之前声明这个栈中存放的数据的类型,是int也好是double或者其他的引用数据类型也好,定义好了之后这个栈就无法用来存放其他类型的数据。如果这时候我们想要使用这…

leetcode面试题17.最大子矩阵

sooooooo long没刷题了,汗颜 题目链接:leetcode面试题17 1.题目 给定一个正整数、负整数和 0 组成的 N M 矩阵,编写代码找出元素总和最大的子矩阵。 返回一个数组 [r1, c1, r2, c2],其中 r1, c1 分别代表子矩阵左上角的行号和…

MyBatisPlus框架会自动把动态sql里查询的表中的字段brandCode转换为brand_code,导致报错

场景:外部系统提供的视图,数据库表goods的品牌编码字段名是brandCode,没有下划线不符合命名规范。如果在动态sql里直接写 brandCode,那就会报错:org.postgresql.util.PSQLException: 错误: 字段 "brand_code"…

ipsec VPN设备在边界情况

目录 ipsec VPN设备在边界情况 基础配置 AR1 AR2 AR3 PC 边界路由器通测试 IPSEC VPN配置 1.抓流量 AR1 AR3 2.配置IKE的安全提议(五元组) AR1 AR3 3.配置IKE对等体 AR1 AR2 4.配置IPSEC安全提议 AR1 AR3 5.配置IPSEC的安全策略 AR…

【零基础必看的前端教程】——JavaScript(八)函数

欢迎大家打开前端的新篇章——JavaScript,JavaScript与HTML、CSS合称为前端三大件,JavaScript是前端的重中之重,小洪将继续以零基础视角,带你循序渐进学习前端知识,一看就懂,小白也能转行做前端&#xff01…

go语言day17 通道channel

Golang-100-Days/Day16-20(Go语言基础进阶)/day18_channel通道.md at master rubyhan1314/Golang-100-Days (github.com) go语言day09 通道 协程的死锁-CSDN博客 channel for range 循环通道对象 单向通道 单项通道常用于函数参数,只是用来限定在函数中只能进行通道…

师资培训丨AIGC 技术与大模型应用开发实战线下广州班莅临泰迪智能科技参观调研

7月23日,2024年第二期全国数字人才技能提升师资培训班——AIGC 技术与大模型应用开发实战线下广州班莅临广东泰迪智能科技股份有限公司产教融合实训基地参观调研,来自全国各地三十多名高校教师参与本次活动。泰迪智能科技董事长张良均、校企合作经理吴桂…

江华 城市旅游综合体的空调分户计费系统

随着城市化的不断发展,商业综合体已成为城市中不可或缺的一部分。然而,商业综合体的中央空调系统管理一直是一个备受关注的问题。如何实现集中控制和分户计费成为了业主和管理方共同关心的话题。 中央空调系统在商业综合体中起着至关重要的作用&#xff…

Python 和 Boto3 生成 Amazon S3 对象的 HTTPS URL

在使用 Amazon S3 存储服务时,我们经常需要获取存储桶中对象的 HTTPS URL。这篇博文将详细介绍如何使用 Python 和 Boto3 库来实现这一功能。 背景 Amazon S3(Simple Storage Service)是一种广泛使用的云存储服务。在许多场景中,我们需要获取 S3 存储桶中对象的公开访问 …

EXCEL初级入门--(第五章 数据透视表进阶学习)-中

文章目录 (十) 计算父类汇总百分比父类汇总百分比 (十一) 计算排名排序排名排序 (十二) 透视表字段计算项透视表字段 (十三) 区间汇总动态透视图设计区间汇总动态透视图设计 (十四) 数据二维转一维数据二维转一维 (十五) 多重合并计算透视多重合并计算透视 (十六) 切片器多表联…

ubuntu离线下载安装包内网安装

1.本地搭建环境和服务器的环境一样了 然后进入目录清空下载的包 cd /var/cache/apt/archives/ #进入目录apt clean # 清空缓存目录,可以看到里面的包没有了 2.下载 你要安装的包 单独下 # 例如使用 apt 下载 net-tools安装包 sudo apt down…

【第一天】计算机网络 TCP/IP模型和OSI模型,从输入URL到页面显示发生了什么

TCP/IP模型和OSI模型 这两个模型属于计算机网络的体系结构。 OSI模型是七层模型,从上到下包括: 应用层,表示层,会话层,传输层,网络层,数据链路层,物理层 TCP/IP模型是四层模型&…

PointCLIP: Point Cloud Understanding by CLIP

Abstract 近年来,基于对比视觉语言预训练(CLIP)的零镜头和少镜头学习在二维视觉识别中表现出了令人鼓舞的效果,该方法在开放词汇设置下学习图像与相应文本的匹配。然而,通过大规模二维图像-文本对预训练的CLIP是否可以推广到三维识别&#x…

Unity和WebGL交互-2024/7/30

进入项目 1 新建一个.jslib的文件 2 放到项目内Plugins文件夹下 3 可以用vscode之类的编译器打开这个文件 编写内容 mergeInto(LibraryManager.library, {// 方法名必须和c#中的相同// 有参数 需要用UTF8ToString()OnInitSDK:function(str) {window.OnIn…

基于PaddleClas的人物年龄分类项目

目录 一、任务概述 二、算法研发 2.1 下载数据集 2.2 数据集预处理 2.3 安装PaddleClas套件 2.4 算法训练 2.5 静态图导出 2.6 静态图推理 三、小结 一、任务概述 最近遇到个需求,需要将图像中的人物区分为成人和小孩,这是一个典型的二分类问题…