摘要:Shell作为Huawei Liteos在线调试工具,可以通过串口工具输入输出,支持常用的基本调试功能。同时用户可以新增定制的命令,新增命令需重新编译烧录后才能执行

本文分享自华为云社区《LIteOS----shell应用(1)系统shell》,作者:o0龙龙0o 。

前言:

很多时候我们在调试应用程式时都无法设置过多断点或是无法观测程序真正的流程动向,哪些语句有没有执行,还有就是手动开启某个自己写的应用的等等,这时候就需要shell命令行的操作,他可以以命令行的方式访问操作系统的功能和服务,接收用户的输入命令,对操作系统的输出进行打印。

1、Huawei Liteos 的shell

Shell作为Huawei Liteos在线调试工具,可以通过串口工具输入输出,支持常用的基本调试功能。同时用户可以新增定制的命令,新增命令需重新编译烧录后才能执行

2、shell功能打开方法

可以通过make menuconfig配置Shell,菜单路径为:Debug ---> Enable a Debug Version ---> Enable Shell。

3、LiteOS 内设Shell命令

烧录新系统镜像后,重启系统,如果已经打开shell功能,既可以从串口中使用系统自带的Shell功能了。

通过这些命令我就可以完成对系统的一些基本操作,比如查询任务执行的情况,内存的分配情况及各种命令的帮助功能。

例如:help命令,在命令行输入help

系统谁输出当前的所有shell命令:

Huawei LiteOS # help
*******************shell commands:************************* cpup date dlock dmesg free help hwi
log memcheck mutex queue sem stack swtmr
systeminfo task uname watch

task命令用于查询系统任务信息

当输入 task [ID]时,可以查询到ID为ID的任务信息

比如输入task 0x01时,系统会打印出:

Huawei LiteOS # task 0x01
TaskName = SerialEntryTask
TaskId = 0x01
*******backtrace begin*******
traceback 0 -- lr = 0x1d804 fp = 0xa86bc
traceback 1 -- lr = 0x1da40 fp = 0xa86e4
traceback 2 -- lr = 0x20154 fp = 0xa86fc
traceback 3 -- lr = 0x258e4 fp = 0xa8714
traceback 4 -- lr = 0x242f4 fp = 0xa872c
traceback 5 -- lr = 0x123e4 fp = 0xa8754
traceback 6 -- lr = 0x2a9d8 fp = 0xb0b0b0b

大家可以尝试,自己发现这些系统功能的的作用是什么,也在其实发现更好地应用。

4、定义命令函数

首先要有一个功能函数还处理命令,需要在头文件中声明功能函数原型。

比如这里定义

int osShellCmdLs(int argc, const char **argv);

一般这里函数需要包过两个参数,argc 和argv字符串指针。argc:Shell命令的参数个数。个数中是否包括命令关键字,和注册命令时的命令类型有关。argv:为指针数组,每个元素指向一个字符串,该字符串就是执行shell命令时传入命令处理函数的参数。参数中是否包括命令关键字,和注册命令时的命令类型有关。

5、注册命令名称

LiteOS shell有静态注册命令和系统运行时动态注册命令两种注册方式。两种方式主要是内存设定和释放不同,静态注册要求在编译器和设置中打开相关的支持才能生效。一般建议采用动态shell注册,这样简单好操作。

6、用例

1、定义一个shell 功能名称为 pf_best,功能是打印“We r best” ,首先定义他的功能

#include "shell.h"
#include "shcmd.h" int cmd_pfbest(void)
{
printf("We r best!\n");
return 0;
}

因为不需要出入参数,这里的函数为void空类型。

2、注册命令

按照动态注册的要求。

#include "shell.h"
void cmd_init(void)
{
osCmdReg(CMD_TYPE_EX, "pf_best", XARGS, (CMD_CBK_FUNC)cmd_pfbest);
}

编译下载后就可以使用这个命令进行交互了。

说完了shell ,大家是不是感觉很简单呢,都来试试吧

更多学习内容,请关注IoT物联网社区

添加华为云IoT小助手微信号(hwc-iot),回复“阅读”获取更多资讯

点击关注,第一时间了解华为云新鲜技术~

