1. 时间管理

1.1 概述

1.1.1 概念

时间管理以系统时钟为基础。时间管理提供给应用程序所有和时间有关的服务。

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

用户是以秒、毫秒为单位计时,而芯片CPU的计时是以Tick为单位的,当用户需要对系统操作时,例如任务挂起、延时等,输入秒为单位的数值,此时需要时间管理模块对二者进行转换。

Tick与秒之间的对应关系可以配置。

Huawei LiteOS的时间管理模块提供时间转换、统计、延迟功能以满足用户对时间相关需求的实现。

1.1.2 相关概念

  • Cycle

系统最小的计时单位。 Cycle的时长由系统主频决定,系统主频就是每秒钟的Cycle数。

  • Tick

    Tick是操作系统的基本时间单位,对应的时长由系统主频及每秒Tick数决定,由用户配置。

2. 开发指导

2.1 使用场景

用户需要了解当前系统运行的时间以及Tick与秒、毫秒之间的转换关系等。

2.2 功能

Huawei LiteOS系统中的时间管理主要提供以下两种功能:

  • 时间转换:根据主频实现CPU Tick数到毫秒、微秒的转换。
  • 时间统计:获取系统Tick数。
功能分类 接口名 描述
时间转换 LOS_MS2Tick 毫秒转换成Tick
- LOS_Tick2MS Tick转化为毫秒
时间统计 LOS_CyclePerTickGet 每个Tick多少Cycle数
- LOS_TickCountGet 获取当前的Tick数

2.3 时间管理错误码

时间转换存在出错的可能性,需要返回对应的错误码,以便快速定位错误原因。

序 号 定义 实际数值 描述 参考解决方案
1 LOS_ERRNO_SYS_PTR_NULL 0x02000010 入参指针为空 检查入参,传入非空入参
2 LOS_ERRNO_SYS_CLOCK_INVAILD 0x02000011 无效的系统时钟配置 在los_config.h配置有效的时钟
3 LOS_ERRNO_SYS_MAXNUMOFCORES_IS_INVAILD 0x02000012 错误码暂时没有使用 错误码暂时没有使用
4 LOS_ERRNO_SYS_PERIERRCOREID 0x02000013 错误码暂时没有使用 错误码暂时没有使用
5 LOS_ERRNO_SYS_HOOK_IS_FULL 0x02000014 错误码暂时没有使用 错误码暂时没有使用

2.4 开发流程

时间管理的典型开发流程:

  1. 确认配置项LOSCFG_BASE_CORE_TICK_HW_TIME为YES开启状态。

    • 在los_config.h中配置每秒的Tick数LOSCFG_BASE_CORE_TICK_PER_SECOND;
  2. 调用时钟转换接口。
  3. 获取系统Tick数完成时间统计。
    • 通过LOS_TickCountGet获取全局g_ullTickCount。

3. 注意事项

  • 获取系统Tick数需要在系统时钟使能之后。
  • 时间管理不是单独的功能模块,依赖于los_config.h中的OS_SYS_CLOCK和LOSCFG_BASE_CORE_TICK_PER_SECOND两个配置选项。
  • 系统的Tick数在关中断的情况下不进行计数,故系统Tick数不能作为准确时间计算。

4. 编程实例

4.1 实例描述

在下面的例子中,介绍了时间管理的基本方法,包括:

  1. 时间转换:将毫秒数转换为Tick数,或将Tick数转换为毫秒数。
  2. 时间统计和时间延迟:统计每秒的Cycle数、 Tick数和延迟后的Tick数。

4.2 编程示例

前提条件:

  • 配好LOSCFG_BASE_CORE_TICK_PER_SECOND每秒的Tick数。
  • 配好OS_SYS_CLOCK 系统时钟,单位: Hz。

时间转换:

VOID Example_TransformTime(VOID)
{
UINT32 uwMs;
UINT32 uwTick;
uwTick = LOS_MS2Tick(10000);//10000 ms数转换为Tick数
printf("uwTick = %d \n",uwTick);
uwMs= LOS_Tick2MS(100);//100 Tick数转换为ms数
printf("uwMs = %d \n",uwMs);
}

时间统计和时间延迟:

VOID Example_GetTime(VOID)
{
UINT32 uwcyclePerTick;
UINT64 uwTickCount;
uwcyclePerTick = LOS_CyclePerTickGet();//每个Tick多少Cycle数
if(0 != uwcyclePerTick)
{
dprintf("LOS_CyclePerTickGet = %d \n", uwcyclePerTick);
}
uwTickCount = LOS_TickCountGet();//获取Tick数
if(0 != uwTickCount)
{
dprintf("LOS_TickCountGet = %d \n", (UINT32)uwTickCount);
}
LOS_TaskDelay(200);//延迟200 Tick
uwTickCount = LOS_TickCountGet();
if(0 != uwTickCount)
{
dprintf("LOS_TickCountGet after delay = %d \n", (UINT32)uwTickCount);
}
}

4.4 结果验证

编译运行得到的结果为:

时间转换:

tick = 1000
uwMs = 1000

时间统计和时间延迟:

LOS_CyclePerTickGet = 495000
LOS_TickCountGet = 1
LOS_TickCountGet after delay = 201

