搜索
bottom↓
回复: 5

UART通信不稳定

[复制链接]

出0入0汤圆

发表于 2009-11-26 17:17:33 | 显示全部楼层 |阅读模式
我用的NEC9234芯片,通过半双工485转换器(两片MAX3082构成)与电脑主台软件进行通信,问题如下:
    1。接收异常。由于协议约定帧起始有1-4个OXFE唤醒字节,我在检测到此字符时进行接收数组指针后退操作,问题是,程序运行时,接收时好时坏,有时前三个正常字节会被滤掉,有时却一切正常。
    2。发送异常。收到帧后,按照规约要求进行解码,然后组成发送报文开始发送,发送的数组中有一个或几个值与内存中的数值不符,随机出现。有时候还会出现发送的数值很短,只有正常长度的一半左右。
    3。中断异常。在接收中断中,指定的数组指针会突然变化,指错地方,导致不能接收。
    各位高手,希望你们能不吝赐教,非常感谢!

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2009-11-27 09:04:17 | 显示全部楼层
堆栈是不是溢出了?

出0入0汤圆

 楼主| 发表于 2009-11-27 14:36:35 | 显示全部楼层
请问sophie0403:
    怎么判断是否是堆栈溢出?

出0入0汤圆

发表于 2009-11-27 16:30:52 | 显示全部楼层
在PM+中“tool”下拉“startup 78K0s”,该软件会显示所有子程序所用堆栈的大小,红色为最大,如果红色标出的大小超过了你所定义的堆栈大小,就有可能出现不可预知的错误,你所定义的堆栈大小在.sym文件中可以看到:起始地址_@STBEG 结束地址_@STEND;
如果没有安装78K0s,就在.prn文件中看,打开.prn文件搜索STACK_SIZE,自然能找出所有程序的堆栈大小,前提:compiler option--->output中选中create assembler sourse module

出0入0汤圆

发表于 2009-11-27 16:32:30 | 显示全部楼层
不好意思,写错了,78k0s是SK78k0S

出0入0汤圆

 楼主| 发表于 2009-12-4 12:32:46 | 显示全部楼层
非常感谢各位的指点,问题解决了,确实是堆栈溢出
方法:
tool”下拉compoliers options /startup routine/把using fixed area of standard I前面的钩走掉就可以了。
请问 “NEC-etouch”:我的PM+中“tool”下拉为什么没有“startup SK78K0s”选项?我装了CC78K0S。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-16 09:24

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

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