μC/OS-II---时间管理(os_time.c)

目录

  • 时间管理相关(os_time.c)
    • Task延迟
    • 按时、分、秒、毫秒延时
    • 恢复被延时的Task
    • 返回系统当前的Tick计数值
    • 设置系统的Tick计数值

在这里插入图片描述

时间管理相关(os_time.c)

Task延迟

void  OSTimeDly (INT32U ticks)
{INT8U      y;
#if OS_CRITICAL_METHOD == 3u                     /* Allocate storage for CPU status register           */OS_CPU_SR  cpu_sr = 0u;
#endifif (OSIntNesting > 0u)                       /* See if trying to call from an ISR                  */{return;}if (OSLockNesting > 0u)                      /* See if called with scheduler locked                */{return;}if (ticks > 0u)                              /* 0 means no delay!                                  */{OS_ENTER_CRITICAL();y            =  OSTCBCur->OSTCBY;        /* Delay current task                                 */OSRdyTbl[y] &= (OS_PRIO)~OSTCBCur->OSTCBBitX;if (OSRdyTbl[y] == 0u){OSRdyGrp &= (OS_PRIO)~OSTCBCur->OSTCBBitY;}OSTCBCur->OSTCBDly = ticks;              /* Load ticks in TCB                                  */OS_EXIT_CRITICAL();OS_Sched();                              /* Find next task to run!                             */}
}

按时、分、秒、毫秒延时

#if OS_TIME_DLY_HMSM_EN > 0u
INT8U  OSTimeDlyHMSM (INT8U   hours,INT8U   minutes,INT8U   seconds,INT16U  ms)
{INT32U ticks;if (OSIntNesting > 0u)                       /* See if trying to call from an ISR                  */{return (OS_ERR_TIME_DLY_ISR);}if (OSLockNesting > 0u)                      /* See if called with scheduler locked                */{return (OS_ERR_SCHED_LOCKED);}#if OS_ARG_CHK_EN > 0uif (hours == 0u){if (minutes == 0u){if (seconds == 0u){if (ms == 0u){return (OS_ERR_TIME_ZERO_DLY);}}}}if (minutes > 59u){return (OS_ERR_TIME_INVALID_MINUTES);    /* Validate arguments to be within range              */}if (seconds > 59u){return (OS_ERR_TIME_INVALID_SECONDS);}if (ms > 999u){return (OS_ERR_TIME_INVALID_MS);}#endif/* Compute the total number of clock ticks required.. *//* .. (rounded to the nearest tick)                   */ticks = ((INT32U)hours * 3600uL + (INT32U)minutes * 60uL + (INT32U)seconds) * OS_TICKS_PER_SEC+ OS_TICKS_PER_SEC * ((INT32U)ms + 500uL / OS_TICKS_PER_SEC) / 1000uL;OSTimeDly (ticks);return (OS_ERR_NONE);
}
#endif

恢复被延时的Task

#if OS_TIME_DLY_RESUME_EN > 0u
INT8U  OSTimeDlyResume (INT8U prio)
{OS_TCB    *ptcb;
#if OS_CRITICAL_METHOD == 3u                                   /* Storage for CPU status register      */OS_CPU_SR  cpu_sr = 0u;
#endifif (prio >= OS_LOWEST_PRIO){return (OS_ERR_PRIO_INVALID);}OS_ENTER_CRITICAL();ptcb = OSTCBPrioTbl[prio];                                 /* Make sure that task exist            */if (ptcb == (OS_TCB *)0){OS_EXIT_CRITICAL();return (OS_ERR_TASK_NOT_EXIST);                        /* The task does not exist              */}if (ptcb == OS_TCB_RESERVED){OS_EXIT_CRITICAL();return (OS_ERR_TASK_NOT_EXIST);                        /* The task does not exist              */}if (ptcb->OSTCBDly == 0u)                                  /* See if task is delayed               */{OS_EXIT_CRITICAL();return (OS_ERR_TIME_NOT_DLY);                          /* Indicate that task was not delayed   */}ptcb->OSTCBDly = 0u;                                       /* Clear the time delay                 */if ((ptcb->OSTCBStat & OS_STAT_PEND_ANY) != OS_STAT_RDY){ptcb->OSTCBStat     &= ~OS_STAT_PEND_ANY;              /* Yes, Clear status flag               */ptcb->OSTCBStatPend  =  OS_STAT_PEND_TO;               /* Indicate PEND timeout                */}else{ptcb->OSTCBStatPend  =  OS_STAT_PEND_OK;}if ((ptcb->OSTCBStat & OS_STAT_SUSPEND) == OS_STAT_RDY)    /* Is task suspended?                   */{OSRdyGrp               |= ptcb->OSTCBBitY;             /* No,  Make ready                      */OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;OS_EXIT_CRITICAL();OS_Sched();                                            /* See if this is new highest priority  */}else{OS_EXIT_CRITICAL();                                    /* Task may be suspended                */}return (OS_ERR_NONE);
}
#endif

返回系统当前的Tick计数值

#if OS_TIME_GET_SET_EN > 0u
INT32U  OSTimeGet (void)
{INT32U     ticks;
#if OS_CRITICAL_METHOD == 3u                     /* Allocate storage for CPU status register           */OS_CPU_SR  cpu_sr = 0u;
#endifOS_ENTER_CRITICAL();ticks = OSTime;OS_EXIT_CRITICAL();return (ticks);
}
#endif

设置系统的Tick计数值

#if OS_TIME_GET_SET_EN > 0u
void  OSTimeSet (INT32U ticks)
{
#if OS_CRITICAL_METHOD == 3u                     /* Allocate storage for CPU status register           */OS_CPU_SR  cpu_sr = 0u;
#endifOS_ENTER_CRITICAL();OSTime = ticks;OS_EXIT_CRITICAL();
}
#endif

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

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

