完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
用内置的串口命令调试
YoC支持很多的串口命令,我们可以通过串口命令进行很多的调试操作 help > help help : show commands ping : ping command. ifconfig : network config date : date command. ps : show tasks free : show memory info sys : sys comand log : log contrtol iperf : network performance test kv : kv tools 输入 help 命令,可以查看当前所有支持命令
ps >ps CPU USAGE: 640/10000 task pri status sp stack size max used ratio left tick %CPU -------------------- --- ------- ---------- ---------- -------- ----- --------- ------ dyn_mem 60 pend 0x181d12fc 608 372 61% 0 0.0 idle_task 61 ready 0x181d16a4 1376 216 15% 0 98.1 DEFAULT-WORKQUEUE 9 pend 0x181d0398 2048 352 17% 0 0.0 timer_task 5 pend 0x181d1c08 1152 512 44% 96 0.0 cpu_stats 60 sleep 0x181d0d84 552 340 61% 500 0.0 event_svr 32 pend 0x182a5144 2048 844 41% 1000 0.0 select 32 pend 0x182a5a4c 1024 568 55% 60000 0.0 cli 32 ready 0x182a608c 3072 852 27% 1000 2.4 uart_task 32 pend 0x182a6fd4 2048 400 19% 10000 0.0 lpm 60 pend 0x182a807c 4096 352 8% 0 0.0 tcpip_thread 36 ready 0x182dcbd8 2048 1376 67% 97 0.0 netmgr 32 pend 0x182dd690 4096 636 15% 1000 0.0 b-press 36 pend 0x183a5d94 4096 424 10% 0 0.0 fota-check 45 sleep 0x1829db78 1024 340 33% 60000 0.0 fota 45 pend 0x1829e048 2048 868 42% 10000 0.0 ps 命令可以打印出当前系统所有的线程状态,其中个项含义如下:
其中有些信息,我们详细说明一下:
> free total used free peak memory usage: 5652536 605316 5047220 1093576 free 命令可以使用输出当前系统的堆状态,其中:
单位为 byte >free mem ------------------------------- all memory blocks --------------------------------- g_kmm_head = 1829bfc8 ALL BLOCKS address, stat size dye caller pre-stat point 0x1829cb20 used 8 fefefefe 0x0 pre-used; 0x1829cb38 used 4128 fefefefe 0xbfffffff pre-used; 0x1829db68 used 1216 fefefefe 0x180190b6 pre-used; 0x1829e038 used 2240 fefefefe 0x180190b6 pre-used; 0x1829e908 used 4288 fefefefe 0x180190b6 pre-used; 0x1829f9d8 free 592 abababab 0x180aaa6d pre-used; free[ 0x0, 0x0] 0x1829fc38 used 40 fefefefe 0x180cb836 pre-free [0x1829f9d8]; 0x1829fc70 used 40 fefefefe 0x180cb836 pre-used; 0x1829fca8 used 18436 fefefefe 0x1810448d pre-used; 0x182a44bc used 40 fefefefe 0x180cb836 pre-used; ... 0x183a5ce0 used 16 fefefefe 0x1801d477 pre-used; 0x183a5d00 used 40 fefefefe 0x1801d477 pre-used; 0x183a5d38 used 12 fefefefe 0x1801a911 pre-used; 0x183a5d54 used 32 fefefefe 0x18010d40 pre-used; 0x183a5d84 used 4288 fefefefe 0x180190b6 pre-used; 0x183a6e54 free 4559244 abababab 0x18027fd9 pre-used; free[ 0x0, 0x0] 0x187ffff0 used sentinel fefefefe 0x0 pre-free [0x183a6e54]; ----------------------------- all free memory blocks ------------------------------- address, stat size dye caller pre-stat point FL bitmap: 0x10f4b SL bitmap 0x84 -> [0][2] 0x18349b88 free 8 abababab 0x1802a1b1 pre-used; free[ 0x0, 0x0] -> [0][7] 0x182df2f8 free 28 abababab 0x0 pre-used; free[ 0x0, 0x0] -> [0][25] 0x182df3c8 free 100 abababab 0x18010ea5 pre-used; free[ 0x0, 0x0] ... 0x182b5704 free 160204 abababab 0x1804fe55 pre-used; free[ 0x0, 0x0] SL bitmap 0x4 -> [16][2] 0x183a6e54 free 4559244 abababab 0x18027fd9 pre-used; free[ 0x0, 0x0] ------------------------- memory allocation statistic ------------------------------ free | used | maxused 5047040 | 605496 | 1093576 -----------------alloc size statistic:----------------- [2^02] bytes: 0 |[2^03] bytes: 1350 |[2^04] bytes: 398770 |[2^05] bytes: 29121 | [2^06] bytes: 408344 |[2^07] bytes: 396962 |[2^08] bytes: 350 |[2^09] bytes: 231 | [2^10] bytes: 55 |[2^11] bytes: 38 |[2^12] bytes: 396677 |[2^13] bytes: 1410 | [2^14] bytes: 14 |[2^15] bytes: 16 |[2^16] bytes: 0 |[2^17] bytes: 4 | [2^18] bytes: 17 |[2^19] bytes: 0 |[2^20] bytes: 0 |[2^21] bytes: 0 | [2^22] bytes: 0 |[2^23] bytes: 0 |[2^24] bytes: 0 |[2^25] bytes: 0 | [2^26] bytes: 0 |[2^27] bytes: 0 | free mem 命令可以打印出堆内各个 节点 的细节信息 整个打印信息被分成 4个部分
total used free peak memory usage: 5652536 605316 5047220 1093576 0: caller=0xbffffffe, count= 1, total size=4128 1: caller=0x180190b6, count=25, total size=85696 2: caller=0x180aaa6c, count= 1, total size=592 3: caller=0x180cb836, count= 3, total size=120 4: caller=0x1810448c, count= 1, total size=18436 5: caller=0x18010a68, count=39, total size=1716 6: caller=0x18014548, count= 8, total size=580 7: caller=0x18054dda, count= 1, total size=1028 ... 52: caller=0x18010d40, count= 2, total size=64 53: caller=0x1801d5b8, count= 3, total size=72 54: caller=0x1801d476, count= 6, total size=196 55: caller=0x1801d5ac, count= 3, total size=48092 56: caller=0x1801a910, count= 1, total size=12 57: caller=0x18027fd8, count= 1, total size=4559244 free list 是另一种形式的堆内存使用统计,统计了程序内各个malloc的调用并且还没有free的次数。 这个统计信息对于查找内存泄露非常有帮助。多次输出该命令,若 count 的值出现了增长,则可能有内存泄露的情况出现。 以上命令的 caller 信息,我们可以通过 在 yoc.asm 反汇编文件查找函数来确认具体的调用函数。 需要注意的是:free mem 和 free mem 只有在开启 CONFIG_DEBUG_MM 和 CONFIG_DEBUG 时才会出现,因为它需要占用一些内存空间用于存放这些调试信息 sys
具体显示的信息如下: > sys kernel AOS-R-1.2.0 > sys os YoC_V7.3 > sys sdk Voice_SmartSpeaker_PanguRTL8723_V1.0.1 > sys app 1.0.0-20200314.1307-R-test > sys id e6d0d5480440000008376eb1e834a765 其中 sys app sys id 两个命令是在需要fota的时候才会使用到,一般是 occ颁发出来的信息,不可更改,如果没有走过fota流程一般为空。其余的版本号信息,是代码宏定义的,可以修改。 date data 命令是用于查询和设置当前系统时间,一般系统连上网络以后会定期调用ntp,来和服务器同步时间,这个命令可以查询同步时间和设置系统时间 > date TZ(08):Tue Aug 11 18:03:14 2020 1597168994 UTC:Tue Aug 11 10:03:14 2020 1597140194 date -s "2001-01-01 12:13:14" > date -s "2020-08-11 18:15:38" set date to: 2020-08-11 18:15:38 TZ(08):Wed Aug 12 02:15:38 2020 1597198538 UTC:Tue Aug 11 18:15:38 2020 1597169738 date -s "2001-01-01 12:13:14"log log命令可以用于控制打印等级和打印的模块 > log Usage: set level: log level 0~5 0:disable 1:F 2:E 3:W 4:I 5:D add ignore tag: log ignore tag clear ignore tag: log ignore > log level 0 > log ignore fota log tag ignore list: fota > log ignore RTC log tag ignore list: fota RTC > log level num 用于控制打印等级 0:关闭日志打印; 1:打印F级别的日志; 2:打印E级别及以上的日志; 3:打印W级别及以上的日志; 4:打印I级别及以上的日志; 5:打印D级别及以上的日志,也是就日志全开 log ignore tag 用于控制各个模块的打印 例如 log ignore RTC 表示关闭 RTC 模块的日志打印 需要注意的是:log 命令只能控制通过 LOG 模块打印出来的日志,直接通过 printf 接口打印的日志 不能被拦截。所以推荐用 LOG 模块去打印日志。 kv kv是一个小型的存储系统,通过key-value 的方式存储在flash中 > kv Usage: kv set key value kv get key kv setint key value kv getint key kv del key > kv set key value 是设置字符串类型的value kv setint key value 是设置整形的value 例如: kv set wifi_ssid my_ssid kv set wifi_psk my_psk 如上两条命令是用于设置wifi的 ssid和psk,重启后系统会去通过kv接口获取flash的kv value值,从而进行联网。 ifconfig > ifconfig wifi0 Link encap:WiFi HWaddr 18:bc:5a:60:d6:04 inet addr:192.168.43.167 GWaddr:192.168.43.1 Mask:255.255.255.0 DNS SERVER 0: 192.168.43.1 WiFi Connected to b0:e2:35:c0:c0:ac (on wifi0) SSID: yocdemo channel: 11 signal: -58 dBm ifconfig 命令可以查看当前 网络连接的状态,其中:
创建自己的串口命令 上一节讲的都是系统内置的一些串口命令,加入自己想做创建一个串口命令用于调试,该怎么操作呢? YoC中,串口命令代码模块为 cli,其代码头文件为 cli.h。我们需要包含这个头文件。 /* * Copyright (C) 2019-2020 Alibaba Group Holding Limited */ #include #include #define HELP_INFO "Usage:ntmycmd testn" static void cmd_mycmd_ctrl_func(char *wbuf, int wbuf_len, int argc, char **argv) { int i; for (i = 0; i < argc; i ++) { printf("argv %d: %sn", i, argv); } printf(HELP_INFO); } void cli_reg_cmd_my_cmd(void) { static const struct cli_command cmd_info = { "my_cmd", "my_cmd test", cmd_mycmd_ctrl_func, }; aos_cli_register_command(&cmd_info); } 如上代码,
这样我们就可以拥有自己的串口命令调试啦 其效果如下: > my_cmd first cmd test argv 0: my_cmd argv 1: first argv 2: cmd argv 3: test Usage: mycmd test文章转载自:平头哥芯片开放社区 作者:小黄 |
|
相关推荐 |
|
只有小组成员才能发言,加入小组>>
【平头哥Sipeed LicheeRV 86开发板试用体验】Waft初体验
15700 浏览 1 评论
13756 浏览 4 评论
【平头哥Sipeed LicheeRV 86开发板试用体验】四、烧写waft系统&搭建waft测试环境
19678 浏览 2 评论
59117 浏览 19 评论
【限时福利】加入芯片开发社区,领100G电子工程师资料大礼包
88151 浏览 121 评论
邀请函 | 3月2日 来上海参加平头哥“玄铁RISC-V生态大会”
782浏览 0评论
读书分享会 | 玄铁RISC-V处理器入门与实战电子书免费下载!
681浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-18 13:02 , Processed in 0.675957 second(s), Total 42, Slave 34 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号