打印

喜欢串口辅助调试的进(8月19日《串口猎人》V31发布在484楼)

[复制链接]
楼主: 程序匠人
手机看帖
扫描二维码
随时随地手机跟帖
41
//********************************通信*************************************************************

void comsend(unsigned char * sendbuff,unsigned char comsendlen)
{
    int i,CRC;
    CRC=0;
    ES=0;
    SBUF=0x55;
    while (TI == 0)
        ;
    TI=0; //置0

    SBUF=0xaa;
    while (TI == 0)
        ;
    TI=0; //置0

    SBUF=comsendlen;        //长度
    CRC+=comsendlen;
    while (TI == 0)
        ;
    TI=0; //置0


    for (i=0; i<comsendlen; i++)  //正文
    {
        SBUF=sendbuff[i];
        while (TI == 0)
            ;
        TI=0; //置0
        CRC+=sendbuff[i];
    }
    SBUF=CRC;                        //校验
    while (TI == 0)
        ;
    TI=0; //置0
    ES=1;

}

void comrev (void) interrupt 4
{

    if (RI==1)
    {

        RI=0;

        switch (RevState)
        {
            //等待接收第一个同步头0x55
        case  revhead1:
            if (SBUF==0x55)
            {
                RevState=revhead2;
            }
            break;

            //等待接收第二个同步头0xAA
        case  revhead2:
            if (SBUF==0xAA)
            {
                RevState=revpakagelen;
            }
            else
            {
                if (SBUF!=0x55)
                {
                    RevState=revhead1;//状态机复位
                }
            }
            break;

            //等待接收数据包长度
        case  revpakagelen:
            revlen=SBUF;
            if (revlen>revbufflen)
            {
                RevState=revhead1;//状态机复位
                ComErr=Com_revOflow; //准备接收数据
            }
            else
            {
                checkSum=0;
                checkSum+=SBUF;
                RevPtr=0;  //接收指针复位
                RevState=revpakage;
            }
            break;

            //等待接收数据内容
        case revpakage:
            revbuff[RevPtr++]=SBUF;
            checkSum+=SBUF;
            if (RevPtr==revlen)
            {
                RevState=revcrc;
            }
            break;

            //等待接收校验和
        case revcrc:
            if (checkSum==SBUF)
            {
                ComErr=Com_revOK;//接收正确

            }
            else
            {
                ComErr=Com_revCRCErr;//接收不正确
            }
            RevState=revhead1;//状态机复位
        }
    }


}
//********************************通信*************************************************************

使用特权

评论回复
42
acute1110| | 2011-6-1 11:44 | 只看该作者
直接打印10进制输出,能看懂就好了

使用特权

评论回复
43
huangqi412| | 2011-6-1 12:04 | 只看该作者
:o

使用特权

评论回复
44
程序匠人|  楼主 | 2011-6-1 12:09 | 只看该作者
匠人用的波形绘制模块是收费的库吧~ 还是您搞到了**的版本?
原野之狼 发表于 2011-6-1 09:15


波形是自己画的。:)

使用特权

评论回复
45
程序匠人|  楼主 | 2011-6-1 12:11 | 只看该作者
我用串口一般有两种用法
1。数据监测,就是实时显示发上来的数据,如匠人现在做的一样
2。用作Linux系统的命令行界面。 像TeraCom一样

第一种用法时,数据各类繁多,有符号的,无符号的,标志,长度各不相同,物理 ...
lxyppc 发表于 2011-6-1 09:11


在我的串口平台中,符号位、和数据长度是可选的

使用特权

评论回复
46
程序匠人|  楼主 | 2011-6-1 12:14 | 只看该作者
我认为用0xFF做包头的好处是热插拔串口时更容易同步.用0x55/0xAA意义一样.

Apple的IPOD/IPHONE/IPAD的扩展口的通讯协议就是用0xFF,0x55开头.

平时要求简单时用AccessPort,因为可以调整窗口宽度进而调整显示数据长 ...
caner_hn 发表于 2011-6-1 10:46


我要做的,是不但要保存数据文件,还要保存波形图,以及其它设置。

使用特权

评论回复
47
精益求精| | 2011-6-1 12:17 | 只看该作者
匠人的串口调试平台很强大,应该用了很多年了吧?

使用特权

评论回复
48
程序匠人|  楼主 | 2011-6-1 12:20 | 只看该作者
匠人的串口调试平台很强大,应该用了很多年了吧?
精益求精 发表于 2011-6-1 12:17


这几天刚做的,很多功能还不完善。所以上来征集大家的意见和建议。
我的目标是要让这个平台适应大多数人用串口辅助调试时的一些共性的需求。

使用特权

评论回复
49
icecut| | 2011-6-1 13:28 | 只看该作者
匠人聪明过头了.........

