diff options
| author | aozima <[email protected]> | 2014-05-15 21:46:26 +0800 |
|---|---|---|
| committer | aozima <[email protected]> | 2014-05-15 21:46:26 +0800 |
| commit | e32c1afa3ae2a6458cc86065cdc2b9e1eb774c41 (patch) | |
| tree | 48222bfa122af56010951445dac456e5506330fe | |
| parent | 072fd38a439b5fa4cd703a2cac0e3dc3073a78fd (diff) | |
update stm32f107 ethernet driver: optimize eth_rx, use memcpy.
| -rw-r--r-- | bsp/stm32f107/drivers/stm32_eth.c | 20 |
1 files changed, 6 insertions, 14 deletions
diff --git a/bsp/stm32f107/drivers/stm32_eth.c b/bsp/stm32f107/drivers/stm32_eth.c index 7137ce982b..1870ac355f 100644 --- a/bsp/stm32f107/drivers/stm32_eth.c +++ b/bsp/stm32f107/drivers/stm32_eth.c @@ -3283,7 +3283,7 @@ rt_err_t rt_stm32_eth_tx( rt_device_t dev, struct pbuf* p) struct pbuf *rt_stm32_eth_rx(rt_device_t dev) { struct pbuf* p; - rt_uint32_t offset = 0, framelength = 0; + rt_uint32_t framelength = 0; /* init p pointer */ p = RT_NULL; @@ -3303,24 +3303,16 @@ struct pbuf *rt_stm32_eth_rx(rt_device_t dev) p = pbuf_alloc(PBUF_LINK, framelength, PBUF_RAM); if (p != RT_NULL) { - rt_uint8_t* ptr; + const char * from; struct pbuf* q; - rt_size_t len; + + from = (const char *)(DMARxDescToGet->Buffer1Addr); for (q = p; q != RT_NULL; q= q->next) { - ptr = q->payload; - len = q->len; - /* Copy the received frame into buffer from memory pointed by the current ETHERNET DMA Rx descriptor */ - while (len) - { - *ptr = (*(__IO uint8_t *)((DMARxDescToGet->Buffer1Addr) + offset)); - - offset ++; - ptr ++; - len --; - } + memcpy(q->payload, from, q->len); + from += q->len; } #ifdef ETH_RX_DUMP |
