• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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>![](../public_sys-resources/icon-note.gif) **说明:**
78>-   时间管理不是单独的功能模块,依赖于OS\_SYS\_CLOCK和LOSCFG\_BASE\_CORE\_TICK\_PER\_SECOND两个配置选项。
79>-   系统的Tick数在关中断的情况下不进行计数,故系统Tick数不能作为准确时间使用。
80>-   配置选项维护在开发板工程的文件target\_config.h81
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