[ZLG-ARM] 2220死在串口中断了?该死的RLS

[复制链接]
3363|12
 楼主| 有意思 发表于 2007-3-23 15:43 | 显示全部楼层 |阅读模式
串口在连续收大量数据时死机了,会是什么原因导致,堆栽空间,还是变量RAM空间不足?<br />接收数据间隔过快就会死机
liujigan 发表于 2007-3-23 16:24 | 显示全部楼层

累了呗

  
 楼主| 有意思 发表于 2007-3-23 18:45 | 显示全部楼层

???

什么意思
 楼主| 有意思 发表于 2007-3-25 11:44 | 显示全部楼层

死在中断里了

  
hotpower 发表于 2007-3-25 12:39 | 显示全部楼层

提高波特率或减小包长或增大字节发送间隔

  
 楼主| 有意思 发表于 2007-3-25 14:09 | 显示全部楼层

和上位机联机

波特率协议定的是4800,不好改,<br />增加字节发送间隔,我是在收数据时死在中断里的<br />发数据不在中断中发送,<br />while((U0LSR&nbsp;&&nbsp;0x40)&nbsp;==&nbsp;0);<br />这样判断发送完成的<br />isr程序<br />{<br />&nbsp;&nbsp;onled1;<br />&nbsp;&nbsp;disableirq();<br />&nbsp;&nbsp;&nbsp;&nbsp;...<br />&nbsp;&nbsp;offled1;&nbsp;&nbsp;//放在这,灯一直都是灭的<br />&nbsp;&nbsp;endableirq();<br />&nbsp;&nbsp;offled1;&nbsp;&nbsp;//放在这,运行N多小时后,就死机了,灯不灭,主要是在整点<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//调时时,数据包较长,<br />}
 楼主| 有意思 发表于 2007-3-25 22:03 | 显示全部楼层

to hotpower

我提高波特率试过了,我用SSCOM向目标发送6字节长度的巡检帧,波特率38400,定时发送,间隔100ms,目标收到后回送一帧8字节的应答,运行了一个下午没问题,刚刚晚上10点多我发现他死机了,根据灯判断还是死在中断里了,很郁闷,感觉长时间运行到某个时刻就会死,<br />我刚刚变态的把SSCom中定时发送间隔调为10MS,一发,不到1s就死??
hotpower 发表于 2007-3-25 23:55 | 显示全部楼层

编程方法有问题~~~

最好不要这样:<br />while((U0LSR&nbsp;&&nbsp;0x40)&nbsp;==&nbsp;0);<br />否则应该配合看门狗。<br /><br />如无狗,则应该用:<br />for(int&nbsp;i&nbsp;=&nbsp;0;(i&nbsp;&lt&nbsp;0x...)&nbsp;&&&nbsp;((U0LSR&nbsp;&&nbsp;0x40)&nbsp;==&nbsp;0);i++);<br /><br />或:<br />for(int&nbsp;i&nbsp;=&nbsp;0;i&nbsp;&lt&nbsp;0x...;i&nbsp;++)&nbsp;{<br />&nbsp;&nbsp;if&nbsp;(U0LSR&nbsp;&&nbsp;0x40)&nbsp;break;<br />}<br /><br />我认为还是收发都用中断+FIFO+缓存较好。<br /><br />4800要死机真是太有意思了~~~<br />1个字节收发几乎1ms时间,真是“抽袋烟”都不耽误事情~~~
 楼主| 有意思 发表于 2007-3-26 14:23 | 显示全部楼层

死在中断返回前

问题是死在中断返回前<br />void&nbsp;UART0_ISR&nbsp;(void)<br />{<br />uint32&nbsp;i;<br />uint32&nbsp;&nbsp;bak;<br /><br />ON_LED4();<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />Txd485_UART0();<br />disable_IRQ();<br />bak&nbsp;=&nbsp;VICIntEnable;<br />VICIntEnClr&nbsp;=&nbsp;(1&nbsp;&lt&lt&nbsp;5)&nbsp;|(1&nbsp;&lt&lt&nbsp;13)&nbsp;|&nbsp;(1&nbsp;&lt&lt&nbsp;7)&nbsp;|(1&nbsp;&lt&lt&nbsp;6));<br /><br />/*<br />中断处理<br />*/<br /><br />VICIntEnable&nbsp;=&nbsp;bak;<br />VICVectAddr&nbsp;=&nbsp;0x00;<br />//OFF_LED4();&nbsp;&nbsp;&nbsp;&nbsp;//放在此处,即使死机,led4也是灭的<br />enable_IRQ();<br />Rcv485_UART0();<br />OFF_LED4();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//放在此处,死机时,led4常亮,<br />}
liujigan 发表于 2007-3-26 14:56 | 显示全部楼层

re

(1)是不是2220吸收电流有点大,常在极限附近,建议加一些扩展IC解决。<br />(2)电源干扰,建议加兀形滤波
 楼主| 有意思 发表于 2007-3-26 15:12 | 显示全部楼层

不是吧

不会是硬件上的问题吧,是485通信模式,<br />
hotpower 发表于 2007-3-26 21:42 | 显示全部楼层

UART0_ISR()真是一团糟~~~不知你想干什么???

  
 楼主| 有意思 发表于 2007-3-27 08:32 | 显示全部楼层

书上的

isr都是按照深入潜出书上的模式写的,<br />中间的良灯是自己调试加的,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

79

主题

331

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部
0