调试助手--Q_Shell V1.0 发布(公布源码)

2019-12-11 18:32发布

Q_Shell V1.0使用说明
一.综述
Q_Shell是由酷享科技开发的一个串口调试组件,有了它你可以通过PC上的串口工具很方便的调试程序里的大多数函数(参数不超过四个);查看和赋值程序中的部分变量(支持u8,u16,u32类型的全局变量);读写指定地址处的寄存器值(32位)。其特点如下:

1.使用方便
需要调用的函数或变量只需在本文件中注_册,不需要手动添加任何声明。

2.功能齐全
函数参数支持十进制或十六进制数,字符串,指针。支持读写变量和寄存器。

3.占用资源极少
仅占用2K字节的ROM空间,2字节的全局变量空间,和20字节的栈空间。

4.拆卸容易
更改一个宏的值即可拆卸掉全部组件。

5.使用安全
使用前需要输入验证密码,可防止用户误操作。


二.移植
Q_Shell组件无需操作系统支持,可在裸机上直接进行移植。移植的步骤如下:

1.将Q_Shell.c和Q_Shell.h两个文件加入到工程中。

2.在需要使用Q_Shell功能的C文件中包含Q_Shell.h。

3.将Q_Shell.h中的宏USE_Q_SHELL_FUNCTION置1开启Q_Shell

4.按以下要求写好串口驱动:
(1)需要实现printf函数
(2)在串口工具中输入命令字符串并按下回车后,需要将从上位机接收到的字符串保存在一个字符串数组中,然后将其传至Q_Sh_CmdHandler来执行命令


三.使用举例
1.调用注_册的函数和变量
例如,我们想通过Q_Shell调用在*.c中定义的
全局变量unsigned char var; 以及
函数    unsigned char fun(char *str,unsigned int i,unsigned char j);
我们可以通过以下两个步骤来完成。

第一步: 在*。C中注_册需要调用的函数和变量
...
unsigned char Var;
QSH_VAR_REG(Var,“unsigned char Var”,“u8”);
...
unsigned char Fun(char *str, unsigned int i, char j)
{
        ...
}
QSH_FUN_REG(Fun,“unsigned char Fun(char *str,unsigned int i, char j)”);
...
其中QSH_VAR_REG的第一个参数填变量名;第二个参数填描述该变量的字符串,可以书写任意的内容;
第三个参数填变量类型描述字符串,根据所注_册的变量类型选填“u8”“u16”“u32”中的一个。
其中QSH_FUN_REG的第一个参数填函数名;第二个参数填描述该函数的字符串,可以书写任意的内容。

第二步:在PC上的串口工具中输入以下命令并按回车
lv()                     查看一共注_册了哪些变量
get(Var)                 查看变量Var的值。
set(Var,16)或set(Var,0x10) 给变量Var赋值
lf()                     查看一共注_册了哪些函数
fun(“123”,0x20001000,1)  调用已注_册的函数fun

2.读写指定地址处的寄存器
例如,我们想读写位于0xE000E004处寄存器
可在PC上的串口工具中输入以下命令
read(0xE000E004)          读出寄存器的值
write(0xE000E004,0xffffffff)  给寄存器赋值

四.版本记录
* Date             Author       Notes
* 2011-10-5      ChenYu       first version
点击此处下载 ourdev_682574M9WONJ.pdf(文件大小:163K) (原文件名:Q_Shell V1.0使用说明.pdf)
点击此处下载 ourdev_682575LLNHMM.rar(文件大小:5K) (原文件名:Q_Shell V1.0源码带注释.rar)
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
99条回答
yinglively
1楼-- · 2019-12-16 05:31
回复【27楼】aozima
mdk里面,链接时要对符号表加上keep参数,不然未使用的符号就自动不链接进来.
-----------------------------------------------------------------------

是不是在MDK的Linker页面中的Misc controls 中写入
--keep qsh_fun_* --keep qsh_var_*
因为在Q_shell.h中有这样的定义
#define QSH_VAR_REG(name, desc,typedesc)                                                           
static const   char  qsh_var_##name##_name[] = #name;                                           
static const   char  qsh_var_##name##_desc[] = desc;                                           
static const   char  qsh_var_##name##_typedesc[] = typedesc;                                  
QSH_RECORD qsh_var_##name##_record  __attribute__((section("qShellVarTab"))) =
{                                                                                                          
        qsh_var_##name##_name,                                                          
        qsh_var_##name##_desc,                                                          
        (void *)&name,                                                                       
        qsh_var_##name##_typedesc                                                                                               
}


我参照“RT-Thread”的finsh例程,但是还是不行。

加上
--keep qsh_fun_* --keep qsh_var_*
之后就会出现

Warning: L6320W: Ignoring --keep command. Cannot find argument 'qsh_fun_*'.
Warning: L6320W: Ignoring --keep command. Cannot find argument 'qsh_var_*'.
Warning: L6330W: Undefined symbol qShellFunTab$$Base (referred from q_shell.o). Unused section has been removed.
Warning: L6330W: Undefined symbol qShellFunTab$$Limit (referred from q_shell.o). Unused section has been removed.
Warning: L6330W: Undefined symbol qShellVarTab$$Base (referred from q_shell.o). Unused section has been removed.
Warning: L6330W: Undefined symbol qShellVarTab$$Limit (referred from q_shell.o). Unused section has been removed.

已经焦头烂额了
linquan315
2楼-- · 2019-12-16 09:23
 精彩回答 2  元偷偷看……
yinglively
3楼-- · 2019-12-16 13:41
LZ现身,开坛讲经吧。
ilovepp
4楼-- · 2019-12-16 17:29
回复【26楼】yinglively  
出现了一些问题
请求lz帮助
warning: l6330w: undefined symbol qshellfuntab$$base (referred from q_shell.o). unused section has been removed.
warning: l6330w: undefined symbol qshellfuntab$$limit (referred from q_shell.o). unused section has been removed.
warning: l6330w: undefined symbol qshellvartab$$base (referred from q_shell.o). unused section has been removed.
warning: l6330w: undefined symbol qshellvarta......
-----------------------------------------------------------------------
呵呵,久等了。解决这个问题最最简单的方法是用QSH_FUN_REG和QSH_VAR_REG注_册一个函数和一个变量就可以消除掉段未使用的警告了。
ljt80158015
5楼-- · 2019-12-16 19:50
好东西啊!~
a305566
6楼-- · 2019-12-16 20:36
mark

一周热门 更多>