11bd4fe43Sopenharmony_ci/** 21bd4fe43Sopenharmony_ci * @file hi_cpu.h 31bd4fe43Sopenharmony_ci * 41bd4fe43Sopenharmony_ci * Copyright (c) 2020 HiSilicon (Shanghai) Technologies CO., LIMITED. 51bd4fe43Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 61bd4fe43Sopenharmony_ci * you may not use this file except in compliance with the License. 71bd4fe43Sopenharmony_ci * You may obtain a copy of the License at 81bd4fe43Sopenharmony_ci * 91bd4fe43Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 101bd4fe43Sopenharmony_ci * 111bd4fe43Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 121bd4fe43Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 131bd4fe43Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 141bd4fe43Sopenharmony_ci * See the License for the specific language governing permissions and 151bd4fe43Sopenharmony_ci * limitations under the License. 161bd4fe43Sopenharmony_ci */ 171bd4fe43Sopenharmony_ci 181bd4fe43Sopenharmony_ci/** 191bd4fe43Sopenharmony_ci * @defgroup iot_cpu CPU 201bd4fe43Sopenharmony_ci * @ingroup osa 211bd4fe43Sopenharmony_ci */ 221bd4fe43Sopenharmony_ci 231bd4fe43Sopenharmony_ci#ifndef __HI_CPU_H__ 241bd4fe43Sopenharmony_ci#define __HI_CPU_H__ 251bd4fe43Sopenharmony_ci#include <hi_types.h> 261bd4fe43Sopenharmony_ci 271bd4fe43Sopenharmony_ci#define LOAD_SLEEP_TIME_DEFAULT 30 281bd4fe43Sopenharmony_ci 291bd4fe43Sopenharmony_ci/** 301bd4fe43Sopenharmony_ci * @ingroup iot_cpu 311bd4fe43Sopenharmony_ci * 321bd4fe43Sopenharmony_ci * CPU usage information structure. CNcomment:cpu使用情况信息结构 CNend 331bd4fe43Sopenharmony_ci */ 341bd4fe43Sopenharmony_citypedef struct { 351bd4fe43Sopenharmony_ci hi_u8 b_valid : 1; /**< Whether the information is valid. HI_TRUE: yes; HI_FALSE: no. 361bd4fe43Sopenharmony_ci CNcomment:表示该条信息是否为有效信息,HI_TRUE:该条信息有效 371bd4fe43Sopenharmony_ci HI_FALSE:该条信息无效 CNend */ 381bd4fe43Sopenharmony_ci hi_u8 b_task : 1; /**< Whether the message is a task or an interrupt. HI_TRUE: task; HI_FALSE: interrupt. 391bd4fe43Sopenharmony_ci CNcomment:表示该条信息是任务或中断,HI_TRUE:任务 HI_FALSE:中断 CNend */ 401bd4fe43Sopenharmony_ci hi_u8 pad0 : 6; /**< Reserved. CNcomment:保留 CNend */ 411bd4fe43Sopenharmony_ci hi_u8 id; /**< Task ID/Interrupt number. CNcomment:当该条信息表示任务时为任务ID, 421bd4fe43Sopenharmony_ci 当该条信息为中断信息时表示中断号 CNend */ 431bd4fe43Sopenharmony_ci hi_u16 pad1; /**< Reserved. CNcomment:保留 CNend */ 441bd4fe43Sopenharmony_ci hi_u32 permillage; /**< CPU usage (per mil). CNcomment:cpu占用率,千分比 CNend */ 451bd4fe43Sopenharmony_ci hi_u64 cpu_time; /**< CPU usage time (unit: cputick), where, cputick x 160000000 = 1s. 461bd4fe43Sopenharmony_ci CNcomment:cpu占用时间(单位:cputick),160000000个cputick等于1秒 CNend */ 471bd4fe43Sopenharmony_ci} hi_cpup_item; 481bd4fe43Sopenharmony_ci 491bd4fe43Sopenharmony_ci 501bd4fe43Sopenharmony_citypedef enum { 511bd4fe43Sopenharmony_ci HI_CPU_CLK_80M, /**< cpu clock:80M. CNcomment:CPU工作频率:80M CNend */ 521bd4fe43Sopenharmony_ci HI_CPU_CLK_120M, /**< cpu clock:120M. CNcomment:CPU工作频率:120M CNend */ 531bd4fe43Sopenharmony_ci HI_CPU_CLK_160M, /**< cpu clock:160M. CNcomment:CPU工作频率:160M CNend */ 541bd4fe43Sopenharmony_ci HI_CPU_CLK_MAX /**< Maximum cpu clock, which cannot be used. CNcomment:CPU最大工作频率, 551bd4fe43Sopenharmony_ci 不可使用CNend */ 561bd4fe43Sopenharmony_ci} hi_cpu_clk; 571bd4fe43Sopenharmony_ci 581bd4fe43Sopenharmony_ci/** 591bd4fe43Sopenharmony_ci* @ingroup iot_cpu 601bd4fe43Sopenharmony_ci* @brief Obtains the CPU usage. CNcomment:获取CPU使用情况。CNend 611bd4fe43Sopenharmony_ci* 621bd4fe43Sopenharmony_ci* @par 描述: 631bd4fe43Sopenharmony_ci* Obtains the CPU usage between the initialization of the CPU usage module is started or 641bd4fe43Sopenharmony_ci* the CPU usage statistics are reset to each task/interrupt. 651bd4fe43Sopenharmony_ciCNcomment:获取cpu占用率模块初始化开始或cpu占用率统计信息重置开始统计到个各任务(中断) 661bd4fe43Sopenharmony_ciCPU占用情况。CNend 671bd4fe43Sopenharmony_ci* 681bd4fe43Sopenharmony_ci* @attention 691bd4fe43Sopenharmony_ci* @li A task/interrupt not scheduled after the CPU usage module is initialized or 701bd4fe43Sopenharmony_ci* the CPU usage statistics are reset is excluded. 711bd4fe43Sopenharmony_ciCNcomment:cpu占用率模块初始化或cpu占用率统计信息重置之后没有调度到的任务或中断 721bd4fe43Sopenharmony_ci不会被统计。CNend 731bd4fe43Sopenharmony_ci* 741bd4fe43Sopenharmony_ci* @param array_count [IN] type #hi_u32 Number of CPU usage records that can be stored 751bd4fe43Sopenharmony_ci* in the space corresponding to cpup_items. CNcomment:表示p_cpup_items对应的空间可以 761bd4fe43Sopenharmony_ci存储多少条cpu使用情况信息。CNend 771bd4fe43Sopenharmony_ci* @param p_cpup_items [OUT] type #hi_cpup_item* CPU usage information space, applied by the caller. 781bd4fe43Sopenharmony_ciCNcomment:cpu使用情况信息空间,由调用者申请。CNend 791bd4fe43Sopenharmony_ci* 801bd4fe43Sopenharmony_ci* @retval #0 Success. 811bd4fe43Sopenharmony_ci* @retval #Other Failure. For details, see hi_errno.h. 821bd4fe43Sopenharmony_ci* @par Dependency: 831bd4fe43Sopenharmony_ci* @li hi_cpu.h: Describes CPU usage APIs. 841bd4fe43Sopenharmony_ciCNcomment:文件用于描述cpu相关接口。CNend 851bd4fe43Sopenharmony_ci* @see None 861bd4fe43Sopenharmony_ci*/ 871bd4fe43Sopenharmony_cihi_u32 hi_cpup_get_usage(hi_u32 array_count, hi_cpup_item *p_cpup_items); 881bd4fe43Sopenharmony_ci 891bd4fe43Sopenharmony_ci/** 901bd4fe43Sopenharmony_ci* @ingroup iot_cpu 911bd4fe43Sopenharmony_ci* @brief Resets CPU usage statistics. CNcomment:重置cpu使用情况信息。CNend 921bd4fe43Sopenharmony_ci* 931bd4fe43Sopenharmony_ci* @param None 941bd4fe43Sopenharmony_ci* 951bd4fe43Sopenharmony_ci* @retval #None 961bd4fe43Sopenharmony_ci* @par 描述: 971bd4fe43Sopenharmony_ci* Resets CPU usage statistics. After the reset, the CPU usage statistics of all tasks and interrupts are 981bd4fe43Sopenharmony_ci* cleared. CNcomment:重置cpu使用情况信息,重置后所有任务和中断的cpu占用率清0。CNend 991bd4fe43Sopenharmony_ci* 1001bd4fe43Sopenharmony_ci* @attention None 1011bd4fe43Sopenharmony_ci* 1021bd4fe43Sopenharmony_ci* @par Dependency: 1031bd4fe43Sopenharmony_ci* @li hi_cpu.h: Describes CPU usage APIs. 1041bd4fe43Sopenharmony_ciCNcomment:文件用于描述cpu相关接口。CNend 1051bd4fe43Sopenharmony_ci* @see None 1061bd4fe43Sopenharmony_ci*/ 1071bd4fe43Sopenharmony_cihi_void hi_cpup_reset_usage(hi_void); 1081bd4fe43Sopenharmony_ci 1091bd4fe43Sopenharmony_ci/** 1101bd4fe43Sopenharmony_ci* @ingroup iot_cpu 1111bd4fe43Sopenharmony_ci* @brief Set CPU clock. CNcomment:设置CPU的工作频率。CNend 1121bd4fe43Sopenharmony_ci* 1131bd4fe43Sopenharmony_ci* @par 描述: 1141bd4fe43Sopenharmony_ci* Set CPU clock, such as 80M/120M/160M. 1151bd4fe43Sopenharmony_ci* CNcomment:设置CPU的工作频率,如80M/120M/160M。CNend 1161bd4fe43Sopenharmony_ci* 1171bd4fe43Sopenharmony_ci* @attention Default CPU clock is 160M, if change CPU clock, Shoud config it 1181bd4fe43Sopenharmony_ciboth in System Startup and DeepSleep Wakeup stage.CNcomment:CPU默认工作频率为160M, 1191bd4fe43Sopenharmony_ci如果改变CPU的工作频率,需要在系统启动和深睡唤醒阶段均进行配置。CNend 1201bd4fe43Sopenharmony_ci* @param clk [IN] type #hi_cpu_clk,cpu clk. CNcomment:CPU工作频率。CNend 1211bd4fe43Sopenharmony_ci* 1221bd4fe43Sopenharmony_ci* @retval #HI_ERR_SUCCESS Success. 1231bd4fe43Sopenharmony_ci* @retval #HI_ERR_CPU_CLK_INVALID_PARAM invalid clk. CNcomment:工作频率无效。CNend 1241bd4fe43Sopenharmony_ci* 1251bd4fe43Sopenharmony_ci* @par Dependency: 1261bd4fe43Sopenharmony_ci* @li hi_cpu.h: Describes CPU usage APIs. 1271bd4fe43Sopenharmony_ciCNcomment:文件用于描述cpu相关接口。CNend 1281bd4fe43Sopenharmony_ci* @see None 1291bd4fe43Sopenharmony_ci*/ 1301bd4fe43Sopenharmony_cihi_u32 hi_cpu_set_clk(hi_cpu_clk clk); 1311bd4fe43Sopenharmony_ci 1321bd4fe43Sopenharmony_ci/** 1331bd4fe43Sopenharmony_ci* @ingroup iot_cpu 1341bd4fe43Sopenharmony_ci* @brief Get CPU clock. CNcomment:获取CPU的工作频率。CNend 1351bd4fe43Sopenharmony_ci* 1361bd4fe43Sopenharmony_ci* @par 描述: 1371bd4fe43Sopenharmony_ci* Get CPU clock, such as 80M/120M/160M. 1381bd4fe43Sopenharmony_ci* CNcomment:获取CPU的工作频率,如80M/120M/160M。CNend 1391bd4fe43Sopenharmony_ci* 1401bd4fe43Sopenharmony_ci* @attention None 1411bd4fe43Sopenharmony_ci* @param None 1421bd4fe43Sopenharmony_ci* 1431bd4fe43Sopenharmony_ci* @retval #hi_cpu_clk cpu clk. 1441bd4fe43Sopenharmony_ci* 1451bd4fe43Sopenharmony_ci* @par Dependency: 1461bd4fe43Sopenharmony_ci* @li hi_cpu.h: Describes CPU usage APIs. 1471bd4fe43Sopenharmony_ciCNcomment:文件用于描述cpu相关接口。CNend 1481bd4fe43Sopenharmony_ci* @see None 1491bd4fe43Sopenharmony_ci*/ 1501bd4fe43Sopenharmony_cihi_cpu_clk hi_cpu_get_clk(hi_void); 1511bd4fe43Sopenharmony_ci 1521bd4fe43Sopenharmony_ci/** 1531bd4fe43Sopenharmony_ci* @ingroup iot_cpu 1541bd4fe43Sopenharmony_ci* @brief check cpu load percent and sleep. CNcomment:检查idle任务cpu占有率, 1551bd4fe43Sopenharmony_ci如果小于门限则对当前任务进行睡眠。CNend 1561bd4fe43Sopenharmony_ci* 1571bd4fe43Sopenharmony_ci* @par 描述: 1581bd4fe43Sopenharmony_ci* check cpu load percent of idle task, if smaller than the threshold 1591bd4fe43Sopenharmony_ci(5%), Then sleep. CNcomment:检查idle任务cpu占有率,如果小于门限(5%)则对当前任务 1601bd4fe43Sopenharmony_ci进行睡眠。CNend 1611bd4fe43Sopenharmony_ci* 1621bd4fe43Sopenharmony_ci* @attention None 1631bd4fe43Sopenharmony_ci* 1641bd4fe43Sopenharmony_ci* @param task_id [IN] type #hi_u32,current task ID. 1651bd4fe43Sopenharmony_ciCNcomment:当前固定填写当前任务ID。CNend 1661bd4fe43Sopenharmony_ci* @param ms [IN] type #hi_u32,sleep time:当前任务睡眠时间。CNend 1671bd4fe43Sopenharmony_ci* 1681bd4fe43Sopenharmony_ci* @retval None 1691bd4fe43Sopenharmony_ci* @par Dependency: 1701bd4fe43Sopenharmony_ci* @li hi_cpu.h: Describes CPU usage APIs. 1711bd4fe43Sopenharmony_ciCNcomment:文件用于描述cpu相关接口。CNend 1721bd4fe43Sopenharmony_ci* @see None 1731bd4fe43Sopenharmony_ci*/ 1741bd4fe43Sopenharmony_cihi_void hi_cpup_load_check_proc(hi_u32 task_id, hi_u32 ms); 1751bd4fe43Sopenharmony_ci 1761bd4fe43Sopenharmony_ci/** 1771bd4fe43Sopenharmony_ci* @ingroup iot_cpu 1781bd4fe43Sopenharmony_ci* @brief Enable Dcache. CNcomment:使能DCache。CNend 1791bd4fe43Sopenharmony_ci* 1801bd4fe43Sopenharmony_ci* 1811bd4fe43Sopenharmony_ci* @par 描述: 1821bd4fe43Sopenharmony_ci* Enable Dcache,system default Enable Dcache after startup. 1831bd4fe43Sopenharmony_ciCNcomment:使能DCache,系统启动默认使能。CNend 1841bd4fe43Sopenharmony_ci* 1851bd4fe43Sopenharmony_ci* @attention None 1861bd4fe43Sopenharmony_ci* 1871bd4fe43Sopenharmony_ci* @param None 1881bd4fe43Sopenharmony_ci* 1891bd4fe43Sopenharmony_ci* @retval #None 1901bd4fe43Sopenharmony_ci* @par Dependency: 1911bd4fe43Sopenharmony_ci* @li hi_cpu.h: Describes CPU usage APIs. 1921bd4fe43Sopenharmony_ciCNcomment:文件用于描述cpu相关接口。CNend 1931bd4fe43Sopenharmony_ci* @see None 1941bd4fe43Sopenharmony_ci*/ 1951bd4fe43Sopenharmony_cihi_void hi_cache_enable(hi_void); 1961bd4fe43Sopenharmony_ci 1971bd4fe43Sopenharmony_ci/** 1981bd4fe43Sopenharmony_ci* @ingroup iot_cpu 1991bd4fe43Sopenharmony_ci* @brief Disable Dcache. CNcomment:禁用DCache。CNend 2001bd4fe43Sopenharmony_ci* 2011bd4fe43Sopenharmony_ci* @par 描述: 2021bd4fe43Sopenharmony_ci* Disable Dcache. CNcomment:禁用DCache。CNend 2031bd4fe43Sopenharmony_ci* 2041bd4fe43Sopenharmony_ci* @attention: 2051bd4fe43Sopenharmony_ci* flush cache before disable. CNcomment:禁用Dcache前需要刷Cache。CNend 2061bd4fe43Sopenharmony_ci* 2071bd4fe43Sopenharmony_ci* @param None 2081bd4fe43Sopenharmony_ci* 2091bd4fe43Sopenharmony_ci* @retval #None 2101bd4fe43Sopenharmony_ci* @par Dependency: 2111bd4fe43Sopenharmony_ci* @li hi_cpu.h: Describes CPU usage APIs. 2121bd4fe43Sopenharmony_ciCNcomment:文件用于描述cpu相关接口。CNend 2131bd4fe43Sopenharmony_ci* @see None 2141bd4fe43Sopenharmony_ci*/ 2151bd4fe43Sopenharmony_cihi_void hi_cache_disable(hi_void); 2161bd4fe43Sopenharmony_ci 2171bd4fe43Sopenharmony_ci/** 2181bd4fe43Sopenharmony_ci* @ingroup iot_cpu 2191bd4fe43Sopenharmony_ci* @brief Flush Dcache. CNcomment:Flush DCache。CNend 2201bd4fe43Sopenharmony_ci* 2211bd4fe43Sopenharmony_ci* @par 描述: 2221bd4fe43Sopenharmony_ci* Flush Dcache, synchronize Dcache and memory. 2231bd4fe43Sopenharmony_ciCNcomment:刷新DCache,维持DCache和memory同步。CNend 2241bd4fe43Sopenharmony_ci* 2251bd4fe43Sopenharmony_ci* @attention None 2261bd4fe43Sopenharmony_ci* 2271bd4fe43Sopenharmony_ci* @param None 2281bd4fe43Sopenharmony_ci* 2291bd4fe43Sopenharmony_ci* @retval #None 2301bd4fe43Sopenharmony_ci* @par Dependency: 2311bd4fe43Sopenharmony_ci* @li hi_cpu.h: Describes CPU usage APIs. 2321bd4fe43Sopenharmony_ciCNcomment:文件用于描述cpu相关接口。CNend 2331bd4fe43Sopenharmony_ci* @see None 2341bd4fe43Sopenharmony_ci*/ 2351bd4fe43Sopenharmony_cihi_void hi_cache_flush(hi_void); 2361bd4fe43Sopenharmony_ci 2371bd4fe43Sopenharmony_ci/** 2381bd4fe43Sopenharmony_ci* @ingroup iot_cpu 2391bd4fe43Sopenharmony_ci* @brief Flush Icache. CNcomment:Flush ICache。CNend 2401bd4fe43Sopenharmony_ci* 2411bd4fe43Sopenharmony_ci* @par 描述: 2421bd4fe43Sopenharmony_ci* Flush Icache, synchronize Icache and memory. 2431bd4fe43Sopenharmony_ciCNcomment:刷新ICache,维持ICache和memory同步。CNend 2441bd4fe43Sopenharmony_ci* 2451bd4fe43Sopenharmony_ci* @attention None 2461bd4fe43Sopenharmony_ci* 2471bd4fe43Sopenharmony_ci* @param None 2481bd4fe43Sopenharmony_ci* 2491bd4fe43Sopenharmony_ci* @retval #None 2501bd4fe43Sopenharmony_ci* @par Dependency: 2511bd4fe43Sopenharmony_ci* @li hi_cpu.h: Describes CPU usage APIs. 2521bd4fe43Sopenharmony_ciCNcomment:文件用于描述cpu相关接口。CNend 2531bd4fe43Sopenharmony_ci* @see None 2541bd4fe43Sopenharmony_ci*/ 2551bd4fe43Sopenharmony_cihi_void hi_icache_flush(hi_void); 2561bd4fe43Sopenharmony_ci 2571bd4fe43Sopenharmony_ci#endif 258