本帖最后由 yandld 于 2012-10-29 18:45 编辑
CHSHELLV 1.0使用说明
CHSHELLV 1.0是由YNALD开发的一个灵巧的串口调试交互组件,通过它你可以通过串口调试助手调用程序里面的任何函数并执行。只需要随意更改函数的输入参数(目前只能以10进制数字、字符串作为参数),并在串口调试助手中点击发送并执行输入的函数。同时,该组件支持函数返回值显示。 有了它,你不用像以前那样 采用传统的“烧程序,看现象” 的方式来调试智能车的各个参数,借助无线串口,你甚至可以在车运行的时候动态调节 程序中的参数(比如PID的中比例系数)。从而大大加快大家的调车进程 ^_^ 本组件的编写借鉴了正点原子的 USMARTV2.0 组件并进行改良。将多余内容删减,代码压缩所完成。编写过程中测试环境为 Freescale MK10DN512VLL10。 如果您使用中发现有任何BUG,或者问题,欢迎联系作者Yandld QQ 1453363089。
CHSHELLV 1.0的特点如下:
1、可以调用绝大部分用户直接编写的函数;
2、资源占用少;
3、可支持十进制数字、字符串等参数类型;
4、支持函数返回值显示;
5、使用方便。
通过使用CHSHELLV 1.0,你可以轻易的修改函数参数、查看函数运行结果,从而快速解决问题。比如你调试液晶屏显示模块,为了得到想要的最佳效果,通常的做法是:写函数->修改参数->下载->查看结果->不满意->修改参数->下载->查看结果->不满意……不停的循环,直到满意为止。这样做一方面麻烦又啰嗦,另一方面又要不断的对单片机刷程序,影响其寿命。而利用CHSHELLV 1.0,只需要在串口调试助手中输入函数及其参数,然后直接串口发送给单片机,就执行了一次参数调整;如果对运行结果不满意,在串口调试助手中修改参数之后点击发送就能看到相应的运行结果,直到你满意为止。因此,通过CHSHELLV 1.0,修改参数十分方便,不需要编译,不需要下载,不会让单片机折寿。
由于CHSHELLV 1.0支持十进制数字、字符串等参数类型,因此用户编写的绝大部分函数可以直接被CHSHELLV 1.0调用;对于不能直接调用的,你只需要重写一个函数,把影响调用的参数去掉即可。这个重写后的函数,即可以被CHSHELLV 1.0调用了。
前面对CHSHELLV 1.0进行了简单的说明,下面我们从CHSHELLV 1.0的组成、移植、使用进行详细的介绍。
一、CHSHELLV 1.0的组成
CHSHELLV 1.0组件共包含三个文件,如下图所示:
图1.1 CHSHELLV 1.0组件的构成 从上图可以看出,CHSHELLV 1.0组件由chshell.c、chshell.h、chshell_port.c三个文件组成。其中chshell.c文件包含功能实现函数,并且负责与外部交互,一般不需要修改;chshell_port.c文件主要关于CHSHELLV 1.0的移植,需要用户修改。chshell.h是头文件,含有几个用户配置宏定义,可以用来配置CHSHELLV 1.0的功能、参数类型以及参数长度。
二、CHSHELLV 1.0的移植
要完成CHSHELLV 1.0的移植,只需要实现两个函数
(1)chshell_port.c里面的void CHS_Init(void)函数,该函数功能为实现串口初始化。在CHKV2.2核心板上该函数的实现代码如下:
//Shell系统初始化
//实现 初始化系统系统
void CHS_Init(void)
{
//在这里包含你的串口初始化函数
UART_Init(UART3,115200); //初始化调试串口 //默认 UART3 115200 在UART.H中定义
}
从上述代码可以看出,我们对串口3进行初始化,初始化串口波特率为115200。大家在对CHSHELLV 1.0进行移植时,要根据自己开发板的情况更改相应的设置。
(2)是串口接收与发送中断服务函数,其在CHKV2.2核心板上的实现代码为:
extern void chshell_rec1(u8 ch);//声明外部函数
void UART3_RX_TX_IRQHandler(void)
{
u8 ch;
if(UART_Re1(UART3,&ch))
{
CHS_Rev1(ch); //调用1次CHS_Rev1(ch)函数并将接收到的字符ch 传给CHS_Rev1
}
}
用户在移植使用CHSHELLV 1.0组件时,需要在串口源程序中添加此函数。当从串口调试助手输入函数或者字符时,系统会自动进入此中断服务函数,并执行相应操作。
完成这两个函数的移植,你就可以使用CHSHELLV 1.0了。
三、CHSHELLV 1.0的使用
(一)CHSHELLV 1.0使用之前准备工作
使用CHSHELLV 1.0之前要完成三个操作:复制CHSHELL文件、添加头文件路径、完成CHSHELLV 1.0移植。下面我们结合具体实例进行演示说明。
1、复制CHSHELL文件
在这一步骤中,我们要进行的操作是复制CHSHELL文件夹到工程文件夹下面,如下图所示:
图3.1 复制CHSHELL文件夹到工程文件夹下 2、添加头文件路径
在添加头文件路径之前,我们要先打开实例的工程文件,如下图所示:
图3.2 打开实例的工程文件 由于我们在前一步操作中已经将CHSHEL文件夹到工程文件夹下面,我们现在要进行的操作是把CHSHELL文件夹添加到头文件包含路径,具体操作如下图所示:
图3.3添加头文件路径 完成这一步操作之后,我们还要在主函数里面加入#include "chshell.h"。
3、完成CHSHELLV 1.0移植
关于CHSHELLV 1.0移植的具体实现代码我们已经在第二部分进行了介绍,在这里我们要说明的是如何将CHSHELLV 1.0成功移植到演示例程上面来。这一步骤包含两项操作:
(1)实现串口初始化
串口的初始化是在chshell_port.c文件中进行的,完成之后的程序如下所示:
图3.4 串口初始化 (2)添加中断服务函数 串口接收与发送中断服务函数要添加在uart.c函数中,如下图所示:
图3.5 添加中断服务函数 当我们通过串口调试助手输入函数或者字符时,系统便会进入此中断服务函数,串口中断服务函数通过调用 CHS_Rev1(ch)函数产生相应操作。
完成这三步操作之后,我们就可以使用CHSHELLV 1.0了,不过在主程序中还要执行CHS_Dev函数的初始化,另外还要针对你自己想要被CHSHELLV 1.0调用的函数在chshell_port.c里面进行添加。关于这一步操作,我们将在CHSHELLV 1.0的具体使用中以例程方式进行介绍。
(二)CHSHELLV 1.0使用例程
前面已经介绍过,CHSHELLV 1.0使用准备工作完成之后还要进行CHS_Dev的初始化操作、被调用函数的添加操作,之后才能通过串口调试助手进行函数的调用。为了让大家对CHSHELLV 1.0的这一使用流程有更直观的了解,我们在这一部分将采用几个例程来为大家进行演示。
1、添加被调用函数
被调用函数的添加是在chshell_port.c里面进行的。例程中添加完被调用函数之后的chshell_port.c文件如下图所示:
图3.6 添加需要被CHSHELLV 1.0调用的函数 这里的添加函数很简单,只要把函数所在头文件添加进来,并把函数名按上图所示的方式增加即可。在例程中,我们添加了7个函数:LCD_ShowString(液晶屏显示字符串)、SPILCD_Clear(液晶屏清屏操作)、set_i(控制LED灯闪烁周期)、CHS_Pow(求m^n次方)等。大家在使用时,根据自己的需要按上述格式添加其他函数即可。
2、程序编译及代码下载
添加完被调用函数之后,我们要对程序进行编译,然后下载代码到CHKV2.2核心板上,就可以通过串口来调用我们在图3.6中添加的程序。在这里简单介绍一下,下载完代码之后,我们可以看到LED1不停闪烁,然后串口调试助手屏幕上显示了一些字符(就是主函数里面要显示的字符)。
图3.7 启动串口助手 3、串口调用操作
在打开的串口调试助手字符串输入框中输入各种指令(?,help,list等),就可以得到执行结果如下图:
图3.8 输入“?/help”指令 由上图可见,在字符串输入框中输入“?/help”指令可以在窗口中得到CHSHELLV 1.0的说明以及CHSHELLV 1.0组件的3个系统指令和函数清单,能够为用户提供很大帮助。
图3.9 输入“list”指令 通过“list”指令,我们可以获得当前CHSHELLV 1.0所管理的全部函数。
我们已经通过图3.8、3.9查看到了CHSHELLV 1.0所能调用的具体函数清单,下面我们将通过较为具体的操作演示进行说明。
a)执行:LCD_ShowString(u16 x,u16 y,const u8 *p)函数
这个函数的功能是在LCD坐标点(u16 x,u16 y)处显示字符串。大家在这里要注意一点,所要显示的字符串是放在const u8 *p的位置的,而且两边要加双引号。比如,我们输入函数:LCD_ShowString(50,50,“How are you”),点击发送,如下图所示:
图3.10 执行LCD_ShowString(50,50,“How are you”)函数 程序运行之后,我们可以看到在LCD屏幕上显示How are you,如果大家想要在LCD其他位置显示其他字符。只需更改u16 x、u16 y和const u8 *p对应的参数即可。
b)执行: CHS_Pow(u8 m,u8 n)函数
在前面我们已经介绍过,CHSHELLV 1.0支持函数返回值显示。因此,在这儿我们将通过CHS_Pow(u8 m,u8 n)函数验证CHSHELLV 1.0的函数返回值显示功能。CHS_Pow(u8 m,u8 n)函数的作用是求出m的n次方。比如,我们想要求出5的3次方的值,只需要在u8 m的位置写上5,u8 n的位置写上3,在字符串输入框中写上此函数之后点击发送,我们可以看到执行结果如下:
图3.11 执行CHS_Pow(5,3)函数 从上图我们可以看出,执行函数CHS_Pow(5,3)之后,我们在串口调试助手中得到了返回值:125,如图中红圈标示。
我们通过两个简单的例程向大家对CHSHELLV 1.0的使用进行了说明,如果大家想要通过CHSHELLV 1.0对其他函数进行操作,只需按照我们上边所述步骤进行操作即可。
四、CHSHELLV 1.0注意事项
1、大家在添加被调用函数的时候,要注意其格式为:
(函数类型*) 函数名, “函数类型 (函数类型*) 函数名, “函数类型 函数名(参数类型1 参数名1,参数类型2 参数名2,……,函数类型n,参数名n)”,
大家一定要注意在结尾有逗号“,” ; 2、CHSHELLV1.0版本 参数只支持10进制数字和字符串,所管理的函数最大参数数量为5。
联系我们论坛:http://www.tinychip.net
QQ群247160311
|