打印

提取出来的都是buf1中的

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

使用特权

评论回复
沙发
wangpe| | 2019-12-15 17:13 | 只看该作者
编译时用什么模式

使用特权

评论回复
板凳
zhanglli|  楼主 | 2019-12-15 17:16 | 只看该作者
large模式

使用特权

评论回复
地板
langgq| | 2019-12-15 17:20 | 只看该作者
在变量窗口看buf1【】,buf2【】,变量1,变量2不就知道了

使用特权

评论回复
5
wangzsa| | 2019-12-15 17:23 | 只看该作者
如果这些值没有问题,建议在关键代码部分禁止中断

使用特权

评论回复
6
zhanglli|  楼主 | 2019-12-15 17:26 | 只看该作者
我还是没搞明白,需要仿真吗?

使用特权

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

使用特权

评论回复
8
zhanglli|  楼主 | 2019-12-15 17:34 | 只看该作者
谢谢,我再考虑考虑,总觉得边接收边处理不好办。谢谢热心的朋友!

使用特权

评论回复
9
llia| | 2019-12-15 17:36 | 只看该作者
肯定是XDATA超范围了。楼主可考虑外接EEPROM

使用特权

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

使用特权

评论回复
11
langgq| | 2019-12-15 17:41 | 只看该作者
奇怪了啊

使用特权

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

使用特权

评论回复
13
langgq| | 2019-12-15 17:48 | 只看该作者
_at_ 0x0000之间要有空格_at_空格0x0000

使用特权

评论回复
14
wangzsa| | 2019-12-15 17:50 | 只看该作者

另外 xdata 是片上扩展存储器,不是外部存储器空间

使用特权

评论回复
15
zhuww| | 2019-12-15 17:53 | 只看该作者
变量1=buf1;和变量2=buf2[j]; 值一样是否 值本来就一样?

使用特权

评论回复
16
zhanglli|  楼主 | 2019-12-15 17:56 | 只看该作者
结贴了,多谢大家讨论这么多哈,呵呵

使用特权

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

本版积分规则

1016

主题

9386

帖子

1

粉丝