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 in all time: TaskID:10 usage: 0.0 162``` 163 164