LiteOS系统的软件定时器

OpenHarmony(鸿蒙南向开发)——小型系统内核(LiteOS-A)【时间管理】 软件定时器以Tick为基本计时单位,当用户创建并启动一个软件定时器时,OpenHarmony系统会根据当前系统Tick时间及用户设置的定时间隔确定该定时器的到期Tick时间,并将该定时器控制结构挂入计时全局链表。系统可配置的软件定时器资源个数是指:整个系统可使用的软件定时器资源总个数,而并非是用户可使用的软件定时器资源个数。软件定时器是系统资源,在模块初始化的时候已经分配了一块连续的内存,系统支持的最大定时器个数由los_config.h中的LOSCFG_BASE_CORE_SWTMR_LIMIT宏配置。 阅读详情

在LiteOS系统中的软件定时器是由一个硬件定时器,每隔10ms逐一检查每个软件定时器是否超时,如已超时则执行该软件定时器的处理函数,并重新计时。

软件定时器的主要操作函数:

//创建软件定时器,指定超时执行的函数,定时器类型,函数参数,属性配置
osTimerId_t osTimerNew(osTimerFunc_t func, osTimerType_t type, 
        void *argument, const osTimerAttr_t *attr)

参数:
func参数指定超时后执行的函数,
type参数指定定时器是重复工作(osTimerPeriodic)的还是一次性的(osTimerOnce),
argument参数指定超时函数执行时传递的参数, 
attr参数指定定时的属性配置,一般设为NULL,使用默认配置即可

返回值:
成功返回定时器的ID,通过此ID可以启动或停止定时器

用法:
 void timerFunc(void *arg) //定时器超时函数
 {
    printf("time out\n");
 }

 osTimerId_t timerID = osTimerNew(timerFunc, osTimerPeriodic, NULL, NULL);

 //启动定时器,并指定超时时间.
 osTimerStart(timerID, 100*3); //超时时间为: 300*10ms

通过定时检查按键IO口电平的方式实现按键驱动:


#include <stdio.h>
#include <ohos_init.h> 
#include <hi_io.h>
#include <iot_gpio.h>
#include <iot_errno.h>
#include <unistd.h>
#include <cmsis_os2.h>
#include <hi_timer.h>

#define KEY1_IO     HI_IO_NAME_GPIO_11
#define KEY1_FUNC   HI_IO_FUNC_GPIO_11_GPIO
#define KEY2_IO     HI_IO_NAME_GPIO_12
#define KEY2_FUNC   HI_IO_FUNC_GPIO_12_GPIO

osTimerId_t timerID;//声明定时器ID
int nKey1 = 0, nKey2 = 0; //记录按键按下次数
int fKey1 = 0, fKey2 = 0;//标注按钮是否按下,0表示松手,1表示按下

void scanKey(char *name, int io, int *flag, int *n)
{
    int v;
    //检查KEY
    IoTGpioGetInputVal(io, &v);
    if (v)
    {
        if (*flag)
        {
            printf("%s up:%d\n", name, *n);
            *flag = 0; //表示已松手
        }
    }
    else
    {
        if (!*flag)
        {
            printf("%s down:%d\n", name, (*n)++);       
            *flag = 1; //表示已按下 
        }
    }
}

void timerFunc(void *arg)
{
    scanKey("key1", KEY1_IO, &fKey1, &nKey1);
    scanKey("key2", KEY2_IO, &fKey2, &nKey2);
}

void initKey(int io, int ioFunc)
{
    IoTGpioInit(io);
    hi_io_set_func(io, ioFunc);
    hi_io_set_pull(io, HI_IO_PULL_UP);
    IoTGpioSetDir(io, IOT_GPIO_DIR_IN);
}
void myhello_test()
{
    initKey(KEY1_IO, KEY1_FUNC);
    initKey(KEY2_IO, KEY2_FUNC);    

    //创建定时器,指定超时执行的函数,定时器类型,函数参数,属性配置
    timerID = osTimerNew(timerFunc, osTimerPeriodic, NULL, NULL);
    //启动定时器,100ms扫描
    osTimerStart(timerID, 5);
}

SYS_RUN(myhello_test);

操作系统LiteOS基础了解 Huawei_LiteOS是一款开源的轻量级操作系统,其内核源码下载地址:https://github.com/LITEOS/LiteOS_Kernel或者https://github.com/Huawei/Huawei_LiteOS_Kernel。 主要功能 首先回顾一个问题,什么是操作系统?操作系统是管理系统硬件和软件资源的系统软件,以方便用户使用,需要操作系统的资源包括处理器、存 阅读详情

