μC/OS-II---计时器管理2(os_tmr.c)

目录

    • 获取计时器的名字
    • 获取计时器到期前剩余的时间
    • 查看计时器的状态

在这里插入图片描述

  • 计时器是倒计时器,当计数器达到零时执行某个动作。用户通过回调函数提供这个动作。回调函数是用户声明的函数,在计时器到期时被调用。在回调函数中绝对不能进行阻塞调用(例如调用OSTimeDly()、OSTimeDlyHMSM()…或任何导致计时器任务阻塞或被删除的操作),这一点非常重要。

获取计时器的名字

#if OS_TMR_EN > 0u && OS_TMR_CFG_NAME_EN > 0u
INT8U  OSTmrNameGet (OS_TMR   *ptmr,INT8U   **pdest,INT8U    *perr)
{INT8U  len;
#ifdef OS_SAFETY_CRITICALif (perr == (INT8U *)0){OS_SAFETY_CRITICAL_EXCEPTION();return (0u);}#endif
#if OS_ARG_CHK_EN > 0uif (pdest == (INT8U **)0){*perr = OS_ERR_TMR_INVALID_DEST;return (0u);}if (ptmr == (OS_TMR *)0){*perr = OS_ERR_TMR_INVALID;return (0u);}#endifif (ptmr->OSTmrType != OS_TMR_TYPE)                /* Validate timer structure                                    */{*perr = OS_ERR_TMR_INVALID_TYPE;return (0u);}if (OSIntNesting > 0u)                             /* See if trying to call from an ISR                           */{*perr = OS_ERR_NAME_GET_ISR;return (0u);}OSSchedLock();switch (ptmr->OSTmrState){case OS_TMR_STATE_RUNNING:case OS_TMR_STATE_STOPPED:case OS_TMR_STATE_COMPLETED:*pdest = ptmr->OSTmrName;len    = OS_StrLen (*pdest);OSSchedUnlock();*perr = OS_ERR_NONE;return (len);case OS_TMR_STATE_UNUSED:                      /* Timer is not allocated                                      */OSSchedUnlock();*perr = OS_ERR_TMR_INACTIVE;return (0u);default:OSSchedUnlock();*perr = OS_ERR_TMR_INVALID_STATE;return (0u);}
}
#endif

获取计时器到期前剩余的时间

#if OS_TMR_EN > 0u
INT32U  OSTmrRemainGet (OS_TMR  *ptmr,INT8U   *perr)
{INT32U  remain;
#ifdef OS_SAFETY_CRITICALif (perr == (INT8U *)0){OS_SAFETY_CRITICAL_EXCEPTION();return (0u);}#endif
#if OS_ARG_CHK_EN > 0uif (ptmr == (OS_TMR *)0){*perr = OS_ERR_TMR_INVALID;return (0u);}#endifif (ptmr->OSTmrType != OS_TMR_TYPE)                /* Validate timer structure                                    */{*perr = OS_ERR_TMR_INVALID_TYPE;return (0u);}if (OSIntNesting > 0u)                             /* See if trying to call from an ISR                           */{*perr = OS_ERR_TMR_ISR;return (0u);}OSSchedLock();switch (ptmr->OSTmrState){case OS_TMR_STATE_RUNNING:remain = ptmr->OSTmrMatch - OSTmrTime;    /* Determine how much time is left to timeout                  */OSSchedUnlock();*perr  = OS_ERR_NONE;return (remain);case OS_TMR_STATE_STOPPED:                     /* It's assumed that the timer has not started yet             */switch (ptmr->OSTmrOpt){case OS_TMR_OPT_PERIODIC:if (ptmr->OSTmrDly == 0u){remain = ptmr->OSTmrPeriod;}else{remain = ptmr->OSTmrDly;}OSSchedUnlock();*perr  = OS_ERR_NONE;break;case OS_TMR_OPT_ONE_SHOT:default:remain = ptmr->OSTmrDly;OSSchedUnlock();*perr  = OS_ERR_NONE;break;}return (remain);case OS_TMR_STATE_COMPLETED:                   /* Only ONE-SHOT that timed out can be in this state           */OSSchedUnlock();*perr = OS_ERR_NONE;return (0u);case OS_TMR_STATE_UNUSED:OSSchedUnlock();*perr = OS_ERR_TMR_INACTIVE;return (0u);default:OSSchedUnlock();*perr = OS_ERR_TMR_INVALID_STATE;return (0u);}
}
#endif

