1000毫秒等于多少秒(毫秒和秒的换算)
此账号为华为云开发者社区官方运营账号,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态
本文分享自华为云社区《鸿蒙轻内核M核源码分析系列六 时间管理》,原文作者:zhushy 。
本文会继续分析 Tick 和时间相关的源码,给读者介绍鸿蒙轻内核的时间管理模块。本文中所涉及的源码,以 OpenHarmony LiteOS-M 内核为例,均可以在开源站点https://gitee.com/openharmony/kernel_liteos_m 获取。
时间管理模块以系统时钟为基础,可以分为 2 部分,一部分是 SysTick 中断,为任务调度提供必要的时钟节拍;另外一部分是,给应用程序提供所有和时间有关的服务,如时间转换、统计功能。
系统时钟是由定时器/计数器产生的输出脉冲触发中断产生的,一般定义为整数或长整数。输出脉冲的周期叫做一个"时钟滴答",也称为时标或者 Tick。Tick 是操作系统的基本时间单位,由用户配置的每秒 Tick 数决定。如果用户配置每秒的 Tick 数目为 1000,则 1 个 Tick 等于 1ms 的时长。另外一个计时单位是 Cycle,这是系统最小的计时单位。Cycle 的时长由系统主时钟频率决定,系统主时钟频率就是每秒钟的 Cycle 数,对于 216 MHz 的 CPU,1 秒产生 216000000 个 cycles。
用户以秒、毫秒为单位计时,而操作系统以 Tick 为单位计时,当用户需要对系统进行操作时,例如任务挂起、延时等,此时可以使用时间管理模块对 Tick 和秒/毫秒进行转换。
下面,我们剖析下时间管理模块的源代码,若涉及开发板部分,以开发板工程 targets\cortex-m7_nucleo_f767zi_gcc\为例进行源码分析。1、时间管理初始化和启动
我们先看下时间管理模块的相关配置,然后再剖析如何初始化,如何启动。1.1 时间管理相关的配置
时间管理模块涉及 3 个配置项,系统时钟 OS_SYS_CLOCK、每秒 Tick 数目 LOSCFG_BASE_CORE_TICK_PER_SECOND 两个配置选项,还有宏 LOSCFG_BASE_CORE_TICK_HW_TIME。LOSCFG_BASE_CORE_TICK_HW_TIME 默认关闭,开启时,需要提供定制函数 VOID platform_tick_handler(VOID),在 Tick 中断处理函数中执行定制操作。这些配置项在模板开发板工程目录的文件 target_config.h 中定义,如文件 targets\cortex-m7_nucleo_f767zi_gcc\target_config.h 中定义如下:#define OS_SYS_CLOCK 96000000 #define LOSCFG_BASE_CORE_TICK_PER_SECOND (1000UL) #define LOSCFG_BASE_CORE_TICK_HW_TIME 01.2 时间管理初始化和启动
函数 INT32 main(VOID)会调用 kernel\src\los_init.c 中的函数 UINT32 LOS_Start(VOID)启动系统,该函数会调用启动调度函数 UINT32 HalStartSchedule(OS_TICK_HANDLER handler)。源码如下:LITE_OS_SEC_TEXT_INIT UINT32 LOS_Start(VOID) { return HalStartSchedule(OsTickHandler); }
函数 UINT32 HalTickStart(OS_TICK_HANDLER *handler)定义在 kernel\arch\arm\cortex-m7\gcc\los_context.c,源码如下。其中函数参数为 Tick 中断处理函数 OsTickHandler(),后文会分析该 tick 中断处理函数。⑴处代码继续调用函数进一步调用函数 HalTickStart(handler)来设置 Tick 中断启动。⑵处会调用汇编函数 HalStartToRun 开始运行系统,后续任务调度系列再详细分析该汇编函数。LITE_OS_SEC_TEXT_INIT UINT32 HalStartSchedule(OS_TICK_HANDLER handler) { UINT32 ret; ⑴ ret = HalTickStart(handler); if (ret != LOS_OK) { return ret; } ⑵ HalStartToRun(); return LOS_OK; /* never return */ }
函数 HalTickStart(handler)定义在文件 kernel\arch\arm\cortex-m7\gcc\los_timer.c,源码如下,我们分析下函数的代码实现。⑴处校验下时间管理模块的配置项的合法性。在开启宏 LOSCFG_USE_SYSTEM_DEFINED_INTERRUPT 时,会使用系统定义的中断。会执行⑵处的代码,调用定义在文件 kernel\arch\arm\cortex-m7\gcc\los_interrupt.c 中的函数 OsSetVector()设置中断向量,该函数在中断系列会详细分析。⑶处设置全局变量 g_sysClock 为系统时钟,g_cyclesPerTick 为每 tick 对应的 cycle 数目,g_ullTickCount 初始化为 0,表示系统 tick 中断发生次数。⑷处调用定义在 targets\cortex-m7_nucleo_f767zi_gcc\Drivers\CMSIS\Include\core_cm7.h 文件中的内联函数 uint32_t SysTick_Config(uint32_t ticks),初始化、启动系统定时器 Systick 和中断。WEAK UINT32 HalTickStart(OS_TICK_HANDLER *handler) { UINT32 ret; ⑴ if ((OS_SYS_CLOCK == 0) || (LOSCFG_BASE_CORE_TICK_PER_SECOND == 0) || (LOSCFG_BASE_CORE_TICK_PER_SECOND
闫读什么(佐是什么意思)我国的姓氏文化历史悠久,源远流长,对中华民族产生了深远的影响。成书于北宋初年的传统启蒙读物百家姓,在中国可谓家喻户晓,妇孺皆知,经过增补,里面一共收录了504个姓氏。明朝时吴沉刘仲
鱼腥草怎么吃(鱼腥草下火锅怎么吃)今天跟大家分享农村这种常用来喂猪的鱼腥草,如今却成了人们餐桌上的一道美味佳肴。鱼腥草又名狗心草折耳根狗点耳,是中国药典收录的草药,还是我们南方地区人们的一和偏爱的野菜。它主要产于我
饭否为什么被关闭(声微饭否)现在还能打开饭否,但不少人已经遗忘。王兴,于2005年模仿fackbook创办校内网,后面成功被收购于2007年5月模仿twitter推出饭否网于2010年模仿groupon创办美
刘烨为什么打海岩(海岩简介)最近周一围有些红,因为上了演员的诞生,因为章子怡说到他的时候,一秒变迷妹。就连舒淇,也在微博上为周一围打call!!!周一围的妻子朱丹也是骄傲得不行啊!在微博上po了两张老公的照片
槛怎么读(水槛遣心二首怎么读)请水笔翔飞的图文世界,与您分享旅行大餐,摄影和生活的拼盘,偶尔为一杯情感咖啡。文字水笔翔飞图片除注明外,均来自网络引子人称诗圣的杜甫,诗称诗史的杜甫,活了不足一个甲子的杜甫,死后1
森麦耳机怎么样(森麦对比漫步者)这段时间这雨是没完没了的下,下得我都心思烦忧了。本想去图书馆看书的我,都望而却步了。这可就苦了我们这届的大学生,即将面临开学即毕业的窘况。这不前几天才通知我们要时刻做好上网课的准备
为什么每天做梦(频繁梦到前任是怎么回事)连续两天做的梦自己都觉得是噩梦,明明自己已成家生娃了偏偏梦镜里自己仿佛还是单身但是又有现在这个孩子,梦见自己怀孕了打胎了,有的是前任的偏偏前任都不知道打胎的事情,又有另外一个入不了
猫屎为什么那么臭(怎样去除屋子里猫臭味)相信每位铲屎官都有被猫屎臭醒的经历,这么可爱的小猫咪,拉屎怎么会那么臭呢?但你知道吗,猫咪的祖先们在野外生存的时候,拉的屎可是几乎木有味道的啊!为何生活条件更好的今天,家猫的屎会臭
为什么wifi受限(wifi受限怎么解决办法)Wifi出现黄色感叹号怎么办?经常使用无线wifi上网的朋友们都知道有时候会遇到wifi受限制的情况,这时候怎么弄都连接不上不能使用,经常断网,各种糟心。下面,我们就来看看Win8
感冒为什么头晕(为什么感冒整个人晕晕的)头痛的原因有许多,感冒发烧,血压异常,贫血,头部有障碍,煤气中毒,酒精中毒,便秘,神经疲劳等都会引发头胀痛。如果是身体异常导致的头部胀痛,需要及时治疗才能缓解。生活中难免会有头胀痛
为什么早上刷牙(早上刷牙恶心是什么原因)相信很多人都有这样的体验,那就是每天早上刷牙的时候都有恶心干呕的情况。正常情况下是不会有这种问题发生的,排除是女性怀孕这一可能,就要小心注意啦,有可能是一些疾病在背后作祟。不管怎样
鱼头为什么不能吃(女孩子为什么不能吃鱼头)在我们的饮食结构中,主要分为淀粉类蔬菜类和肉类,其中肉类和水产所占的比例排第三,主要为人体提供蛋白质和维生素,以及部分的矿物质元素,比如和血液息息相关的铁元素,构成骨骼的钙元素等,
眉毛为什么浓(为什么眉毛很浓密)导语不知大家有没有观察过身边人的眉毛,你会发现每个人的眉毛形状长短稀疏都不一样。有的人眉毛非常浓密,甚至两条眉毛都快连到一起,而有的人眉毛则非常稀疏,只有普通人的一半。在古时候,人
办户口需要多久(自己单办户口本需要多久)3月16日,陈先生向记者展示拿到的新户口本。文图半岛全媒体记者孙桂东3月15日,青岛发布了落户新政,大幅放宽了落户限制。3月16日,市南区八大峡派出所就迎来了首批办理落户的群众,仅
奶粉一罐吃多久(婴儿奶粉一罐吃多久)你家娃的配方奶粉喝到几岁?前段时间聊到这个话题,留言区里一些回答蛮让人意外的。左右滑动查看更多不少孩子都六七岁了,还在喝四段配方奶粉???糕妈一直在普及,孩子吃饭营养比较均衡的话,
大便蹲多久(蹲厕所蹲几分钟合适)排便是每个人都要经历的,因此被当做跟呼吸一样自然,殊不知排便也需要有排便的规律,这样才是对健康最为有利的事情,本文就来介绍一下一天的最佳排便时间是多会?人体最佳排便时间1清晨一天当
罗非鱼蒸多久(清蒸罗非鱼是冷水蒸还是热水蒸)今天天气不错,跟小伙伴去河里钓鱼,最后的鱼获还是不错的。我也拿了新鲜的罗非鱼回来,做了一道清蒸罗非鱼,这样蒸出来的罗非鱼鱼肉鲜嫩又入味,真好吃。做法和步骤分享给大家哟1将罗非鱼去鱼