调试组件USMART的学习
1. 简述
USMART 是由 ALIENTEK 开发的一个灵巧的串口调试互交组件,通过它你可以通过串口
助手调用程序里面的任何函数,并执行。因此,你可以随意更改函数的输入参数(支持数字 ( 10/16进制, 支持负数)、字符串、函数入口地址等作为参数),单个函数最多支持 10 个输入参数,并支持函数返回值显示。
2. USMART功能简述
USMART 的功能类似 linux 的shell( RTT的finsh 也属于此类)。它最主要的功能就是通过串口调用单片机里面的函数,并执行,可以帮助我们调试代码。对其进行简易改动,也可以设计成单片机系统的指令系统。
USMART主要功能有:
l 可以调用绝大部分用户直接编写的函数。
l 支持参数类型多(数字(包含10/16进制)、字符串、函数指针等)。
l 支持函数返回值显示。
l 支持参数及返回值格式设置。
l 支持函数执行时间计算。
3. 实现机制
USMART组件主要包括五部分:一是输入和输出接口,主要是串口进行交互和信息转存;二是信息的解析,在转存信息提炼出函数和参数,并按格式贮存;三是函数执行,即执行输入的函数;四是控制USMART运行的机制;五是单片机内的函数列表信息,作为比对使用。
USMART运行的机制实现1.何时获得信息;2.获得必要信息;3,何时按信息执行,如何转到信息执行的函数中去。
何时获取信息:使用定时扫描的方式,使用一个定时器,在定时中断时扫描缓存空间;
获得必要信息:在串口接收中,将上位机输入的信息存到缓存空间,此时得到原始信息;在定时扫描时,将缓存空间中原始信息解析成需要的具体信息;
何时按信息执行:在解析完成后,将具体信息与函数列表信息进行比对,得到需要执行的函数及参数,采用函数指针调用的方式调用相应的执行函数。
4. 数据结构
4.1 USMART控制管理数据结构
根据功能要求,要实现USMART控制管理,需要设计一个结构来控制usmart的执行。其变量包含信息应包括:
(1) 组件执行的必要函数,如组件初始化、信息解析、信息比对、函数执行等;
(2) 调试函数的名称、参数数量、参数类型;
(3) 其他辅助变量;
(4) 附加功能,如运行时间统计等。
usmart控制管理器定义的结构如下:
struct_m_usmart_dev
{
struct _m_usmart_nametab *funs; //函数名指针
void (*init)(u8); //初始化
u8 (*cmd_rec)(u8*str); //识别函数名及参数
void (*exe)(void); //执行
void (*scan)(void); //扫描
u8 fnum; //函数数量
u8 pnum; //参数数量
u8 id; //函数id
u8 sptype; //参数显示类型(非字符串参数):0,10进制;1,16进制;
u16 parmtype; //参数的类型
u8 plentbl[MAX_PARM]; //每个参数的长度暂存表
u8 parm[PARM_LEN]; //函数的参数
u8 runtimeflag; //0,不统计函数执行时间;1,统计函数执行时间,注意:此功能必须在USMART_ENTIMX_SCAN使能的时候,才有用
u32 runtime; //运行时间,单位:0.1ms,最大延时时间为定时器CNT值的2倍*0.1ms
};
其在头文件中即初始化。
//函数控制管理器初始化
//得到各个受控函数的名字
//得到函数总数量
struct_m_usmart_dev usmart_dev=
{
usmart_nametab, //指向执行函数列表。。。。
usmart_init,
usmart_cmd_rec,
usmart_exe,
usmart_scan,
sizeof(usmart_nametab)/sizeof(struct_m_usmart_nametab),//函数数量
0, //参数数量
0, //函数ID
1, //参数显示类型,0,10进制;1,16进制
0, //参数类型.bitx:,0,数字;1,字符串
0, //每个参数的长度暂存表,需要MAX_PARM个0初始化
0, //函数的参数,需要PARM_LEN个0初始化
};
4.2 执行函数列表
单片机内的作为比对函数列表信息的贮存,设计一个列表。每项包括两个要素,一是函数的指针变量,指向函数的执行;一是函数名,用来与信息进行比对。
struct_m_usmart_nametab
{
void* func; //函数指针
const u8* name; //函数名(查找串)
};
在结构数组里将需要调试的函数的两类信息。
struct_m_usmart_nametab usmart_nametab[];
数组中初始化如:
struct_m_usmart_nametab usmart_nametab[]=
{
…………….
(void*)LCD_Clear,"voidLCD_Clear(u16 Color)",
…………….
};
5.补充:
使用USMART 调用的函数,必须将文件添加到usmart_config.c:
只要把函数所在头文件添加进来,并把函数名按上图所示的方,增加即可。
最后,要在串口助手里通过usmart组件调试函数,
(1)id,该指令用于获取各个函数的入口地址;
(2)?和 help,这两个指令的功能是一样的。发送该指令后,串口将打印 usmart 使用的帮助信
息;
(3)hex 和 dec,这两个指令可以带参数,也可以不带参数。当不带参数的时候, hex 和 dec 分
别用于设置串口显示数据格式为 16 进制/10 进制。当带参数的时候, hex 和 dec 就执行进制转换,
比如输入: hex 1234,串口将打印: HEX:0X4D2,也就是将 1234 转换为 16 进制打印出来。又比如
输入: dec 0X1234,串口将打印: DEC:4660,就是将 0X1234 转换为 10 进制打印出来。
(4)list,该命令用于打印所有 usmart 可调用函数。
执行时间统计功能;发送: runtime 0,可以关闭函数执行时间统计功能。函数执行时间统计功
能,默认是关闭的。
调试组件USMART的学习相关推荐
- STM32F103学习笔记(十一)——USMART调试组件的使用
实验十一 USMART调试组件的使用 测试指令: 测试主函数参考代码: #include "stm32f10x.h" #include "led.h" #inc ...
- stm32-mini学习笔记-USMART调试组件
目录 USMART调试过程 USMART特点 USMART文件简介 USMART配置步骤 USMART系统命令 实验现象 main中代码 USMART调试过程 1.串口发送命令调用函数 2.单片机节后 ...
- dev c++怎么调试_「正点原子NANO STM32开发板资料连载」第十八章 USMART 调试组件...
1)实验平台:ALIENTEK NANO STM32F411 V1开发板2)摘自<正点原子STM32F4 开发指南(HAL 库版>关注官方微信号公众号,获取更多资料:正点原子 第十八章 U ...
- USMART 调试组件实验
文章目录 前言 一.USMART调试组件简介 USMART组件的移植 二.硬件设计 三.软件设计 前言 本章,我们将向大家介绍一个十分重要的辅助调试工具:USMART 调试组件.该组件由 ALIENT ...
- 基于STM32战舰开发板的USMART调试组件的使用
基于STM32战舰开发板的USMART调试组件的使用 USMART调试组件是什么? USMART是正点原子团队为其STM32开发平台开发的一种类似linux的shell的调试工具.具体工作过程是通过串 ...
- USMART调试组件实验
USMART是正点原子团队为其STM32开发平台开发的一种类似linux的shell的调试工具.具体工作过程是通过串口发送命令给单片机,然后单片机收到命令之后调用单片机里面对应的相关函数,并执行,同时 ...
- 【正点原子STM32连载】 第二十六章 USMART调试组件实验 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1
1)实验平台:正点原子MiniPro H750开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=677017430560 3)全套实验源码+手册+视频 ...
- STM32——USMART调试组件实验-M4
什么是USMART? USMART是为STM32开发平台开发的一种类似Linux的shell的调试工具.具体工作过程是通过串口发送命令给单片机,然后单片机收到命令之后调用单片机里面对应的相关函数并执行 ...
- 辅助调试工具—USMART调试组件
培养解决问题意识和能力,培养创新意识和能力-- 受之以鱼,不如受之渔 学习策略:问题+解决方案 问题(机遇)来源: 什么意思呢?就是为什么会提出上面那个东西?这个东西是怎么来的? ...
最新文章
- PAT乙级(Basic Level)练习题-写出这个数 (20)
- 牛皮啊,全网独家SpringCloud Alibaba手打笔记
- boost::log模块实现从设置文件初始化库的示例
- C# Winform验证码
- 7分钟理解JS的节流、防抖及使用场景
- 32位linux 内存占用,LINUX内存高,触发OOM-KILLER问题解决
- 抽象类必须要有抽象方法吗?
- java环境安装包出现覆盖,请查收
- python源码编译 mingw_在windows上用gcc(mingw32)从命令行编译Cython扩展
- j pocket_Wallabag:Pocket的开源替代品
- centos 指定文件路径 脚本_centos自动删除三天前文件的脚本和自动进入指定目录运行命令...
- 基于R语言绘制BBC风格图表
- 【原创】查找原始MySQL死锁ID
- AIDE手机编程初级教程(零基础向) 3.2.2 设计欢迎页(补充)
- 《Redis视频教程》(p6)
- mysql-bin.index_mysqlbin.index是什么文件
- drwxr-xr-x是啥意思
- 产品原型设计:使用axure实现菜单下拉效果
- 中国异戊烷市场调研与投资预测报告(2021版)
- 企微和钉钉发力,送谁一首《凉凉》?