主题 : 支持历史,内嵌C语言解释器的超级强大的改进型串口调试助手 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 10394
精华: 0
发帖: 5
金钱: 50 两
威望: 25 点
贡献值: 0 点
综合积分: 10 分
注册时间: 2009-11-03
最后登录: 2009-11-17
楼主  发表于: 2009-11-03 09:32

 支持历史,内嵌C语言解释器的超级强大的改进型串口调试助手

管理提醒: 本帖被 qq2440 执行加亮操作(2009-12-04)
         串口调试助手V5.0使用说明
1. 历史命令功能
(1)作用:
     a.可记住经常使用的命令,
     b. 点击历史命令右侧的下拉列表,存储的历史命令数据就会出现在发送区域
     c. 避免重复输入,方便调试

(2) 输入方法1: 比如要生成一条数据为 12 34 56 78 的历史命令
    a. 在发送输入里面输入: <说明性文字>12 34 56 78 或者 12 34 56 78
     其中: 说明性文字用于描述本条数据的作用.必须用 <>括起.
          也可以不需要说明性文字.
    b. 点击 "加入"按钮
(3) 输入方法2:
    a.编辑一个文本文件,输入若干条命令,每行一条命令:
        <命令1> xxxxxxx
        <命令2> xxxxxxx
        <命令3> xxxxxxx
         ...........
    b. 点击"导入",选择该文件就将该文件内的命令导入了

(4) 点击"导出",可将历史列表导出到一个文件中,下回可从文件中导入
    
2. Hex: 查看发送区输入的文本对应的十六进制形式,
            如 Sending Area ->  53 65 6E 64 69 6E 67 20   41 72 65 61
   Char: 查看发送区输入的十六进制的对应的字符串形式,
            如 53 65 6E 64 69 6E 67 20   41 72 65 61  ->  Sending Area

3. 校验功能
(1) 作用: 可提供若干内置和外置的校验和计算工具,方便数据包的调试
(2) 操作方法:
   a. 选中十六进制发送,输入原始的数据
   b. 选择校验方法,
   c. 点击"校验",则校验之后的数据出现在发送区域
(3) 支持3个自定义校验程序,选择自定义1,自定义2,自定义3时,需要分别提供对应的
     校验程序,名字对应为SELF_1.EXE,SELF_2.EXE,SELF_3.EXE

(4) 校验程序为控制台程序,数据返回方式有2种:
   a. main函数返回值为4个字节,输入参数为十六进制数据字符串,
     如待校验的数据为4字节数据: 12 34 56 78,则main函数的命令行参数为 12345678
   b. 当最高字节为1~3时候,表明返回值的低字节为1~3字节校验数据,该校验数据将附加在原数据尾部
   c. 当最高字节为4时候,表明校验或者加密后的数据存放在SELF.txt中.

(5) 为方便编写自定义的校验程序,提供一个校验程序例子:
/////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include <conio.h>

__inline char ch2hex(char ch)
{
    if( '0' <= ch && ch <= '9' )
        return ch-'0';

    if( 'a' <= ch && ch <= 'f' )
        return ch-'a'+10;

    if( 'A' <= ch && ch <= 'F' )
        return ch-'A'+10;

    return -1;
}

int str2hex(const char* str,char* buffer)
{
    int len = 0;

    while(*str)
    {
        char ch = ch2hex(*str++);
        if( ch < 0 )
            break;
        len++;
        if( len%2 )
            *buffer = ch;
        else
            *buffer++ = (*buffer<<4) | ch;
    }

    return (len+1)/2;
}

/**
argv[1] 为待校验的数据的16进制字符串
**/
int main(int argc, char* argv[])
{
    int i,len;
    char buffer[1024];
    short sum = 0; // 本例子简单计算算术和

    if( argc < 2 )
        return -1;
    
    len = str2hex(argv[1],buffer); // 从16进制字符串中提取待校验的数据
    //printf("%d: %s!\r\n",len,argv[1]);

    for( i = 0; i < len; i++)
    {
        //printf("%02x ",(unsigned char)buffer);
        sum += buffer;// 本例子简单计算算术和
    }
    //printf("\r\n");
    if( 1 )
    {// 通过文件c:\self.txt返回校验甚至加密后的所有数据
        FILE* fp = fopen("c:\\self.txt","wb");
        fwrite(buffer,len,1,fp);
        fwrite(&sum,1,2,fp);
        fclose(fp);
        return (4<<24);
    }
    return (0x02<<24) | sum; //通过返回值返回1~3字节的校验数据,该校验数据将附加在原数据尾部
}

/////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////

(6) 自动解析器API
说明待完善,可解释执行类似 parser.txt里面的类C语言代码,

(100) 关于
 Highly Improved by 狐飞飞狐<13685997@qq.com>
附件: 串口调试助手V5.0.rar (119 K) 下载次数:1129
级别: 新手上路
UID: 1734
精华: 0
发帖: 34
金钱: 225 两
威望: 119 点
贡献值: 0 点
综合积分: 68 分
注册时间: 2008-09-24
最后登录: 2011-12-27
1楼  发表于: 2010-03-25 13:07
支持一下,哈哈!!!
技术无止境,交流促进步