查看计时器的状态

#if OS_TMR_EN > 0u
INT8U  OSTmrStateGet (OS_TMR  *ptmr,INT8U   *perr)
{INT8U  state;
#ifdef OS_SAFETY_CRITICALif (perr == (INT8U *)0){OS_SAFETY_CRITICAL_EXCEPTION();return (0u);}#endif
#if OS_ARG_CHK_EN > 0uif (ptmr == (OS_TMR *)0){*perr = OS_ERR_TMR_INVALID;return (0u);}#endifif (ptmr->OSTmrType != OS_TMR_TYPE)                /* Validate timer structure                                    */{*perr = OS_ERR_TMR_INVALID_TYPE;return (0u);}if (OSIntNesting > 0u)                             /* See if trying to call from an ISR                           */{*perr = OS_ERR_TMR_ISR;return (0u);}OSSchedLock();state = ptmr->OSTmrState;switch (state){case OS_TMR_STATE_UNUSED:case OS_TMR_STATE_STOPPED:case OS_TMR_STATE_COMPLETED:case OS_TMR_STATE_RUNNING:*perr = OS_ERR_NONE;break;default:*perr = OS_ERR_TMR_INVALID_STATE;break;}OSSchedUnlock();return (state);
}
#endif

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

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

相关文章

常用hivesql记录

前言 hivesql中很多常用的功能,过段时间没有使用就容易忘记,需要去网上搜索,这里总结一下,省的以后还去去搜,供自己以后参考。 查看分区的行 show rowcount extended table_name;创建二级分区表 set hive.default.…

《008.SpringBoot之教务系统》【界面简洁功能简单】

《008.SpringBoot之教务系统》【界面简洁功能简单】 项目简介 [1]本系统涉及到的技术主要如下: 推荐环境配置:DEA jdk1.8 Maven MySQL 前后端分离; 后台:SpringBootMybatis; 前台:JSPBootStrap; [2]功能模块展示: 管…

[文件读取]coldfusion 文件读取 (CVE-2010-2861)

1.1漏洞描述 漏洞编号CVE-2010-2861漏洞类型文件读取漏洞等级⭐⭐漏洞环境VULFOCUS攻击方式 描述: Adobe ColdFusion是美国Adobe公司的一款动态Web服务器产品,其运行的CFML(ColdFusion Markup Language)是针对Web应用的一种程序设计语言。 A…

Lua的Resty-Request库写的一个简单爬虫

文章目录 准备工作编写爬虫运行爬虫代码分析拓展功能总结 🎉欢迎来到AIGC人工智能专栏~Lua的Resty-Request库写的一个简单爬虫 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒🍹✨博客主页:IT陈寒的博客🎈该系列文章专栏:AIGC人工智…

c语言数据结构---二叉树非递归输出

#include<stdio.h> #include<stdlib.h> #include<stack> using namespace std; typedef struct node{struct node*lchild;struct node*rchild;char data; }Node,*Bit;Bit creat(){//先序创建 char b; int t; scanf("%c",&b); tgetchar();//吸…

Git分支与Git标签详解

目录 前言 一、Git分支&#xff08;Branch&#xff09; 1.分支的概念 2.分支的常用操作 3.Git 分支管理 二、Git标签&#xff08;Tag&#xff09; 1.标签的概念 2.标签的类型 3.标签的常用操作 4.Git标签管理 前言 在软件开发过程中&#xff0c;版本管理是非常重要的一…

【无标题】通用工作站设计方案:ORI-D3R600服务器-多路PCIe3.0的双CPU通用工作站

ORI-D3R600服务器-多路PCIe3.0的双CPU通用工作站 一、机箱功能和技术指标&#xff1a; 系统 系统型号 ORI-SR630 主板支持 EEB(12*13)/CEB(12*10.5)/ATX(12*9.6)/Micro ATX 前置硬盘 最大支持8个3.5寸(兼容25寸)SATA硬盘 2*2.5(后置) 电源类型 CRPS元余电源&#xff0…

Kalman滤波

文章目录 一、公式推导二、扩展卡尔曼滤波 卡尔曼滤波是一种最优化递归数据处理算法。&#xff08;Optimal Recursive Data Processing Algorithm&#xff09; Kalman滤波是时域滤波&#xff0c;采用状态空间描述系统&#xff0c;运用递推形式是计算简单&#xff0c;数据存储量…