相关推荐

OpenHarmony(鸿蒙南向开发)——轻量系统内核(LiteOS-M)【时间管理】

系统时钟是由定时器/计数器产生的输出脉冲触发中断产生的,一般定义为整数或长整数。输出脉冲的周期叫做一个“时钟滴答”。系统时钟也称为时标或者Tick。

weixin_44796857的博客 1052

LiteOS 软件定时器

参考: 【野火】物联网操作系统 LiteOS 开发实战指南 Huawei LiteOS | 中文网 7. 软件定时器 7.1 基本概念 7.1.1 概念 软件定时器,是基于系统Tick时钟中断,且由软件来模拟的定时器,当经过设定的Tick时钟计数值后触发用户定义的回调函数(类似硬件的中断服务函数) 定时精度与系统Tick时钟的周期有关 定时器的定时周期,是两次触发回调函数的时间间隔 软件...

xinghunlove123的博客 3349

【LiteOS】小白进阶之系统移植配置解析

LiteOS 配置文件是操作系统移植的核心部分 - los_config.h。 1、配置时钟 系统时钟的配置,需要根据不同的 CPU 以及 CPU 初始化的时钟频率来修改: #define OS_SYS_CLOCK                                   16000000             2、地址配置 extern char __data_end;...

产品线负责人 2137

【翻译CMSIS_RTOS2 API v2】鸿蒙CMSIS-RTOS2接口之定时器管理

RTOS定时器的接口使用或常见问题

hjh_cos 1054

Java农产品质量溯源大数据管理系统源码

产品追溯基于“一物一码”从工厂生产环节至销售阶段,赋予产品唯一的数码,并关联产品名称、批号、生产时间等信息,建立包装关联关系,为后期产品的追溯、营销搭建信息基础。 农产品溯源,从原材料收购、生产、加工质检到包装运输、终端门店销售等环节追溯,可以保证产品质量,监管部门和消费者都可以查询产品信息。对生产进行层层把关、一旦发现问题、立即进行处理、提升产品质量。

xingchen优快云的博客 1804

一文读懂世界模型(World Model):AI的“数字大脑”,通往AGI的核心基石

世界模型正成为AI领域的关键技术,它让AI在虚拟环境中模拟物理世界规律并预测行动后果,从而减少现实试错成本。2018年Ha和Schmidhuber提出的VAE+RNN架构奠定基础,2022年后自监督学习推动快速发展。当前世界模型分为潜空间、生成式、强化学习和对象中心四大流派,已在机器人、自动驾驶、工业仿真等领域落地应用。尽管面临长时序预测误差等挑战,未来将向多模态建模、大模型融合等方向发展,成为实现具身智能和通用人工智能的核心基石。

m0_38116472的博客 805

鸿蒙Hi3861学习六-Huawei LiteOS-M(软件定时器)

函数功能创建一个软件定时器函数原型参数func:超时回调函数type:运行模式0,单次1,周期argument:传给定时器的参数。没有填NULLattr:定时器相关属性。自定义地址的时候会用到。大部分情况用不到,填NULL。返回值NULL:失败其他值:osTimerId_t类型的定时器ID。该ID给其他函数使用实例。

qq_26226375的博客 2802

Fiddler Everywhere保姆级教程:10分钟搞定手机HTTPS抓包(附证书配置避坑指南)

本文提供Fiddler Everywhere移动端HTTPS抓包的保姆级教程,涵盖环境配置、代理设置、证书安装及常见问题排查。重点解析如何正确安装并信任Fiddler根证书以解密HTTPS流量,帮助开发者快速搭建抓包环境,高效分析应用网络行为,提升调试效率。

git9versioner的博客 704

Hi3861 OpenHarmony嵌入式应用入门--LiteOS Timer

LiteOS Timer(定时器)是LiteOS操作系统中的一个重要组件,它提供了一种基于软件模拟的定时器功能,用于满足在硬件定时器数量不足时的定时需求。

andylauren的专栏 1179

智驾域控制器硬件架构:从接口丛林到算力核心的工程解码

本文深入解析了智驾域控制器硬件架构的设计挑战与工程实践。面对复杂的接口丛林,文章详细探讨了如何高效融合摄像头、雷达等多源传感器数据,并构建以多SOC为核心的强大算力平台。同时,文章强调了电源、时钟、散热等最小系统及车规级可靠性设计的关键作用,为工程师提供了从接口驯服到算力核心协同的完整硬件解码指南。

