[Kinetis] freertos_lwip 缓冲区描述符

[复制链接]
1917|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

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