liteos时间管理(九)的更多相关文章

  1. PMP备考_第六章_项目时间管理

    项目时间管理 前言 项目时间管理是项目管理中最难的一个环节,与个人时间管理类似,团体的效率如果管理不当,是低于个人效率的,为了管理好时间,从预估,执行到反馈均需要严格的分析和处理.如果制定的计划是无法 ...

  2. Google内部邮件:如何进行高效的时间管理能量波动图

    Google内部邮件:如何进行高效的时间管理能量波动图 发布时间: 2015-12-16 22:16:50| 阅读数:462 views 最近,我给团队内部写了一封简单的邮件.主要内容是征询他们,如何 ...

  3. linux 时间管理——概念、注意点(一)【转】

    转自:http://www.cnblogs.com/openix/p/3324243.html 参考:1.http://bbs.eyeler.com/thread-69-1-1.html        ...

  4. μC/OS-Ⅲ系统的时间管理函数和定时器

    一.时间管理函数 μC/OS-Ⅲ系统提供一些列时间管理服务函数: 1.OSTimeDly():任务延时n个时钟节拍. 2.OSTimeDlyHMSM():任务延时指定的时间,采用“时:分:秒:毫秒”方 ...

  5. 时间管理的若干Tips

    时间管理的若干Tips 记下来 再好的记性也不如一支笔与一个本子. 买一支好点的笔于一个好点的本子,让自己有书写的欲望,将todo事项记下来. 小目标 太大太远的目标会使人气馁.通过将大目标分解再分解 ...

  6. 4D时间管理

    时间管理的4D原则   时间矩阵:每个人,每天要做的事情大致分为四类:一类:必须做的,不做会产生不良后果的二类:需要做的,为将来或者今后阶段做准备工作的三类:可以不做,但又不得不做的,例如通过简约形式 ...

  7. 【uTenux实验】时间管理(系统时间/周期性处理/警报处理)

    1.系统时间管理 系统时间管理函数用来对系统时间进行操作,是OS的一个基础性的东西.个人认为,设置系统时间和获取系统时间对OS来说基本是可有可无的. uTenux提供了三个系统时间相关API.分别用于 ...

  8. GTD时间管理---非行动性

    一:行动性和非行动有什么区别? 1:非行动性:指的是收集箱中的信息,是先存储后使用,这些信息平时都处于冬眠状态,只是要用到的时候能够找到它就好了.(偏向于处理生活) 2:行动性: 指的是收集箱中的信息 ...

  9. (笔记)Linux内核学习(八)之定时器和时间管理

    一 内核中的时间观念 内核在硬件的帮助下计算和管理时间.硬件为内核提供一个系统定时器用以计算流逝的时间.系 统定时器以某种频率自行触发,产生时钟中断,进入内核时钟中断处理程序中进行处理. 墙上时间和系 ...

随机推荐

  1. JAVA框架中XML文件

    其实在JAVA开发中servlet配置,映射注入配置等等都可以用xml来配置 在此处的department是实体类的名字,而不是对应的数据库表的名字 数据库表的字段名=#{实体类属性名} 逆向工程生成 ...

  2. Ubuntu16.04 UltraEdit 安装&破解&使用

    (1)下载:登录到官网(http://www.ultraedit.com/downloads/uex.html)选在对应的版本进行下载. (2)安装: (使用命令行方式安装)在本地路径进行安装:sud ...

  3. github 入门教程之 github 访问速度太慢怎么办

    github 是全世界最流行的开源项目托管平台,其代表的开源文化从根本上改变了软件开发的方式. 基本上所有的需求都能从 github 上或多或少找到现成的实现方案,再也不用重头开始造轮子而是自定义轮子 ...

  4. .Net Framework与.Net Core文件系统的差异

    在.Net Fx下,可通过try/catch实例化DirectoryInfo/FileInfo来判断用户输入的路径是否合法,但我把代码拷到 .Net Core 下运行,发现运行结果完全不同 var d ...

  5. Spring框架spring-web模块中的RestTemplate类详解

    RestTemplate类是spring-web模块中进行HTTP访问的REST客户端核心类.RestTemplate请求使用阻塞式IO,适合低并发的应用场景. 1. RestTemplate类提供了 ...

  6. 获取Kafka每个分区最新Offset的几种方法

    目录 脚本方法 Java 程序 参考资料 脚本方法 ./bin/kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list localhos ...

  7. Oracle中TIMESTAMP时间的显示格式

    Oracle中的TIMESTAMP数据类型很多人用的都很少,所以即使最简单的一个查询返回的结果也会搞不清楚到底这个时间是什么时间点. 例如: 27-1月 -08 12.04.35.877000 上午 ...

  8. 记录一个 C# 导出 Excel 的坑

    Ø  简介 其实该文章并没有什么技术含量,只是记录下个人心得.在以后有朋友遇到类似问题,可以借鉴下,或者遇到相同问题时的提供个参考方向. 也算我的一个经历吧,这个问题我花了足足一天多的时间才找到问题, ...

  9. 基于OceanStor Dorado V3存储之数据保护 Hyper 特性

    基于OceanStor Dorado V3存储之数据保护 Hyper 特性 1.1  快照 1.2  HyperCDP 1.3  HyperCopy 1.4  克隆(HyperClone) 1.5   ...

  10. 进程间通信的信道与控制(io机制)

    进程间通信 = 信道 + 控制(状态) + io 信道: 1.流式信道: 2.队列信道: 3.共享内存信道: 控制机制: 数据就绪状态的通知与数据获取机制. 1.信号: 2.循环: 3.io机制