1# 开发指导<a name="ZH-CN_TOPIC_0000001124066545"></a> 2 3- [接口说明](#section158501652121514) 4- [开发流程](#section783435801510) 5- [编程实例](#section460018317164) 6 - [实例描述](#section127752801718) 7 - [示例代码](#section321653551711) 8 - [结果验证](#section4366193318167) 9 10 11用户需要了解当前系统运行的时间以及Tick与秒、毫秒之间的转换关系时,需要使用到时间管理模块的接口。 12 13## 接口说明<a name="section158501652121514"></a> 14 15OpenHarmony LiteOS-M内核的时间管理提供下面几种功能,接口详细信息可以查看API参考。 16 17**表 1** 时间管理接口 18 19<a name="table14277123518139"></a> 20<table><thead align="left"><tr id="row152771935131315"><th class="cellrowborder" valign="top" width="17.77177717771777%" id="mcps1.2.4.1.1"><p id="p1127733591316"><a name="p1127733591316"></a><a name="p1127733591316"></a>功能分类</p> 21</th> 22<th class="cellrowborder" valign="top" width="23.782378237823785%" id="mcps1.2.4.1.2"><p id="p22771357138"><a name="p22771357138"></a><a name="p22771357138"></a>接口名</p> 23</th> 24<th class="cellrowborder" valign="top" width="58.44584458445845%" id="mcps1.2.4.1.3"><p id="p327714358130"><a name="p327714358130"></a><a name="p327714358130"></a>描述</p> 25</th> 26</tr> 27</thead> 28<tbody><tr id="row1627793517136"><td class="cellrowborder" rowspan="4" valign="top" width="17.77177717771777%" headers="mcps1.2.4.1.1 "><p id="p10525141151410"><a name="p10525141151410"></a><a name="p10525141151410"></a>时间转换</p> 29</td> 30<td class="cellrowborder" valign="top" width="23.782378237823785%" headers="mcps1.2.4.1.2 "><p id="p1027783551315"><a name="p1027783551315"></a><a name="p1027783551315"></a>LOS_MS2Tick</p> 31</td> 32<td class="cellrowborder" valign="top" width="58.44584458445845%" headers="mcps1.2.4.1.3 "><p id="p1717215119159"><a name="p1717215119159"></a><a name="p1717215119159"></a>毫秒转换成Tick</p> 33</td> 34</tr> 35<tr id="row20278035131316"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p148921018154"><a name="p148921018154"></a><a name="p148921018154"></a>LOS_Tick2MS</p> 36</td> 37<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p61721311101517"><a name="p61721311101517"></a><a name="p61721311101517"></a>Tick转化为毫秒</p> 38</td> 39</tr> 40<tr id="row1736713145208"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p13367171492014"><a name="p13367171492014"></a><a name="p13367171492014"></a>OsCpuTick2MS</p> 41</td> 42<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p14367121422016"><a name="p14367121422016"></a><a name="p14367121422016"></a>Cycle数目转化为毫秒,使用2个UINT32类型的数值分别表示结果数值的高、低32位。</p> 43</td> 44</tr> 45<tr id="row19475718122016"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p14475121882012"><a name="p14475121882012"></a><a name="p14475121882012"></a>OsCpuTick2US</p> 46</td> 47<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p26621730152310"><a name="p26621730152310"></a><a name="p26621730152310"></a>Cycle数目转化为微秒,使用2个UINT32类型的数值分别表示结果数值的高、低32位。</p> 48</td> 49</tr> 50<tr id="row327873511316"><td class="cellrowborder" rowspan="3" valign="top" width="17.77177717771777%" headers="mcps1.2.4.1.1 "><p id="p1743134312156"><a name="p1743134312156"></a><a name="p1743134312156"></a>时间统计</p> 51</td> 52<td class="cellrowborder" valign="top" width="23.782378237823785%" headers="mcps1.2.4.1.2 "><p id="p18278435131316"><a name="p18278435131316"></a><a name="p18278435131316"></a>LOS_SysClockGet</p> 53</td> 54<td class="cellrowborder" valign="top" width="58.44584458445845%" headers="mcps1.2.4.1.3 "><p id="p1827813571317"><a name="p1827813571317"></a><a name="p1827813571317"></a>获取系统时钟</p> 55</td> 56</tr> 57<tr id="row1127823541313"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p1927810354132"><a name="p1927810354132"></a><a name="p1927810354132"></a>LOS_TickCountGet</p> 58</td> 59<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p17278163512131"><a name="p17278163512131"></a><a name="p17278163512131"></a>获取自系统启动以来的Tick数</p> 60</td> 61</tr> 62<tr id="row1027814354131"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p1727843510137"><a name="p1727843510137"></a><a name="p1727843510137"></a>LOS_CyclePerTickGet</p> 63</td> 64<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p827819358134"><a name="p827819358134"></a><a name="p827819358134"></a>获取每个Tick多少Cycle数</p> 65</td> 66</tr> 67</tbody> 68</table> 69 70## 开发流程<a name="section783435801510"></a> 71 72时间管理的典型开发流程: 73 741. 根据实际需求,完成板级配置适配,并配置系统主时钟频率OS\_SYS\_CLOCK(单位Hz)和LOSCFG\_BASE\_CORE\_TICK\_PER\_SECOND。OS\_SYS\_CLOCK的默认值基于硬件平台配置。 752. 调用时钟转换/统计接口。 76 77> **说明:** 78>- 时间管理不是单独的功能模块,依赖于OS\_SYS\_CLOCK和LOSCFG\_BASE\_CORE\_TICK\_PER\_SECOND两个配置选项。 79>- 系统的Tick数在关中断的情况下不进行计数,故系统Tick数不能作为准确时间使用。 80>- 配置选项维护在开发板工程的文件target\_config.h。 81 82## 编程实例<a name="section460018317164"></a> 83 84### 实例描述<a name="section127752801718"></a> 85 86在下面的例子中,介绍了时间管理的基本方法,包括: 87 881. 时间转换:将毫秒数转换为Tick数,或将Tick数转换为毫秒数。 892. 时间统计:每Tick的Cycle数、自系统启动以来的Tick数和延迟后的Tick数。 90 91### 示例代码<a name="section321653551711"></a> 92 93前提条件: 94 95- 使用每秒的Tick数LOSCFG\_BASE\_CORE\_TICK\_PER\_SECOND的默认值100。 96- 配好OS\_SYS\_CLOCK系统主时钟频率。 97 98时间转换: 99 100``` 101VOID Example_TransformTime(VOID) 102{ 103 UINT32 ms; 104 UINT32 tick; 105 106 tick = LOS_MS2Tick(10000); // 10000ms转换为tick 107 dprintf("tick = %d \n", tick); 108 ms = LOS_Tick2MS(100); // 100tick转换为ms 109 dprintf("ms = %d \n", ms); 110} 111``` 112 113时间统计和时间延迟: 114 115``` 116VOID Example_GetTime(VOID) 117{ 118 UINT32 cyclePerTick; 119 UINT64 tickCount; 120 121 cyclePerTick = LOS_CyclePerTickGet(); 122 if(0 != cyclePerTick) { 123 dprintf("LOS_CyclePerTickGet = %d \n", cyclePerTick); 124 } 125 126 tickCount = LOS_TickCountGet(); 127 if(0 != tickCount) { 128 dprintf("LOS_TickCountGet = %d \n", (UINT32)tickCount); 129 } 130 131 LOS_TaskDelay(200); 132 tickCount = LOS_TickCountGet(); 133 if(0 != tickCount) { 134 dprintf("LOS_TickCountGet after delay = %d \n", (UINT32)tickCount); 135 } 136} 137``` 138 139### 结果验证<a name="section4366193318167"></a> 140 141编译运行得到的结果为: 142 143时间转换: 144 145``` 146tick = 1000 147ms = 1000 148``` 149 150时间统计和时间延迟: 151 152``` 153LOS_CyclePerTickGet = 495000 154LOS_TickCountGet = 1 155LOS_TickCountGet after delay = 201 156``` 157 158