打印
[Kinetis]

freertos_lwip 缓冲区描述符

[复制链接]
1685|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
m__dd|  楼主 | 2013-12-20 17:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
K60 下面是官方例程中的。
由于发送或接收描述符环开始寄存器的低3位均为0,所以第一个缓冲区描述符BD首地址必需按8字节对齐,官方手册建议16字节对齐,因此有如下代码:
  /* 寻找<发送描述符数组空间>中的16字节对齐的地址,即低四位为0的起始地址*/
unsigned char *pcBufPointer;//为函数内部定义的临时变量
  pcBufPointer = &( xENETTxDescriptors_unaligned[ 0 ] );
  while( ( ( unsigned long ) pcBufPointer & 0x0fUL ) != 0 )
  {
    pcBufPointer++;
  }
  xENETTxDescriptors = ( NBUF * ) pcBufPointer;
  /* 寻找<接收描述符数组空间>中的16字节对齐的地址*/
  pcBufPointer = &( xENETRxDescriptors_unaligned[ 0 ] );
  while( ( ( unsigned long ) pcBufPointer & 0x0fUL ) != 0 )
  {
    pcBufPointer++;
  }
  xENETRxDescriptors = ( NBUF * ) pcBufPointer;

/*
   * 可为何有如下代码:寻找<接收缓冲区空间>中的16字节对齐的地址。
   * 接收缓冲区没有要求必须对齐啊!,求解?
   */

  pcBufPointer = &( ucENETTxBuffers[ 0 ] );
  while( ( ( unsigned long ) pcBufPointer & 0x0fUL ) != 0 )
  {
    pcBufPointer++;
  }


数据定义(全局变量):
static unsigned char xENETTxDescriptors_unaligned[ ( configNUM_ENET_TX_BUFFERS * sizeof( NBUF ) ) + 16 ];
static unsigned char xENETRxDescriptors_unaligned[ ( configNUM_ENET_RX_BUFFERS * sizeof( NBUF ) ) + 16 ];
static unsigned char ucENETTxBuffers[ ( configNUM_ENET_TX_BUFFERS * configENET_TX_BUFFER_SIZE ) + 16 ];
static unsigned char ucENETRxBuffers[ ( configNUM_ENET_RX_BUFFERS * configENET_RX_BUFFER_SIZE ) + 16 ];
static NBUF *xENETTxDescriptors;
static NBUF *xENETRxDescriptors;

相关帖子

沙发
m__dd|  楼主 | 2013-12-23 13:41 | 只看该作者
这是单机版吗?

使用特权

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

本版积分规则

11

主题

79

帖子

0

粉丝