只需要2件事.
1.留出编程接口.什么都适合的往往是不可能的.
2.能做高速传输.串口有点慢....

使用特权

评论回复
50
谈的元| | 2011-6-1 14:05 | 只看该作者
匠人聪明过头了.........

只需要2件事.
1.留出编程接口.什么都适合的往往是不可能的.
2.能做高速传输.串口有点慢....
icecut 发表于 2011-6-1 13:28

支持1

使用特权

评论回复
51
lxyppc| | 2011-6-1 14:28 | 只看该作者
匠人聪明过头了.........

只需要2件事.
1.留出编程接口.什么都适合的往往是不可能的.
2.能做高速传输.串口有点慢....
icecut 发表于 2011-6-1 13:28

编程接口太底层了,能支持脚本最好

使用特权

评论回复
52
ocon| | 2011-6-1 14:31 | 只看该作者
做得不错,好的调试工具是成功的基础。

使用特权

评论回复
53
adams.gh| | 2011-6-1 15:17 | 只看该作者
本帖最后由 adams.gh 于 2011-6-1 15:21 编辑
编程接口太底层了,能支持脚本最好
lxyppc 发表于 2011-6-1 14:28


这个好。弄个ini配置文件

匠人聪明过头了.........

只需要2件事.
1.留出编程接口.什么都适合的往往是不可能的.
2.能做高速传输.串口有点慢....
icecut 发表于 2011-6-1 13:28


U口调试助手?调试不需要很快的速度,串口人人都会,U口就算了吧

使用特权

评论回复
54
ahgao| | 2011-6-1 16:13 | 只看该作者
通常都是包头+长度+命令+数据+校验/包尾组成,但是这个东西个性化太多了,想都兼容是不可能的。

我比较推荐的方法是可以做一个框架,用脚本解释数据的含义。随着框架升级功能就会更加强大,比如图像和波形的显示。
我觉得匠人现在的程序做得有点复杂了,毕竟这个东西只是调试用,问题解决了以后就意义不大了,本身就有上位机软件的就更不用说了。

使用特权

评论回复
55
lphaff| | 2011-6-1 16:16 | 只看该作者
坚定的串口辅助调试使用者之一!!!
调试AD,调试PWM什么的,都是串口,,
可惜不会编上位机,所以,,
只能用现有的一些串口调试工具看呆板的数据了。

使用特权

评论回复
56
aisenliu| | 2011-6-1 16:19 | 只看该作者
嗯,还不错,值得学习

使用特权

评论回复
57
lxc806705| | 2011-6-1 16:24 | 只看该作者
匠人,能不能将计算机的时间加入到串口调试显示中,另外实现大数据文件的存储,相当于超级终端的抓包

使用特权

评论回复
58
mohanwei| | 2011-6-1 16:52 | 只看该作者
这个不开放源码基本没有什么意义……
需要用到串口调试的地方,一般只有两种情况:纯粹测试原始数据的收发——各种串口调试工具已经可以满足要求了;稍微高级点能生成、识别自己设备的数据帧——这个一般就是开发者自己搞了,毕竟上位机的编程比下位机的要简单得多,下位机都搞出来了,上位机方面下载个串口助手的框架,粘贴下代码就搞定了。

使用特权

评论回复
59
程序匠人|  楼主 | 2011-6-1 17:23 | 只看该作者
匠人,能不能将计算机的时间加入到串口调试显示中,另外实现大数据文件的存储,相当于超级终端的抓包
lxc806705 发表于 2011-6-1 16:24


把计算机的时间加入到串口调试显示中?请问你是希望怎么做?只是显示在窗口呢,还是要发送给下位机?

大数据文件的存储?请问要多大的数据?

盼复,谢谢!

使用特权

评论回复
60
程序匠人|  楼主 | 2011-6-1 17:31 | 只看该作者
这个不开放源码基本没有什么意义……
需要用到串口调试的地方,一般只有两种情况:纯粹测试原始数据的收发——各种串口调试工具已经可以满足要求了;稍微高级点能生成、识别自己设备的数据帧——这个一般就是开发者 ...
mohanwei 发表于 2011-6-1 16:52


会VB的,大概也看不上我那破烂程序。
不会VB的,大概也看不懂我那破烂程序。

会的看不上,不会的看不懂。开源不好玩。再说了,网上已经有一大堆开源。

现在的各种串口调试工具已经可以满足要求。但是我觉得都不够智能,有些只是收发数据;有些做的很复杂的,却又太缺乏共性。也不好用。

我想做的就是:
1、兼容大多数协议和数据格式
2、自动多组(16组)发码
3、智能识别帧,并从帧中提取有用的数据(而且是多通道的,可以同时采集8个不同的数据)
4、提取后的数据,还要送示波器或码表显示波形或即时状态。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则