happy2的博客 482

使用CAPL实现DoIP刷写

本文介绍了使用CAPL实现基于DoIP协议的ECU刷写方法,包含完整源码。

qq_56033302的博客 2758

STM32cubeMX配置FreeRTOS----软件定时器

FreeRTOS 探秘之路(目录)下一篇文章为大家介绍 FreeRTOS 里的 空闲任务和钩子函数。

wuyiyu_的博客 2866

WindTerm 安装使用教程

WindTerm是一款Github上开源的 SSH 终端工具,它是完全可以比肩MobaXterm工具的。

m0_69576880的博客 4017

OpenHarmony南向设备开发:轻量系统基础内核通信机制-软件定时器(LiteOS-M)

软件定时器,是基于系统Tick时钟中断且由软件来模拟的定时器........

初一十五的博客 1112

电路设计仿真软件:Mentor Graphics_(1).MentorGraphics电路设计仿真软件概述

菜单栏:包含文件、编辑、视图、工具等菜单。工具栏:提供常用的工具按钮,如打开、保存、仿真等。原理图编辑区:用于绘制电路原理图。元件库:包含各种电路元件,支持拖拽操作。属性面板:显示选中元件的属性,可以进行参数设置。仿真控制区:用于设置仿真参数和控制仿真过程。输出窗口:显示仿真结果和日志信息。打开模型编辑器:点击“工具”菜单,选择“模型编辑器”。选择模型类型:在模型编辑器中选择模型类型,如SPICE模型。输入模型参数:根据需要输入模型的参数,如电阻值、电容值等。保存模型。

kkchenjj的博客 1924

Python 爬虫实战:抓取悦动圈跑步爱好者运动轨迹数据,规划健身路线

通过本次 Python 爬虫实战,我们学习了如何使用 Python 抓取悦动圈跑步爱好者的运动轨迹数据,并基于这些数据进行分析和处理,最终规划出健身路线。在这个过程中,我们掌握了requests、BeautifulSoup、pandas和matplotlib等库的基本使用方法,了解了爬虫的基本原理和流程。希望本文能够帮助你更好地理解和应用 Python 爬虫技术,在数据处理和分析领域取得更多的成果。

u014481728的博客 2361

LiteOS使用不当导致软件定时器无响应问题

软件定时器被错误地删除或释放导致无响应。

狂想家 445

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

HI3861学习笔记(6)——LiteOS(CMSIS-RTOS2)软件定时器

一、简介 软件定时器,是基于系统Tick时钟中断且由软件来模拟的定时器,当经过设定的Tick时钟计数值后会触发用户定义的回调函数。定时精度与系统Tick时钟的周期有关。 硬件定时器受硬件的限制,数量上不足以满足用户的实际需求,因此为了满足用户需求,提供更多的定时器,LiteOS操作系统提供软件定时器功能。 软件定时器扩展了定时器的数量,允许创建更多的定时业务。 软件定时器功能上支持: 静态裁剪:能通过宏关闭软件定时器功能。 软件定时器创建。 软件定时器启动。 软件定时器停止。 软件定时器删除。 软件定时

Leung的博客 3463

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

OpenHarmony - 小型系统内核(LiteOS-A)(二),基础内核,中断及异常处理,进程管理,内存管理,内核通信机制,时间管理,软件定时器,原子操作

中断是指出现需要时,CPU暂停执行当前程序,转而执行新程序的过程。即在程序运行过程中,出现了一个必须由CPU立即处理的事务,此时CPU暂时中止当前程序的执行转而处理这个事务,这个过程就叫做中断。通过中断机制,可以使CPU避免把大量时间耗费在等待、查询外设状态的操作上,大大提高系统实时性以及执行效率。异常处理是操作系统对运行期间发生的异常情况(芯片硬件异常)进行处理的一系列动作,例如虚拟内存缺页异常、打印异常发生时函数的调用栈信息、CPU现场信息、任务的堆栈情况等。

__Benco的博客 1799

Bearpi开发板之HarmonyOS定时器管理

