我做的简单以太网交换机实现

本文记录了一次使用NIOS核和两块网卡自制简易以太网交换机的过程,遇到的挑战包括全局变量引发的可重入性问题以及中断处理效率低下导致的性能瓶颈。通过添加信号量和优化中断处理,实现了数据的双向转发。但实验结果显示,网卡中断频率过高可能影响系统响应,需进一步研究和优化。
摘要由CSDN通过智能技术生成

   由于目的是,用Fifo实现单向隔离,所以第一步是想实现以太网交换机的双向转发功能。 
用NIOS核,外接了两块网卡,连接后测试,发现不通。检查代码发现是一个if判断出了问题。又匆忙修改了设计,再试验,ping包能通了,但是效率很差。分析问题原因,才开始怀疑,由于收发函数用了全局变量,如果同时使用,可能会发生可重入性问题,在收发函数加入了信号量,并用  dev->rxBuf = OSMemGet(BufPtr, &err);//开辟内存,加入后发现效果不理想。
   NIOS6真是巨慢,下载执行估计得2分钟,能把人累4:(,仔细调试了N遍程序都不理想。后来干脆在学校实验室找了2台486计算机,用两根交叉网线连接,运行:发现ping每次都能通,最后得出的结论是:网卡中断频率太高,系统响应不过来。
  看看我的初始化代码:开两个接收任务,中断数据后投递到邮箱中再处理。
//初始化路由设备
err_t InitRoutingDevices(FILE *fp)
{
  err_t   ret_code = ERR_OK;
  INT8U  errCode = 0;
  INT8U err; //for mutex 用
 
  msgqueue = OSQCreate(&msgqueueTbl[0], MSG_QUEUE_SIZE);
  BufPtr = OSMemCreate(Buf, MAX_PACKET_SIZE, 4, &err);
  //1. netcard 1
  pNetif0->ID

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值