相关文章

为什么UI自动化难做?—— 关于Selenium UI自动化的思考

在快速迭代的产品、团队中,UI自动化通常是一件看似美好,实际“鸡肋”(甚至绝大部分连鸡肋都算不上)的工具。原因不外乎以下几点: 1 效果有限 通常只是听说过,就想去搞UI自动化的团队,心里都认…

idea生成代码(一):实现java语言的增删改查功能(基于EasyCode插件)支持自定义模板【非常简单】

idea生成代码(一):实现java语言的增删改查功能(基于EasyCode插件)支持自定义模板【非常简单】 idea生成代码(二):实现java语言的增删改查功能(基于mybatis-plus代码生成器…

矩阵置零00

题目链接 矩阵置零 题目描述 注意点 使用 原地 算法 解答思路 思路是需要存储每一行以及每一列是否有0,因为要尽可能使用更少的空间,且新设置为0的格子不能对后续的判断产生影响,所以要在原有矩阵上存储该信息先用两个参数存储第一行和第…

4、创建第一个鸿蒙应用

一、创建项目 此处以空模板为例来创建一个鸿蒙应用。在创建项目前请保持网页的畅通。 1、在欢迎页面点击“Create Project”。 2、左侧默认为“Application”,在“Template Market”中选择空模板(Empty Ability),点击“Next” 3…

使用 Electron 来替代本地调试线上代理的场景

Cookie Samesite 问题 https://developers.google.com/search/blog/2020/01/get-ready-for-new-samesitenone-secure?hlzh-cnhttps://www.chromium.org/updates/same-site/https://github.com/GoogleChromeLabs/samesite-exampleshttps://releases.electronjs.org/releases/s…

【numpy】数据类型

1、Numpy Python 的扩展库(数学函数库),主要用于数组计算。 N维数组对象ndarray广播功能函数整合C/C/Fortran代码的工具线性代数、傅里叶变换、随机数生成等功能 通常与SciPy(开源算法库和数学工具包)和Matplotlib&a…

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

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

Linux 本地zabbix结合内网穿透工具实现安全远程访问浏览器

前言 Zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。 本地zabbix web管理界面限制在只能局域…

spring-cloud-alibaba-nacos

spring cloud nacos 安装和启动nacos # 解压nacos安装包 # tar -zvxf nacos-server-1.4.1.tar.gz# nacos默认是以集群的模式启动,此处先用单机模式 # cd /usr/local/mysoft/nacos/bin # sh startup.sh -m standalone# nacos 日志 # tail -f /usr/local/mysoft/na…

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

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

吊打Fast Request还免费? 这款插件真心好用!

今天给大家推荐一款IDEA插件:Apipost Helper,比Fast Request更好用并且完全免费!三大亮点功能:写完代码IDEA内一键生成API文档;写完代码IDEA内一键调试,;生成API目录树,双击即可快速…

linux下安装向日葵

https://sunlogin.oray.com/download/linux?typepersonal下载 在文件所在位置的空白处右键(在此处打开终端) 输入命令: sudo dpkg -i 文件名.deb (文件名为下载的deb文件名字)/usr/local/sunlogin/bin/sunlogincl…

应急响应练习1

目录 1. 提交攻击者的IP地址 2. 识别攻击者使用的操作系统 3. 找出攻击者资产收集所使用的平台 4. 提交攻击者目录扫描所使用的工具名称 5. 提交攻击者首次攻击成功的时间,格式:DD /MM/YY:HH:MM:SS 6. 找到攻击者写入的恶意后门文件,提…

身份证照片怎么弄成200k以内?超级好用!

一些网站为了限制大的文件上传,提出了一些大小限制的要求,那么身份证如何弄成200k呢?下面介绍三种方法。 方法一: 使用嗨格式压缩大师 1、在电脑上打开安装好的软件,在首界面中点击“图片压缩”。 2、进入后上传需要…

[工业自动化-11]:西门子S7-15xxx编程 - PLC从站 - 分布式IO从站/从机

目录 一、什么是以分布式IO从站/从机 二、分布式IO从站的意义 三、ET200分布式从站系列 一、什么是以分布式IO从站/从机 在工业自动化领域中,分布式 IO 系统是目前应用最为广泛的一种 I/O 系统,其中分布式 IO 从站是一个重要的组成部分。 分布式 IO …

jupyter lab配置列表清单

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…

第十九章总结:Java绘图

19.1:Java绘图类 19.2:绘制图形 package nineteentn; import java.awt.*; import javax.swing.*;public class DrawCircle extends JFrame {private final int OVAL_WIDTH 80; // 圆形的宽private final int OVAL_HEIGHT 80; // 圆形的高public DrawC…

Mathtype公式自动转Word自带公式

Mathtype公式自动转Word自带公式 前言/word技巧探索过程参考资料(有效与无效)全自动方案/代码/教程 前言/word技巧 word公式 用ALT号可以输入简单latex显示公式;复杂度,需要引入latex包的不行;显示不出来的话按一下en…

kubernetes--pod详解

目录 一、pod简介: 1. Pod基础概念: 2. Kubrenetes集群中Pod的两种使用方式: 3. pod资源中包含的容器: 4. pause容器的两个核心功能: 5. Kubernetes中使用pause容器概念的用意: 二、pod的分类&#xff1…

微软允许OEM对Win10不提供关闭Secure Boot

用户可能将无法在Windows 10电脑上安装其它操作系统了,微软不再要求OEM在UEFI 中提供的“关闭 Secure Boot”的选项。 微软最早是在Designed for Windows 8认证时要求OEM的产品必须支持UEFI Secure Boot。Secure Boot 被设计用来防止恶意程序悄悄潜入到引导进程。问…