搜索
bottom↓
回复: 7

怎样用串口接收和处理0x00?(已解决)

[复制链接]

出0入0汤圆

发表于 2014-5-19 08:35:27 | 显示全部楼层 |阅读模式
本帖最后由 FSL_TICS_ZJJ 于 2014-5-19 10:17 编辑

目前在做一个步进控制,由于行程比较长,细分也要到64细分,步数值会比较大,所以采用32bit来计步数
上位机指令是中设定固定4个字节的16进制数来表示步数,在发送步数时发现当步数前面的字节为0x00时处理结果不对
比如说我要发送 10000步用4字节16进制数就是 0x00  0x00  0x27   0x10      第一和第二字节就出现问题了
请大虾们指导一下,这个该怎么接收和处理
注:我是用串口中断来接收数据的,每接收一个字节中断一次

出0入0汤圆

发表于 2014-5-19 08:43:50 | 显示全部楼层
用协议,例如SLIP或PPP协议,在有效数据首尾增加终止符号,例如
0x7E …………数据……0x7E
每次处理的时候用一个指令缓冲来处理这个数据
1、遇到0x7E就结束一次接收,处理之前的命令
2、超出数据缓存的容量也结束
缓冲区大小设定为数据长度的两倍,可以有效避免问题2的扩散

出0入0汤圆

发表于 2014-5-19 08:50:39 | 显示全部楼层
00在传送时也都会有 start bit 跟 stop bit , 串口收到后也都会产生中断, 不太会有问题的.

出0入0汤圆

发表于 2014-5-19 09:21:54 | 显示全部楼层
0x00也是可以接收的,没有问题的,应该是你处理那边出了问题吧

出0入0汤圆

 楼主| 发表于 2014-5-19 09:31:12 | 显示全部楼层
解决了,确实是我处理出现了问题, 因为现有的程序是以前的工程模板改过来的,之前是用ASSCLL码发送的,为了防止出现0x00,碰到0x00就return了,所以摆了这么个乌龙,谢谢各位,问题解决了

出0入0汤圆

发表于 2014-5-19 09:47:22 | 显示全部楼层
我一般都是用ASCII做协议,虽然慢了一点,但出错的机率比较小!

出0入0汤圆

 楼主| 发表于 2014-5-19 10:21:46 | 显示全部楼层
本帖最后由 cn_x 于 2014-5-19 10:24 编辑
wangpengcheng 发表于 2014-5-19 09:47
我一般都是用ASCII做协议,虽然慢了一点,但出错的机率比较小!


我也一直用ASCLL码,但是这次要兼容别的控制卡的指令,所以也就只能用十六进制了
而且使用ASCLL码的话用4个字节表示步数是操作不了的  比如说步数是FF FF   FF  FF   
用ASCLL码代表十六进制的话就得发送 0x46  0x46  0x46  0x46  0x46  0x46  0x46  0x46八个字节才行吧
用10进制发也要很多位,麻烦的

出0入0汤圆

发表于 2014-5-19 11:44:20 | 显示全部楼层
cn_x 发表于 2014-5-19 10:21
我也一直用ASCLL码,但是这次要兼容别的控制卡的指令,所以也就只能用十六进制了
而且使用ASCLL码的话用4 ...

printf("0x%08x",var);
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-2 19:55

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表