Shell:Lite OS在线调试工具知多少的更多相关文章

  1. 分享十个JavaScript在线调试工具

    测试Javascript可能是网页开发中最让人忧伤的工作.这里我找一些比较好的工具来帮助大家进行测试工作.这10款是我精选的基于浏览器的JavaScript在线调试工具,希望你们对你们有用. 1.Op ...

  2. web html 在线调试工具

    html 的主要在线调试工具有以下几个: 1. plnkr.co 速度快,支持任意的外部css 和 js.  推荐. http://plnkr.co/edit/?p=preview 2. jsbin. ...

  3. 很好用的php在线调试工具

    什么叫在线调试?就是在线上生产环境进行调试,假设有一天某个用户报某个页面某个数据怎么不对啊,看来线上出BUG了,于是你要迅速找出原因,首先看日志,可是悲剧的没有足够的日志让你确定线上BUG的原因,也许 ...

  4. Lite OS学习之事件EVENT

    1. Lite OS的事件EVENT,就是一个任务向另外一个任务通知事件的,不能数据传输.看下有的函数,实际比较复杂 2. 具体还是看编程,先全局结构体整个事件变量 /*事件控制结构体*/ EVENT ...

  5. 利用JVM在线调试工具排查线上问题

    在生产上我们经常会碰到一些不好排查的问题,例如线程安全问题,用最简单的threaddump或者heapdump不好查到问题原因.为了排查这些问题,有时我们会临时加一些日志,比如在一些关键的函数里打印出 ...

  6. 在线调试工具 Arthas

    Arthas(阿尔萨斯) 是 Alibaba开源的一款 Java在线诊断工具,能够分析,诊断,定位Java应用问题,例如:JVM信息,线程信息,搜索类中的方法,跟踪代码执行,观测方法的入参和返回参数等 ...

  7. 015_python原生在线调试工具

    一.pdb https://docs.python.org/3/library/pdb.html

  8. Linux调试工具

    1. 使用printf调试 #ifdef DEBUG Printf(“valriable x has value = %d\n”, x) #endif 然后在编译选项中加入-DDEBUG 更复杂的调试 ...

  9. OS版本调研

    1引言 1.1 编写目的 本文的主要目的是通过对当前项目中使用的各种版本的操作系统进行比较,分析各自特性和稳定程度,最终推荐合适的版本作为当前的标准系统. 1.2 背景 当前,部门负责管理维护的现网使 ...

  10. golang调试工具Delve

    Devle是一个非常棒的golang 调试工具,支持多种调试方式,直接运行调试,或者attach到一个正在运行中的golang程序,进行调试. 线上golang服务出现问题时,Devle是必不少的在线 ...

随机推荐

  1. Chromium Command Buffer原理解析

    Command Buffer 是支撑 Chromium 多进程硬件加速渲染的核心技术之一.它基于 OpenGLES2.0 定义了一套序列化协议,这套协议规定了所有 OpenGLES2.0 命令的序列化 ...

  2. DP 杂题选做

    部分详见: 概率期望 DP 学习笔记 树形 DP 学习笔记 其余题就不具体分类了. P1220 关路灯 题解说这是区间 DP 经典题,但我以前居然没听说过,这下尴尬了. 设 \(f_{i,j,0/1} ...

  3. 机器学习从入门到放弃:硬train一发手写数字识别

    一.前言 前面我们了解了关于机器学习使用到的数学基础和内部原理,这一次就来动手使用 pytorch 来实现一个简单的神经网络工程,用来识别手写数字的项目.自己动手后会发现,框架里已经帮你实现了大部分的 ...

  4. Kubernetes:kube-apiserver 之启动流程(二)

    接着 Kubernetes:kube-apiserver 之启动流程(一) 加以介绍. 1.2.2 创建 APIExtensions Server 创建完通用 APIServer 后继续创建 APIE ...

  5. jenkins原理篇——成员权限管理

    大家好,我是蓝胖子,前面几节我讲述了jenkins的语法以及我是如何使用jenkins对测试和正式环境进行发布的.但正式环境使用jenkins还有一点很重要,那就是权限管理.正式环境的权限往往不能对所 ...

  6. 题解 CF1739B

    题目大意: 有一个非负整数序列 \(A\),定义序列 \(D\) 是序列 \(A\) 的绝对值差分序列,问给定序列 \(D\),能否求出唯一的序列 \(A\),若不能,输出 \(-1\),否则输出序列 ...

  7. Codeforces Round #702 (Div. 3) 题解

    写在前边 链接:Codeforces Round #702 (Div. 3) 比较简单,但是总是感觉脑子有点转不过弯来. A. Dense Array 链接:A题链接 题目大意: 在数组中插入若干个数 ...

  8. RK3588-MPP解码详解

    一. 简介 [RK3588从入门到精通] 专栏总目录 本篇文章进行RK3588-MPP解码的详细解析 二. 环境介绍 硬件环境: ArmSoM-W3 RK3588开发板 软件版本: OS:ArmSoM ...

  9. 《最新出炉》系列初窥篇-Python+Playwright自动化测试-31-JavaScript的调用执行-上篇

    1.简介 在做web自动化时,有些情况playwright的api无法完成以及无法应对,需要通过或者借助第三方手段比如js来完成实现,比如:去改变某些元素对象的属性或者进行一些特殊的操作,本文讲解pl ...

  10. Vue重用组件

    1.是什么? 这里主要是简单入门使用一下,复杂高阶的用法笔者暂时还没了解到 Vue重用组件是指可以被多个Vue实例重复使用的组件.这些组件可以包含自定义的状态和事件处理程序,并且可以在整个应用程序中共 ...