嵌入式linux下通信的方案咨询、感谢大拿指点

[复制链接]
2280|3
 楼主| niuniu711 发表于 2008-7-7 23:34 | 显示全部楼层 |阅读模式
---------------------------------------------------------------------<br /><br />/目标/:<br /><br />实现&nbsp;&quot;&nbsp;ARM(s3c2410)-Linux2.4.18&nbsp;&quot;&nbsp;与&nbsp;&quot;&nbsp;DSP&nbsp;LF2812&nbsp;模块&nbsp;&quot;&nbsp;<br />两个系统之间大约&nbsp;18KB/s&nbsp;的三维实时数据通信。<br /><br />两个板子系统预留的通信接口方式有:CAN&nbsp;或&nbsp;串行RS422<br />(由于ARM系统上图形处理的需要,所以构建了系统,采用Linux)<br />(ARM系统由我负责硬件设计与系统构建,DSP模块为别人设计的)<br /><br />---------------------------------------------------------------------<br /><br />/现有问题/:<br /><br />目前我一直采用CAN的方式,但是ARM系统的CAN接口是通过MCP2510外扩,<br />每帧数据都会产生一个中断,在CAN驱动程序中处理中断,<br />感觉ARM-linux对中断的频繁处理响应太慢,不能满足&nbsp;18KB/s&nbsp;的数据通信。<br /><br />我做过测试,在CAN驱动里加入内核定时器,在中断处理程序中加入中断计数,<br />来测试CAN接口的吞吐率,发现系统可能对中断响应太频繁,每秒最多响应200~300个中断。<br />并且此时对应用程序影响很大。<br /><br />(如果采用CAN,若要满足通信要求,每秒需约4000个中断,即250us一次中断<br />并且还需要考虑在现有平台下,这些频繁中断对应用程序的影响)<br /><br />---------------------------------------------------------------------<br /><br />/问题请教/:<br /><br />1.&nbsp;我是否就不应该采用这种频繁中断的方式来进行&nbsp;18KB/s&nbsp;的数据传输?<br />&nbsp;&nbsp;&nbsp;这种方案本来就是行不通的?是幼稚的?<br /><br />2.&nbsp;目前在现有平台(ARM9&nbsp;S3C2410&nbsp;-&nbsp;Linux2.4.18)下<br />&nbsp;&nbsp;&nbsp;我是否可以采用RS422,&nbsp;通过串口DMA传输的方式来满足通信?<br /><br />3.&nbsp;大家觉得这种通信最好采用什么样的方式呢?双口RAM?还是?<br />&nbsp;&nbsp;&nbsp;(系统硬件目前没有设计双口RAM)<br /><br /><br /><br />---------------------------------------------------------------------<br /><br />附件压缩包里包括:<br /><br />linux2.4.18_ARM9-S3C2410_MCP2510_CAN_driver&nbsp;(s3c2410-can-mcp2510.c&nbsp;与相关头文件)<br />CAN通信测试应用程序<br />ARM9-S3C2410_CAN接口扩展_硬件设计.JPG<br /><br />请高手给我看看,给我个建议的方案,感谢<br /> 相关链接:<a href='https://bbs.21ic.com/upfiles/img/20078/2007822234936464.rar'>https://bbs.21ic.com/upfiles/img/20078/2007822234936464.rar</a>
chunyang 发表于 2008-7-8 11:11 | 显示全部楼层

什么叫“三维实时数据通讯”?

18Kb/s的速度根本就是很低的速度,做好任务调度就是,中断可用可不用,由程序的整体结构和风格决定。建议楼主学习一下实时操作系统的思想,在操作系统下实现或者“裸奔”都行。
 楼主| niuniu711 发表于 2008-7-8 11:51 | 显示全部楼层

感谢 chunyang

“裸奔”程序不行,因为得支持图形重构,所以须加操作系统。<br /><br />中断可用可不用,是什么意思?<br /><br />MCP2510接收到数据后,将数据放到它的接收缓冲器中(它有2个接收缓冲器)<br />然后就会向ARM产生中断,通知ARM通过SPI接口来读取这一帧数据。<br />这样,我感觉,必须是每一帧产生一个中断。<br /><br />驱动程序中中断处理程序,如下:<br /><br />static&nbsp;void&nbsp;s3c2410_isr_mcp2510(int&nbsp;irq,&nbsp;void&nbsp;*dev_id,&nbsp;struct&nbsp;pt_regs&nbsp;*reg)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;byte;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;DPRINTK(&quot;enter&nbsp;interrupt!
&quot;);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;byte=MCP2510_Read(CANINTF);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if(byte&nbsp;&&nbsp;RX0INT){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MCP2510_Read_Can(3,&(mcp2510dev.MCP2510_Candata[mcp2510dev.nCanRevpos]));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MCP2510_WriteBits(CANINTF,&nbsp;~RX0INT,&nbsp;RX0INT);&nbsp;//&nbsp;Clear&nbsp;interrupt<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NextCanDataPos(mcp2510dev.nCanRevpos);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DPRINTK(&quot;mcp2510dev.nCanRevpos=&nbsp;%d
&quot;,&nbsp;mcp2510dev.nCanRevpos);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DPRINTK(&quot;mcp2510dev.nCanReadpos=&nbsp;%d
&quot;,&nbsp;mcp2510dev.nCanReadpos);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;if(byte&nbsp;&&nbsp;RX1INT){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MCP2510_Read_Can(4,&(mcp2510dev.MCP2510_Candata[mcp2510dev.nCanRevpos]));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MCP2510_WriteBits(CANINTF,&nbsp;~RX1INT,&nbsp;RX1INT);&nbsp;//&nbsp;Clear&nbsp;interrupt<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NextCanDataPos(mcp2510dev.nCanRevpos);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;if(byte&nbsp;&&nbsp;(RX0INT|RX1INT)){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wake_up_interruptible(&(mcp2510dev.wq));<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />
chunyang 发表于 2008-7-8 15:16 | 显示全部楼层

没有什么行不行的,只是要看是否必要

经验以及对相关技术的理解深度、广度将决定判断时的眼光。<br />是否使用中断同样要根据程序总体结构和任务的特性决定,即使使用中断,中断服务程序也可以只是简单的标志置位,大段的中断服务程序在多任务下是不明智的。<br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

9

帖子

0

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