更新日期: 2022/06/01 来源: https://gitee.com/weharmony/kernel_liteos_a_note
swtmr_shellcmd.c
浏览该文件的文档.
1/*
2 * Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
3 * Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without modification,
6 * are permitted provided that the following conditions are met:
7 *
8 * 1. Redistributions of source code must retain the above copyright notice, this list of
9 * conditions and the following disclaimer.
10 *
11 * 2. Redistributions in binary form must reproduce the above copyright notice, this list
12 * of conditions and the following disclaimer in the documentation and/or other materials
13 * provided with the distribution.
14 *
15 * 3. Neither the name of the copyright holder nor the names of its contributors may be used
16 * to endorse or promote products derived from this software without specific prior written
17 * permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
23 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
26 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
27 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
28 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
29 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 */
31
32#include "los_config.h"
33#ifdef LOSCFG_SHELL_CMD_DEBUG
34#include "stdlib.h"
35#include "los_swtmr_pri.h"
36#include "shcmd.h"
37#include "shell.h"
38
39#define OS_ALL_SWTMR_MASK 0xffffffff
40#define SWTMR_STRLEN 12
41
42LITE_OS_SEC_DATA_MINOR STATIC CHAR g_shellSwtmrMode[][SWTMR_STRLEN] = {
43 "Once",
44 "Period",
45 "NSD",
46 "OPP",
47};
48
49LITE_OS_SEC_DATA_MINOR STATIC CHAR g_shellSwtmrStatus[][SWTMR_STRLEN] = {
50 "UnUsed",
51 "Created",
52 "Ticking",
53};
54
55STATIC VOID OsPrintSwtmrMsg(const SWTMR_CTRL_S *swtmr)
56{
57 UINT32 ticks = 0;
58 (VOID)LOS_SwtmrTimeGet(swtmr->usTimerID, &ticks);
59
60 PRINTK("%7u%10s%8s%12u%7u%#12x%#12x\n",
61 swtmr->usTimerID % LOSCFG_BASE_CORE_SWTMR_LIMIT, //软件定时器ID。
62 g_shellSwtmrStatus[swtmr->ucState], //软件定时器状态,状态可能为:"UnUsed", "Created", "Ticking"。
63 g_shellSwtmrMode[swtmr->ucMode], //软件定时器模式。模式可能为:"Once", "Period", "NSD(单次定时器,定时结束后不会自动删除)"
64 swtmr->uwInterval, //软件定时器使用的Tick数。
65 ticks,
66 swtmr->uwArg, //传入的参数。
67 swtmr->pfnHandler); //回调函数的地址。
68}
69
70STATIC INLINE VOID OsPrintSwtmrMsgHead(VOID)
71{
72 PRINTK("\r\nSwTmrID State Mode Interval Count Arg handlerAddr\n");
73}
74///shell命令之swtmr 命令用于查询系统软件定时器相关信息。
75//参数缺省时,默认显示所有软件定时器的相关信息。
77{
80 UINT16 index;
81 UINT16 num = 0;
82
83 for (index = 0; index < LOSCFG_BASE_CORE_SWTMR_LIMIT; index++, swtmr1++) {
84 if (swtmr1->ucState == 0) {
85 num = num + 1;
86 }
87 }
88
89 if (num == LOSCFG_BASE_CORE_SWTMR_LIMIT) {
90 PRINTK("\r\nThere is no swtmr was created!\n");
91 return LOS_NOK;
92 }
93
94 if (timerID == OS_ALL_SWTMR_MASK) {
96 for (index = 0; index < LOSCFG_BASE_CORE_SWTMR_LIMIT; index++, swtmr++) {
97 if (swtmr->ucState != 0) {
98 OsPrintSwtmrMsg(swtmr);
99 }
100 }
101 } else {
102 for (index = 0; index < LOSCFG_BASE_CORE_SWTMR_LIMIT; index++, swtmr++) {
103 if ((timerID == (size_t)(swtmr->usTimerID % LOSCFG_BASE_CORE_SWTMR_LIMIT)) && (swtmr->ucState != 0)) {
105 OsPrintSwtmrMsg(swtmr);
106 return LOS_OK;
107 }
108 }
109 PRINTK("\r\nThe SwTimerID is not exist.\n");
110 }
111 return LOS_OK;
112}
113
114#ifdef LOSCFG_SWTMR_DEBUG
115STATIC VOID OsSwtmrTimeInfoShow(VOID)
116{
117 UINT8 mode;
118 SwtmrDebugData data;
119
120 PRINTK("SwtmrID Cpuid Mode Period(us) WaitTime(us) WaitMax(us) RTime(us) RTimeMax(us) ReTime(us)"
121 " ReTimeMax(us) RunCount LostNum Handler\n");
122 for (UINT32 index = 0; index < LOSCFG_BASE_CORE_SWTMR_LIMIT; index++) {
123 if (!OsSwtmrDebugDataUsed(index)) {
124 continue;
125 }
126
127 UINT32 ret = OsSwtmrDebugDataGet(index, &data, sizeof(SwtmrDebugData), &mode);
128 if (ret != LOS_OK) {
129 break;
130 }
131
132 SwtmrDebugBase *base = &data.base;
133 UINT64 waitTime = ((base->waitTime / base->waitCount) * OS_NS_PER_CYCLE) / OS_SYS_NS_PER_US;
134 UINT64 waitTimeMax = (base->waitTimeMax * OS_NS_PER_CYCLE) / OS_SYS_NS_PER_US;
135 UINT64 runTime = ((base->runTime / base->runCount) * OS_NS_PER_CYCLE) / OS_SYS_NS_PER_US;
136 UINT64 runTimeMax = (base->runTimeMax * OS_NS_PER_CYCLE) / OS_SYS_NS_PER_US;
137 UINT64 readyTime = ((base->readyTime / base->runCount) * OS_NS_PER_CYCLE) / OS_SYS_NS_PER_US;
138 UINT64 readyTimeMax = (base->readyTimeMax * OS_NS_PER_CYCLE) / OS_SYS_NS_PER_US;
139 PRINTK("%4u%10u%7s%14u%13llu%12llu%10llu%13llu%10llu%14llu%15llu%11u%#12x\n",
140 index, data.cpuid, g_shellSwtmrMode[mode], data.period * OS_US_PER_TICK, waitTime, waitTimeMax,
141 runTime, runTimeMax, readyTime, readyTimeMax, base->runCount, base->times, data.handler);
142 }
143}
144#endif
145
146LITE_OS_SEC_TEXT_MINOR UINT32 OsShellCmdSwtmrInfoGet(INT32 argc, const CHAR **argv)
147{
148 UINT32 timerID;
149 CHAR *endPtr = NULL;
150
151 if (argc > 1) {
152 goto SWTMR_HELP;
153 }
154
155 if (argc == 0) {
156 timerID = OS_ALL_SWTMR_MASK;
157#ifdef LOSCFG_SWTMR_DEBUG
158 } else if (strcmp("-t", argv[0]) == 0) {
160 return LOS_OK;
161#endif
162 } else {
163 timerID = strtoul(argv[0], &endPtr, 0);
164 if ((endPtr == NULL) || (*endPtr != 0) || (timerID > LOSCFG_BASE_CORE_SWTMR_LIMIT)) {
165 PRINTK("\nswtmr ID can't access %s.\n", argv[0]);
166 return LOS_NOK;
167 }
168 }
169
170 return SwtmrBaseInfoGet(timerID);
171SWTMR_HELP:
172 PRINTK("Usage:\n");
173 PRINTK(" swtmr --- Information about all created software timers.\n");
174 PRINTK(" swtmr ID --- Specifies information about a software timer.\n");
175 return LOS_OK;
176}
177SHELLCMD_ENTRY(swtmr_shellcmd, CMD_TYPE_EX, "swtmr", 1, (CmdCallBackFunc)OsShellCmdSwtmrInfoGet);//采用shell命令静态注册方式
178
179#endif /* LOSCFG_SHELL */
@ CMD_TYPE_EX
不支持标准命令参数输入,会把用户填写的命令关键字屏蔽掉,例如:输入ls /ramfs,传入给注册函数的参数只有/ramfs,而ls命令关键字并不会被传入。
Definition: shell.h:91
LITE_OS_SEC_TEXT UINT32 LOS_SwtmrTimeGet(UINT16 swtmrID, UINT32 *tick)
接口函数 获得软件定时器剩余Tick数 通过 *tick 带走
Definition: los_swtmr.c:848
LITE_OS_SEC_BSS SWTMR_CTRL_S * g_swtmrCBArray
Definition: los_swtmr.c:112
UINT32 OsSwtmrDebugDataGet(UINT32 swtmrID, SwtmrDebugData *data, UINT32 len, UINT8 *mode)
Definition: los_swtmr.c:142
BOOL OsSwtmrDebugDataUsed(UINT32 swtmrID)
Definition: los_swtmr.c:133
unsigned short UINT16
Definition: los_typedef.h:56
signed int INT32
Definition: los_typedef.h:60
long unsigned int UINT64
Definition: los_typedef.h:66
unsigned char UINT8
Definition: los_typedef.h:55
unsigned int UINT32
Definition: los_typedef.h:57
char CHAR
Definition: los_typedef.h:63
SWTMR_PROC_FUNC handler
SwtmrDebugBase base
UINT8 ucState
Definition: los_swtmr.h:269
UINT16 usTimerID
Definition: los_swtmr.h:271
UINTPTR uwArg
Definition: los_swtmr.h:276
UINT8 ucMode
Definition: los_swtmr.h:270
UINT32 uwInterval
Definition: los_swtmr.h:274
SWTMR_PROC_FUNC pfnHandler
Definition: los_swtmr.h:278
STATIC VOID OsSwtmrTimeInfoShow(VOID)
LITE_OS_SEC_TEXT_MINOR UINT32 OsShellCmdSwtmrInfoGet(INT32 argc, const CHAR **argv)
STATIC UINT32 SwtmrBaseInfoGet(UINT32 timerID)
shell命令之swtmr 命令用于查询系统软件定时器相关信息。
STATIC INLINE VOID OsPrintSwtmrMsgHead(VOID)
LITE_OS_SEC_DATA_MINOR STATIC CHAR g_shellSwtmrMode[][SWTMR_STRLEN]
STATIC VOID OsPrintSwtmrMsg(const SWTMR_CTRL_S *swtmr)
LITE_OS_SEC_DATA_MINOR STATIC CHAR g_shellSwtmrStatus[][SWTMR_STRLEN]
SHELLCMD_ENTRY(swtmr_shellcmd, CMD_TYPE_EX, "swtmr", 1,(CmdCallBackFunc) OsShellCmdSwtmrInfoGet)
u32_t(* CmdCallBackFunc)(u32_t argc, const char **argv)
Definition: types_adapt.h:86