软件定时器基本概念 软件定时器,是基于系统Tick时钟中断且由软件来模拟的定时器,当经过设定的Tick时钟计数值后会触发用户定义的回调函数。定时精度与系统Tick时钟的周期有关。硬件定时器受硬件的限制,数量上不足以满足用户的实际需求,因此为了满足用户需求,提供更多的定时器,LiteOS操作系统提供软件定时器功能。软件定时器扩展了定时器的数量,允许创建更多的定时业务。 软件定时器功能上支持: ⚫ 静态裁剪:能通过宏关闭软件定时器功能。 ⚫ 软件定时器创建。 ⚫ 软件定时器启动。 ⚫ 软件定时器停止。 ⚫ 软

mygod2008ok的专栏 1076

【鸿蒙南向开发】OpenHarmony 轻量系统内核(LiteOS-M)【时间管理】

软件定时器以Tick为基本计时单位,当用户创建并启动一个软件定时器时,OpenHarmony LiteOS-M内核会根据当前系统Tick时间及用户设置的定时间隔确定该定时器的到期Tick时间,并将该定时器控制结构挂入计时全局链表。软件定时器是系统资源,在模块初始化的时候已经分配了一块连续的内存,系统支持的最大定时器个数由los_config.h中的LOSCFG_BASE_CORE_SWTMR_LIMIT宏配置,该值按产品实际需要设定。定时时间短的定时器总是比定时时间长的靠近队列头,满足优先被触发的准则。

adaedwa187545的博客 798

LiteOS基础架构(5)—— Kernel模块–中断、队列、时间管理

中断机制简介 中断是指出现需要时,CPU暂停执行当前程序,转而执行新程序的过程。即在程序运行过程中,系统出现了一个必须由CPU立即处理的事务。此时,CPU暂时中止当前程序的执行转而处理这个事务,这个过程就叫做中断。 LiteOS的中断系统: 中断初始化 中断创建 开/关中断 恢复中断 中断使能 中断屏蔽 Kernel模块–中断运作机制 当中断产生时,处理机将按如下的顺序执行: 保存当前处理机状态信息 载入异常或中断处理函数到PC寄存器 把控制权转交给处理函数并开始执行 当处理函数执行完成时

qq_46344220的博客 1705

鸿蒙OH南向开发 小型系统内核(LiteOS-A)【时间管理】

OpenHarmony系统时间管理与软件定时器开发指南 本文介绍了OpenHarmony LiteOS-A内核的时间管理、软件定时器和原子操作功能。时间管理模块基于系统时钟Tick提供时间转换、统计和延迟服务,可将毫秒与Tick互相转换。软件定时器通过系统Tick模拟硬件定时器,支持单次触发、周期触发和自定义删除模式,需注意回调函数中避免阻塞操作。原子操作模块利用ARMv6的LDREX/STREX指令实现安全的内存访问,提供32/64位数据的读写、加减、比较交换等原子操作接口。开发指南包含配置说明、API接

yx525623的博客 991

【鸿蒙设备开发】OpenHarmony 轻量系统内核(LiteOS-M)【时间管理】

软件定时器以Tick为基本计时单位,当用户创建并启动一个软件定时器时,OpenHarmony LiteOS-M内核会根据当前系统Tick时间及用户设置的定时间隔确定该定时器的到期Tick时间,并将该定时器控制结构挂入计时全局链表。软件定时器是系统资源,在模块初始化的时候已经分配了一块连续的内存,系统支持的最大定时器个数由los_config.h中的LOSCFG_BASE_CORE_SWTMR_LIMIT宏配置,该值按产品实际需要设定。定时时间短的定时器总是比定时时间长的靠近队列头,满足优先被触发的准则。

achenbusi的博客 947

【鸿蒙设备开发】OpenHarmony 小型系统内核(LiteOS-A)【时间管理】

软件定时器以Tick为基本计时单位,当用户创建并启动一个软件定时器时,OpenHarmony系统会根据当前系统Tick时间及用户设置的定时间隔确定该定时器的到期Tick时间,并将该定时器控制结构挂入计时全局链表。系统可配置的软件定时器资源个数是指:整个系统可使用的软件定时器资源总个数,而并非是用户可使用的软件定时器资源个数。软件定时器是系统资源,在模块初始化的时候已经分配了一块连续的内存,系统支持的最大定时器个数由los_config.h中的LOSCFG_BASE_CORE_SWTMR_LIMIT宏配置。

achenbusi的博客 698
上一篇: LiteOS GPIO中断处理
下一篇: OpenHarmony4.1-轻量与小型系统ubuntu开发环境
jklinux
博客等级 码龄10年 1060粉丝 276原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值