postman调用接口报{“detail“:“Method \“DELETE\“ not allowed.“}错误, 解决记录

项目是python代码开发, urls.py 路由中访问路径代码如下: urlpatterns [path(reportmanagement/<int:pk>/, views.ReportManagementDetail.as_view(), namereport-management-detail),] 对应view视图中代码如下: class ReportManagementDetail(GenericAPIView):"…

μC/OS-II---Task管理2(os_task.c)

目录 改变Task优先级Task挂起Task恢复Task信息获取Task调度器上锁&#xff08;os_core.c&#xff09;Task调度器开锁&#xff08;os_core.c&#xff09; 改变Task优先级 #if OS_TASK_CHANGE_PRIO_EN > 0u INT8U OSTaskChangePrio (INT8U oldprio,INT8U newprio) { #if (…

多商家签到打卡奖励免单霸王餐小程序开发

多商家签到打卡奖励免单霸王餐小程序开发 用户注册和登录&#xff1a;提供用户注册和登录功能&#xff0c;以便用户能够参与签到打卡活动。 商家入驻&#xff1a;商家可申请入驻平台&#xff0c;提交相关资料并等待平台审核&#xff0c;审核通过后即可发布活动和奖励。 签到打…

【SSH】SSH异常处理思路

1.介绍 SSH&#xff08;Secure Shell&#xff09;是一种加密的网络协议&#xff0c;用于安全地远程连接到服务器或其他计算设备。它提供了加密的通信信道&#xff0c;以防止敏感信息被窃听或篡改。SSH支持多种身份验证方法&#xff0c;其中之一是密码身份验证。 密码登录是最常…

.one4-V-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复

导言&#xff1a; 随着科技的不断发展&#xff0c;网络犯罪也在不断进化&#xff0c;.one4-V-XXXXXXXX勒索病毒作为其中的一种威胁&#xff0c;对个人和企业的数据安全构成了巨大的风险。本文将深入介绍.one4-V-XXXXXXXX勒索病毒的特点、详细的数据恢复方法&#xff0c;以及全…

Mysql 8.0 实现分组后获取组内极值算法 broup by

Mysql 8 中无法用低版本的 二次子查询实现&#xff0c;把数据集升序排列后&#xff0c;再外层做group By分组&#xff0c;取出第一条的方式。 因此引入了一个新函数&#xff0c;自动生成行序列&#xff0c;并且行序列按照指定字段分组后再根据自定字段进行排列原理如下 goupb…

相机通用类之LMI激光三角相机(3D),软触发硬触发(飞拍),并输出halcon格式对象

//在此之前可以先浏览我编写的通用上位机类&#xff0c;更方便理解 https://blog.csdn.net/m0_51559565/article/details/134403745最近完成一个关于LMI激光三角&#xff08;3D相机&#xff09;采图的demo&#xff0c;记录并说明用法。 先上代码。 using Lmi3d.GoSdk; using L…

使用FFmpeg转封装为hls(m3u8)流

​ 改造ffmpeg/doc/examples/remuxing.c&#xff0c;支持将输入流转封装为hls协议对应的github地址&#xff1a;GitHub - yagerfgcs/FFmpeg at examples/remuxing_support_hls修改点&#xff1a;增加设置hls头 // example:https://www.ffmpeg.org/ffmpeg-all.html#hls-2 // f…

c语言数据结构---三叉树

#include<stdio.h> #include<stdlib.h> #include<stack> using namespace std; typedef struct node{struct node*lchild;struct node*rchild;struct node*parent;char data; }Node,*Bit;Bit creat(){//先序创建 char b; int t; scanf("%c",&…

(个人实测保熟)记录Tecnomatix Process Simulate 16.1.2官方安装包及授权许可配置教程(Win10环境)

Tecnomatix Process Simulate 16是一款由西门子公司推出的一款工艺仿真解决方案,是虚拟制造仿真领域的领先解决方案,可帮助您数字化制造以及将创新思想和原材料转变为变革性产品的过程。在网上找了一些盗版的安装包&#xff0c;就很离谱。直接提示本"无法打开此安装程序包…

c语言数据结构---十字链表

#include<stdio.h> #include<stdlib.h> typedef struct node{//十字链表 输入三元组返回矩阵 int row,col,val;struct node *down,*right; }JD,*J; typedef struct {J *rhead,*chead;int mu,nu,tu;//行列非0元 }CS; CS creat(CS M){int m,n,t;;int k,j,e;JD *p,*q…