• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 开发指导<a name="ZH-CN_TOPIC_0000001079036450"></a>
2
3-   [接口说明](#section158501652121514)
4-   [开发流程](#section783435801510)
5-   [编程实例](#section460018317164)
6    -   [实例描述](#section51413507517)
7    -   [示例代码](#section17617965523)
8    -   [结果验证](#section1968771515188)
9
10
11## 接口说明<a name="section158501652121514"></a>
12
13**表 1**  功能列表
14
15<a name="table18293928155615"></a>
16<table><thead align="left"><tr id="row129362875613"><th class="cellrowborder" valign="top" width="33.33333333333333%" id="mcps1.2.4.1.1"><p id="p19444103765618"><a name="p19444103765618"></a><a name="p19444103765618"></a>功能分类</p>
17</th>
18<th class="cellrowborder" valign="top" width="33.33333333333333%" id="mcps1.2.4.1.2"><p id="p944473716569"><a name="p944473716569"></a><a name="p944473716569"></a>接口名</p>
19</th>
20<th class="cellrowborder" valign="top" width="33.33333333333333%" id="mcps1.2.4.1.3"><p id="p144445378565"><a name="p144445378565"></a><a name="p144445378565"></a>描述</p>
21</th>
22</tr>
23</thead>
24<tbody><tr id="row1143613475615"><td class="cellrowborder" rowspan="2" valign="top" width="33.33333333333333%" headers="mcps1.2.4.1.1 "><p id="p942993405610"><a name="p942993405610"></a><a name="p942993405610"></a>获取系统CPU占用率</p>
25</td>
26<td class="cellrowborder" valign="top" width="33.33333333333333%" headers="mcps1.2.4.1.2 "><p id="p242973419563"><a name="p242973419563"></a><a name="p242973419563"></a>LOS_SysCpuUsage</p>
27</td>
28<td class="cellrowborder" valign="top" width="33.33333333333333%" headers="mcps1.2.4.1.3 "><p id="p7429163416565"><a name="p7429163416565"></a><a name="p7429163416565"></a>获取当前系统CPU占用率</p>
29</td>
30</tr>
31<tr id="row15436163435611"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p20429183410563"><a name="p20429183410563"></a><a name="p20429183410563"></a>LOS_HistorySysCpuUsage</p>
32</td>
33<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p542953465617"><a name="p542953465617"></a><a name="p542953465617"></a>获取系统历史CPU占用率</p>
34</td>
35</tr>
36<tr id="row143610342562"><td class="cellrowborder" rowspan="3" valign="top" width="33.33333333333333%" headers="mcps1.2.4.1.1 "><p id="p174295347568"><a name="p174295347568"></a><a name="p174295347568"></a>获取任务CPU占用率</p>
37</td>
38<td class="cellrowborder" valign="top" width="33.33333333333333%" headers="mcps1.2.4.1.2 "><p id="p124291734155614"><a name="p124291734155614"></a><a name="p124291734155614"></a>LOS_TaskCpuUsage</p>
39</td>
40<td class="cellrowborder" valign="top" width="33.33333333333333%" headers="mcps1.2.4.1.3 "><p id="p1042963410568"><a name="p1042963410568"></a><a name="p1042963410568"></a>获取指定任务CPU占用率</p>
41</td>
42</tr>
43<tr id="row12436143414561"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p6429834185613"><a name="p6429834185613"></a><a name="p6429834185613"></a>LOS_HistoryTaskCpuUsage</p>
44</td>
45<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p74302034175614"><a name="p74302034175614"></a><a name="p74302034175614"></a>获取指定任务历史CPU占用率</p>
46</td>
47</tr>
48<tr id="row2435834135618"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p843073420563"><a name="p843073420563"></a><a name="p843073420563"></a>LOS_AllCpuUsage</p>
49</td>
50<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p4430134185614"><a name="p4430134185614"></a><a name="p4430134185614"></a>获取所有任务CPU占用率</p>
51</td>
52</tr>
53<tr id="row15435934155618"><td class="cellrowborder" valign="top" width="33.33333333333333%" headers="mcps1.2.4.1.1 "><p id="p1543033435615"><a name="p1543033435615"></a><a name="p1543033435615"></a>输出任务CPU占用率</p>
54</td>
55<td class="cellrowborder" valign="top" width="33.33333333333333%" headers="mcps1.2.4.1.2 "><p id="p1643016342562"><a name="p1643016342562"></a><a name="p1643016342562"></a>LOS_CpupUsageMonitor</p>
56</td>
57<td class="cellrowborder" valign="top" width="33.33333333333333%" headers="mcps1.2.4.1.3 "><p id="p84301234115617"><a name="p84301234115617"></a><a name="p84301234115617"></a>输出任务历史CPU占用率</p>
58</td>
59</tr>
60</tbody>
61</table>
62
63## 开发流程<a name="section783435801510"></a>
64
65CPU占用率的典型开发流程:
66
671.  调用获取系统CPU使用率函数LOS\_SysCpuUsage。
682.  调用获取系统历史CPU使用率函数LOS\_HistorySysCpuUsage。
693.  调用获取指定任务CPU使用率函数LOS\_TaskCpuUsage。
70    -   若任务已创建,则关中断,正常获取,恢复中断;
71    -   若任务未创建,则返回错误码;
72
734.  调用获取指定任务历史CPU使用率函数LOS\_HistoryTaskCpuUsage。
74    -   若任务已创建,则关中断,根据不同模式正常获取,恢复中断;
75    -   若任务未创建,则返回错误码;
76
775.  调用获取所有任务CPU使用率函数LOS\_AllCpuUsage。
78    -   若CPUP已初始化,则关中断,根据不同模式正常获取,恢复中断;
79    -   若CPUP未初始化或有非法入参,则返回错误码;
80
81
82## 编程实例<a name="section460018317164"></a>
83
84### 实例描述<a name="section51413507517"></a>
85
86本实例实现如下功能:
87
881.  创建一个用于CPUP测试的任务。
892.  获取当前系统CPUP。
903.  以不同模式获取历史系统CPUP。
914.  获取创建的测试任务的CPUP。
925.  以不同模式获取创建的测试任务的CPUP
93
94### 示例代码<a name="section17617965523"></a>
95
96前提条件:
97
98在target\_config.h中将LOSCFG\_BASE\_CORE\_CPUP配置项打开。
99
100代码实现如下:
101
102```
103#include "los_task.h"
104#include "los_cpup.h"
105#define  MODE  4
106UINT32 g_cpuTestTaskID;
107VOID ExampleCpup(VOID)
108{
109    printf("entry cpup test example\n");
110    while(1) {
111        usleep(100);
112    }
113}
114UINT32 ItCpupTest(VOID)
115{
116    UINT32 ret;
117    UINT32 cpupUse;
118    TSK_INIT_PARAM_S cpupTestTask = { 0 };
119    memset(&cpupTestTask, 0, sizeof(TSK_INIT_PARAM_S));
120    cpupTestTask.pfnTaskEntry = (TSK_ENTRY_FUNC)ExampleCpup;
121    cpupTestTask.pcName       = "TestCpupTsk";
122    cpupTestTask.uwStackSize  = 0x800;
123    cpupTestTask.usTaskPrio   = 5;
124    ret = LOS_TaskCreate(&g_cpuTestTaskID, &cpupTestTask);
125    if(ret != LOS_OK) {
126        printf("cpupTestTask create failed .\n");
127        return LOS_NOK;
128    }
129
130    usleep(100);
131
132    /* 获取当前系统cpu占用率 */
133    cpupUse = LOS_SysCpuUsage();
134    printf("the current system cpu usage is: %u.%u\n",
135            cpupUse / LOS_CPUP_PRECISION_MULT, cpupUse % LOS_CPUP_PRECISION_MULT);
136
137    cpupUse = LOS_HistorySysCpuUsage(CPU_LESS_THAN_1S);
138    /* 获取指定任务的cpu占用率,该测试例程中指定的任务为以上创建的cpup测试任务 */
139    printf("the history system cpu usage in all time:%u.%u\n",
140           cpupUse / LOS_CPUP_PRECISION_MULT, cpupUse % LOS_CPUP_PRECISION_MULT);
141    cpupUse = LOS_TaskCpuUsage(g_cpuTestTaskID);
142    /* 获取指定历史任务在系统启动到现在的cpu占用率,该测试例程中指定的任务为以上创建的cpup测试任务 */
143    printf("cpu usage of the cpupTestTask:\n TaskID: %d\n usage: %u.%u\n",
144           g_cpuTestTaskID, cpupUse / LOS_CPUP_PRECISION_MULT, cpupUse % LOS_CPUP_PRECISION_MULT);
145    cpupUse = LOS_HistoryTaskCpuUsage(g_cpuTestTaskID, CPU_LESS_THAN_1S);
146    printf("cpu usage of the cpupTestTask in all time:\n TaskID: %d\n usage: %u.%u\n",
147           g_cpuTestTaskID, cpupUse / LOS_CPUP_PRECISION_MULT, cpupUse % LOS_CPUP_PRECISION_MULT);
148    return LOS_OK;
149}
150```
151
152### 结果验证<a name="section1968771515188"></a>
153
154编译运行得到的结果为:
155
156```
157entry cpup test example
158the current system cpu usage is : 1.5
159 the history system cpu usage in all time: 3.0
160 cpu usage of the cpupTestTask: TaskID:10 usage: 0.0
161 cpu usage of the cpupTestTask&nbsp;in all time: TaskID:10 usage: 0.0
162```
163
164