打印

串口接收前置机发的数据

[复制链接]
687|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kangzj|  楼主 | 2015-8-13 19:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
连续两帧,帧之间没有间隔。其中一帧的长度为90多字节,另一帧约70字节。我用uchar xdata siobuf[180]接收全部数据,然后把它们分解为uchar xdata buf1[100]和uchar xdata buf2[80],为了验证接收的数据是否正确,我通过P1上的串口把数据发送到串口调试助手上进行显示,到这一步结果都正确。以下就出问题了,我通过类似“变量1=buf1[i];和变量2=buf2[j];”的方法提取buf1和buf2中的有效字段,提取出来的都是buf1中的,这是怎么回事呀
沙发
zwll| | 2015-8-13 19:34 | 只看该作者
编译时用什么模式

使用特权

评论回复
板凳
kangzj|  楼主 | 2015-8-13 19:34 | 只看该作者
large模式

使用特权

评论回复
地板
chuxh| | 2015-8-13 19:34 | 只看该作者

在变量窗口看buf1【】,buf2【】,变量1,变量2不就知道了

使用特权

评论回复
5
juventus9554| | 2015-8-13 19:35 | 只看该作者
如果这些值没有问题,建议在关键代码部分禁止中断

使用特权

评论回复
6
kangzj|  楼主 | 2015-8-13 19:35 | 只看该作者
我还是没搞明白,需要仿真吗?

使用特权

评论回复
7
司徒老鹰| | 2015-8-13 19:36 | 只看该作者
xdata的速度有点慢,使用时需要考虑这个因素,避免出现错误。单片机因为内存小,一般最好不要一次接收这么多的数据放到内存里,要充分发挥单片机运行速度快的优势,接收到的数据立即进行处理,处理之后将不需要的数据丢弃,避免长时间占用内存。

使用特权

评论回复
8
kangzj|  楼主 | 2015-8-13 19:36 | 只看该作者
谢谢,我再考虑考虑,总觉得边接收边处理不好办。谢谢热心的朋友!

使用特权

评论回复
9
llljh| | 2015-8-13 19:36 | 只看该作者
肯定是XDATA超范围了。楼主可考虑外接EEPROM

使用特权

评论回复
10
kangzj|  楼主 | 2015-8-13 19:36 | 只看该作者
我看了看编译结果,xdata用了400字节,内部有4K字节呢。在接收的数据中两个字段是8位数,还有一个7位数,要和其它数累加。我看了只能接收完再处理。

使用特权

评论回复
11
pengf| | 2015-8-13 19:37 | 只看该作者
奇怪了啊

使用特权

评论回复
12
kangzj|  楼主 | 2015-8-13 19:37 | 只看该作者
再请教各位,使用char xdata siobuf[180] _at_ 0x0000;需要什么条件?编译时提示_at_前面缺“;”。外部存储器空间我也定义在0x0000-0x7fff了。

使用特权

评论回复
13
forget345| | 2015-8-14 14:11 | 只看该作者
本帖最后由 forget345 于 2015-8-14 14:18 编辑
kangzj 发表于 2015-8-13 19:37
再请教各位,使用char xdata siobuf[180] _at_ 0x0000;需要什么条件?编译时提示_at_前面缺“;”。外部存 ...

_at_ 0x0000之间要有空格_at_空格0x0000
另外 xdata 是片上扩展存储器,不是外部存储器空间
变量1=buf1;和变量2=buf2[j]; 值一样是否 值本来就一样?

使用特权

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

本版积分规则

672

主题

7007

帖子

2

粉丝