diff --git a/bsp/stm32/libraries/HAL_Drivers/drv_eth.c b/bsp/stm32/libraries/HAL_Drivers/drv_eth.c index 41e86b513495cdf1c3a6c363f865fb35859c9621..8b16c561571bbc5504537f253f38f5487383b39e 100644 --- a/bsp/stm32/libraries/HAL_Drivers/drv_eth.c +++ b/bsp/stm32/libraries/HAL_Drivers/drv_eth.c @@ -41,9 +41,9 @@ struct rt_stm32_eth /* interface address info, hw address */ rt_uint8_t dev_addr[MAX_ADDR_LEN]; /* ETH_Speed */ - uint32_t ETH_Speed; + rt_uint32_t ETH_Speed; /* ETH_Duplex_Mode */ - uint32_t ETH_Mode; + rt_uint32_t ETH_Mode; }; static ETH_DMADescTypeDef *DMARxDscrTab, *DMATxDscrTab; @@ -167,8 +167,14 @@ static rt_err_t rt_stm32_eth_control(rt_device_t dev, int cmd, void *args) { case NIOCTL_GADDR: /* get mac address */ - if (args) rt_memcpy(args, stm32_eth_device.dev_addr, 6); - else return -RT_ERROR; + if (args) + { + SMEMCPY(args, stm32_eth_device.dev_addr, 6); + } + else + { + return -RT_ERROR; + } break; default : @@ -214,7 +220,7 @@ rt_err_t rt_stm32_eth_tx(rt_device_t dev, struct pbuf *p) while ((byteslefttocopy + bufferoffset) > ETH_TX_BUF_SIZE) { /* Copy data to Tx buffer*/ - memcpy((uint8_t *)((uint8_t *)buffer + bufferoffset), (uint8_t *)((uint8_t *)q->payload + payloadoffset), (ETH_TX_BUF_SIZE - bufferoffset)); + SMEMCPY((uint8_t *)((uint8_t *)buffer + bufferoffset), (uint8_t *)((uint8_t *)q->payload + payloadoffset), (ETH_TX_BUF_SIZE - bufferoffset)); /* Point to next descriptor */ DmaTxDesc = (ETH_DMADescTypeDef *)(DmaTxDesc->Buffer2NextDescAddr); @@ -236,7 +242,7 @@ rt_err_t rt_stm32_eth_tx(rt_device_t dev, struct pbuf *p) } /* Copy the remaining bytes */ - memcpy((uint8_t *)((uint8_t *)buffer + bufferoffset), (uint8_t *)((uint8_t *)q->payload + payloadoffset), byteslefttocopy); + SMEMCPY((uint8_t *)((uint8_t *)buffer + bufferoffset), (uint8_t *)((uint8_t *)q->payload + payloadoffset), byteslefttocopy); bufferoffset = bufferoffset + byteslefttocopy; framelength = framelength + byteslefttocopy; } @@ -327,7 +333,7 @@ struct pbuf *rt_stm32_eth_rx(rt_device_t dev) while ((byteslefttocopy + bufferoffset) > ETH_RX_BUF_SIZE) { /* Copy data to pbuf */ - memcpy((uint8_t *)((uint8_t *)q->payload + payloadoffset), (uint8_t *)((uint8_t *)buffer + bufferoffset), (ETH_RX_BUF_SIZE - bufferoffset)); + SMEMCPY((uint8_t *)((uint8_t *)q->payload + payloadoffset), (uint8_t *)((uint8_t *)buffer + bufferoffset), (ETH_RX_BUF_SIZE - bufferoffset)); /* Point to next descriptor */ dmarxdesc = (ETH_DMADescTypeDef *)(dmarxdesc->Buffer2NextDescAddr); @@ -338,7 +344,7 @@ struct pbuf *rt_stm32_eth_rx(rt_device_t dev) bufferoffset = 0; } /* Copy remaining data in pbuf */ - memcpy((uint8_t *)((uint8_t *)q->payload + payloadoffset), (uint8_t *)((uint8_t *)buffer + bufferoffset), byteslefttocopy); + SMEMCPY((uint8_t *)((uint8_t *)q->payload + payloadoffset), (uint8_t *)((uint8_t *)buffer + bufferoffset), byteslefttocopy); bufferoffset = bufferoffset + byteslefttocopy; } } @@ -385,7 +391,9 @@ void HAL_ETH_RxCpltCallback(ETH_HandleTypeDef *heth) rt_err_t result; result = eth_device_ready(&(stm32_eth_device.parent)); if (result != RT_EOK) + { LOG_I("RxCpltCallback err = %d", result); + } } void HAL_ETH_ErrorCallback(ETH_HandleTypeDef *heth) diff --git a/bsp/stm32/libraries/HAL_Drivers/drv_eth.h b/bsp/stm32/libraries/HAL_Drivers/drv_eth.h index 44eb75bbb80feeed77972830d01e06fcd469267f..3f981376976d929f0f9de96549705727fc53efb6 100644 --- a/bsp/stm32/libraries/HAL_Drivers/drv_eth.h +++ b/bsp/stm32/libraries/HAL_Drivers/drv_eth.h @@ -28,13 +28,12 @@ /* The PHY ID one register */ #define PHY_ID1_REG 0x02U - /* The PHY ID two register */ #define PHY_ID2_REG 0x03U - /* The PHY auto-negotiate advertise register */ #define PHY_AUTONEG_ADVERTISE_REG 0x04U + #ifdef PHY_USING_LAN8720A /* The PHY interrupt source flag register. */ #define PHY_INTERRUPT_FLAG_REG 0x1DU @@ -51,9 +50,8 @@ #define PHY_Status_SPEED_10M(sr) ((sr) & PHY_10M_MASK) #define PHY_Status_SPEED_100M(sr) ((sr) & PHY_100M_MASK) #define PHY_Status_FULL_DUPLEX(sr) ((sr) & PHY_FULL_DUPLEX_MASK) -#endif /* PHY_USING_LAN8720A */ -#ifdef PHY_USING_DM9161CEP +#elif defined(PHY_USING_DM9161CEP) #define PHY_Status_REG 0x11U #define PHY_10M_MASK ((1<<12) || (1<<13)) #define PHY_100M_MASK ((1<<14) || (1<<15)) @@ -69,9 +67,7 @@ #define PHY_LINK_CHANGE_MASK (1<<9) #define PHY_INT_MASK 0 -#endif /* PHY_USING_DM9161CEP */ - -#ifdef PHY_USING_DP83848C +#elif defined(PHY_USING_DP83848C) #define PHY_Status_REG 0x10U #define PHY_10M_MASK (1<<1) #define PHY_FULL_DUPLEX_MASK (1<<2) @@ -87,6 +83,6 @@ /* The PHY interrupt mask register. */ #define PHY_INTERRUPT_MASK_REG 0x12U #define PHY_INT_MASK (1<<5) -#endif /* PHY_USING_DP83848C */ +#endif #endif /* __DRV_ETH_H__ */ diff --git a/components/net/lwip-1.4.1/src/lwipopts.h b/components/net/lwip-1.4.1/src/lwipopts.h index 0b7e092d6c32ea44b49c8a483bb04631afb9dbf3..9148066d505ac4cc502645623c537eda9d3eb89b 100644 --- a/components/net/lwip-1.4.1/src/lwipopts.h +++ b/components/net/lwip-1.4.1/src/lwipopts.h @@ -222,6 +222,13 @@ #define LWIP_DBG_TYPES_ON (LWIP_DBG_ON|LWIP_DBG_TRACE|LWIP_DBG_STATE|LWIP_DBG_FRESH|LWIP_DBG_HALT) /* ---------- Memory options ---------- */ +#ifdef RT_USING_ASM_MEMCPY +#define MEMCPY(dst,src,len) rt_memcpy(dst,src,len) +#else +#define MEMCPY(dst,src,len) memcpy(dst,src,len) +#endif /* RT_USING_ASM_MEMCPY */ +#define SMEMCPY(dst,src,len) MEMCPY(dst,src,len) + #define MEM_ALIGNMENT 4 #define MEM_LIBC_MALLOC 1 diff --git a/components/net/lwip-1.4.1/src/netif/ethernetif.c b/components/net/lwip-1.4.1/src/netif/ethernetif.c index 4565f5e52801dfdfc4a71bf8ced827bb17c86599..40cd8fb6ef003058edf0ff965f9b2260c5cac4a3 100644 --- a/components/net/lwip-1.4.1/src/netif/ethernetif.c +++ b/components/net/lwip-1.4.1/src/netif/ethernetif.c @@ -201,14 +201,14 @@ int lwip_netdev_ping(struct netdev *netif, const char *host, size_t data_len, { return -RT_ERROR; } - rt_memcpy(&h, &res->ai_addr, sizeof(struct sockaddr_in *)); - rt_memcpy(&ina, &h->sin_addr, sizeof(ina)); + SMEMCPY(&h, &res->ai_addr, sizeof(struct sockaddr_in *)); + SMEMCPY(&ina, &h->sin_addr, sizeof(ina)); lwip_freeaddrinfo(res); if (inet_aton(inet_ntoa(ina), &target_addr) == 0) { return -RT_ERROR; } - rt_memcpy(&(ping_resp->ip_addr), &target_addr, sizeof(ip_addr_t)); + SMEMCPY(&(ping_resp->ip_addr), &target_addr, sizeof(ip_addr_t)); /* new a socket */ if ((s = lwip_socket(AF_INET, SOCK_RAW, IP_PROTO_ICMP)) < 0) @@ -331,7 +331,7 @@ static int netdev_add(struct netif *lwip_netif) netdev->mtu = lwip_netif->mtu; netdev->ops = &lwip_netdev_ops; netdev->hwaddr_len = lwip_netif->hwaddr_len; - rt_memcpy(netdev->hwaddr, lwip_netif->hwaddr, lwip_netif->hwaddr_len); + SMEMCPY(netdev->hwaddr, lwip_netif->hwaddr, lwip_netif->hwaddr_len); netdev->ip_addr = lwip_netif->ip_addr; netdev->gw = lwip_netif->gw; netdev->netmask = lwip_netif->netmask; diff --git a/components/net/lwip-2.0.2/src/lwipopts.h b/components/net/lwip-2.0.2/src/lwipopts.h index d559684c027fad3eaa8e0cc6f8dd76fa64c0197b..fdfe1437b25e64fac60de4aa070a85a5648c3ff2 100644 --- a/components/net/lwip-2.0.2/src/lwipopts.h +++ b/components/net/lwip-2.0.2/src/lwipopts.h @@ -230,14 +230,21 @@ #define LWIP_DBG_TYPES_ON (LWIP_DBG_ON|LWIP_DBG_TRACE|LWIP_DBG_STATE|LWIP_DBG_FRESH|LWIP_DBG_HALT) /* ---------- Memory options ---------- */ +#ifdef RT_USING_ASM_MEMCPY +#define MEMCPY(dst,src,len) rt_memcpy(dst,src,len) +#else +#define MEMCPY(dst,src,len) memcpy(dst,src,len) +#endif /* RT_USING_ASM_MEMCPY */ +#define SMEMCPY(dst,src,len) MEMCPY(dst,src,len) + #ifdef RT_LWIP_MEM_ALIGNMENT #define MEM_ALIGNMENT RT_LWIP_MEM_ALIGNMENT #else #define MEM_ALIGNMENT 4 #endif -#define MEMP_OVERFLOW_CHECK 1 //// -#define LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT 1 //// +#define MEMP_OVERFLOW_CHECK 1 +#define LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT 1 //#define MEM_LIBC_MALLOC 1 //#define MEM_USE_POOLS 1 //#define MEMP_USE_CUSTOM_POOLS 1 diff --git a/components/net/lwip-2.0.2/src/netif/ethernetif.c b/components/net/lwip-2.0.2/src/netif/ethernetif.c index 1c0f3ca9b279ef94bb481a218b7d79678f11c646..0b1943fdff0a8c2e3e8cfb5b7bf4ceed85daf657 100644 --- a/components/net/lwip-2.0.2/src/netif/ethernetif.c +++ b/components/net/lwip-2.0.2/src/netif/ethernetif.c @@ -210,14 +210,14 @@ int lwip_netdev_ping(struct netdev *netif, const char *host, size_t data_len, { return -RT_ERROR; } - rt_memcpy(&h, &res->ai_addr, sizeof(struct sockaddr_in *)); - rt_memcpy(&ina, &h->sin_addr, sizeof(ina)); + SMEMCPY(&h, &res->ai_addr, sizeof(struct sockaddr_in *)); + SMEMCPY(&ina, &h->sin_addr, sizeof(ina)); lwip_freeaddrinfo(res); if (inet_aton(inet_ntoa(ina), &target_addr) == 0) { return -RT_ERROR; } - rt_memcpy(&(ping_resp->ip_addr), &target_addr, sizeof(ip_addr_t)); + SMEMCPY(&(ping_resp->ip_addr), &target_addr, sizeof(ip_addr_t)); /* new a socket */ if ((s = lwip_socket(AF_INET, SOCK_RAW, IP_PROTO_ICMP)) < 0) @@ -340,7 +340,7 @@ static int netdev_add(struct netif *lwip_netif) netdev->mtu = lwip_netif->mtu; netdev->ops = &lwip_netdev_ops; netdev->hwaddr_len = lwip_netif->hwaddr_len; - rt_memcpy(netdev->hwaddr, lwip_netif->hwaddr, lwip_netif->hwaddr_len); + SMEMCPY(netdev->hwaddr, lwip_netif->hwaddr, lwip_netif->hwaddr_len); netdev->ip_addr = lwip_netif->ip_addr; netdev->gw = lwip_netif->gw; netdev->netmask = lwip_netif->netmask; diff --git a/components/net/lwip-2.0.3/src/lwipopts.h b/components/net/lwip-2.0.3/src/lwipopts.h index d559684c027fad3eaa8e0cc6f8dd76fa64c0197b..fdfe1437b25e64fac60de4aa070a85a5648c3ff2 100644 --- a/components/net/lwip-2.0.3/src/lwipopts.h +++ b/components/net/lwip-2.0.3/src/lwipopts.h @@ -230,14 +230,21 @@ #define LWIP_DBG_TYPES_ON (LWIP_DBG_ON|LWIP_DBG_TRACE|LWIP_DBG_STATE|LWIP_DBG_FRESH|LWIP_DBG_HALT) /* ---------- Memory options ---------- */ +#ifdef RT_USING_ASM_MEMCPY +#define MEMCPY(dst,src,len) rt_memcpy(dst,src,len) +#else +#define MEMCPY(dst,src,len) memcpy(dst,src,len) +#endif /* RT_USING_ASM_MEMCPY */ +#define SMEMCPY(dst,src,len) MEMCPY(dst,src,len) + #ifdef RT_LWIP_MEM_ALIGNMENT #define MEM_ALIGNMENT RT_LWIP_MEM_ALIGNMENT #else #define MEM_ALIGNMENT 4 #endif -#define MEMP_OVERFLOW_CHECK 1 //// -#define LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT 1 //// +#define MEMP_OVERFLOW_CHECK 1 +#define LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT 1 //#define MEM_LIBC_MALLOC 1 //#define MEM_USE_POOLS 1 //#define MEMP_USE_CUSTOM_POOLS 1 diff --git a/components/net/lwip-2.0.3/src/netif/ethernetif.c b/components/net/lwip-2.0.3/src/netif/ethernetif.c index 1c0f3ca9b279ef94bb481a218b7d79678f11c646..0b1943fdff0a8c2e3e8cfb5b7bf4ceed85daf657 100644 --- a/components/net/lwip-2.0.3/src/netif/ethernetif.c +++ b/components/net/lwip-2.0.3/src/netif/ethernetif.c @@ -210,14 +210,14 @@ int lwip_netdev_ping(struct netdev *netif, const char *host, size_t data_len, { return -RT_ERROR; } - rt_memcpy(&h, &res->ai_addr, sizeof(struct sockaddr_in *)); - rt_memcpy(&ina, &h->sin_addr, sizeof(ina)); + SMEMCPY(&h, &res->ai_addr, sizeof(struct sockaddr_in *)); + SMEMCPY(&ina, &h->sin_addr, sizeof(ina)); lwip_freeaddrinfo(res); if (inet_aton(inet_ntoa(ina), &target_addr) == 0) { return -RT_ERROR; } - rt_memcpy(&(ping_resp->ip_addr), &target_addr, sizeof(ip_addr_t)); + SMEMCPY(&(ping_resp->ip_addr), &target_addr, sizeof(ip_addr_t)); /* new a socket */ if ((s = lwip_socket(AF_INET, SOCK_RAW, IP_PROTO_ICMP)) < 0) @@ -340,7 +340,7 @@ static int netdev_add(struct netif *lwip_netif) netdev->mtu = lwip_netif->mtu; netdev->ops = &lwip_netdev_ops; netdev->hwaddr_len = lwip_netif->hwaddr_len; - rt_memcpy(netdev->hwaddr, lwip_netif->hwaddr, lwip_netif->hwaddr_len); + SMEMCPY(netdev->hwaddr, lwip_netif->hwaddr, lwip_netif->hwaddr_len); netdev->ip_addr = lwip_netif->ip_addr; netdev->gw = lwip_netif->gw; netdev->netmask = lwip_netif->netmask; diff --git a/components/net/lwip-2.1.2/src/lwipopts.h b/components/net/lwip-2.1.2/src/lwipopts.h index 2cd7cb023aff9588f36fc9c8e111f864c131fc0b..a964ab13ac88e28150e393a58e6434462dfb0831 100644 --- a/components/net/lwip-2.1.2/src/lwipopts.h +++ b/components/net/lwip-2.1.2/src/lwipopts.h @@ -242,9 +242,16 @@ #endif /* ---------- Memory options ---------- */ +#ifdef RT_USING_ASM_MEMCPY +#define MEMCPY(dst,src,len) rt_memcpy(dst,src,len) +#else +#define MEMCPY(dst,src,len) memcpy(dst,src,len) +#endif /* RT_USING_ASM_MEMCPY */ +#define SMEMCPY(dst,src,len) MEMCPY(dst,src,len) + #define MEM_ALIGNMENT 4 -#define MEMP_OVERFLOW_CHECK 1 //// -#define LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT 1 //// +#define MEMP_OVERFLOW_CHECK 1 +#define LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT 1 //#define MEM_LIBC_MALLOC 1 //#define MEM_USE_POOLS 1 //#define MEMP_USE_CUSTOM_POOLS 1 diff --git a/components/net/lwip-2.1.2/src/netif/ethernetif.c b/components/net/lwip-2.1.2/src/netif/ethernetif.c index 81dd792f292807a8c9db86f9be923411e64af81a..bd4db225ee9b8f4316a59667273cf9f2d2a0da70 100644 --- a/components/net/lwip-2.1.2/src/netif/ethernetif.c +++ b/components/net/lwip-2.1.2/src/netif/ethernetif.c @@ -208,14 +208,14 @@ int lwip_netdev_ping(struct netdev *netif, const char *host, size_t data_len, { return -RT_ERROR; } - rt_memcpy(&h, &res->ai_addr, sizeof(struct sockaddr_in *)); - rt_memcpy(&ina, &h->sin_addr, sizeof(ina)); + SMEMCPY(&h, &res->ai_addr, sizeof(struct sockaddr_in *)); + SMEMCPY(&ina, &h->sin_addr, sizeof(ina)); lwip_freeaddrinfo(res); if (inet_aton(inet_ntoa(ina), &target_addr) == 0) { return -RT_ERROR; } - rt_memcpy(&(ping_resp->ip_addr), &target_addr, sizeof(ip_addr_t)); + SMEMCPY(&(ping_resp->ip_addr), &target_addr, sizeof(ip_addr_t)); /* new a socket */ if ((s = lwip_socket(AF_INET, SOCK_RAW, IP_PROTO_ICMP)) < 0) @@ -338,7 +338,7 @@ static int netdev_add(struct netif *lwip_netif) netdev->mtu = lwip_netif->mtu; netdev->ops = &lwip_netdev_ops; netdev->hwaddr_len = lwip_netif->hwaddr_len; - rt_memcpy(netdev->hwaddr, lwip_netif->hwaddr, lwip_netif->hwaddr_len); + SMEMCPY(netdev->hwaddr, lwip_netif->hwaddr, lwip_netif->hwaddr_len); netdev->ip_addr = lwip_netif->ip_addr; netdev->gw = lwip_netif->gw; netdev->netmask = lwip_netif->netmask; diff --git a/src/Kconfig b/src/Kconfig index a987daab463a7013ede70fe778e81b9e2d46b6ff..71abd9cf4f5bc8992433faf772c10ae545213405 100644 --- a/src/Kconfig +++ b/src/Kconfig @@ -131,6 +131,10 @@ config RT_KSERVICE_USING_TINY_SIZE bool "Enable kservice to use tiny size" default n +config RT_USING_ASM_MEMCPY + bool + default n + endmenu menuconfig RT_DEBUG diff --git a/src/kservice.c b/src/kservice.c index 128a9f4f541bfe7f7b27a14715d21dd6e6be207b..91872492fbc58fce41ba31bb24b678e2f74892fe 100644 --- a/src/kservice.c +++ b/src/kservice.c @@ -198,6 +198,7 @@ RT_WEAK void *rt_memset(void *s, int c, rt_ubase_t count) } RTM_EXPORT(rt_memset); +#ifndef RT_USING_ASM_MEMCPY /** * This function will copy memory content from source address to destination * address. @@ -208,7 +209,7 @@ RTM_EXPORT(rt_memset); * * @return the address of destination memory */ -RT_WEAK void *rt_memcpy(void *dst, const void *src, rt_ubase_t count) +void *rt_memcpy(void *dst, const void *src, rt_ubase_t count) { #ifdef RT_KSERVICE_USING_TINY_SIZE char *tmp = (char *)dst, *s = (char *)src; @@ -280,6 +281,7 @@ RT_WEAK void *rt_memcpy(void *dst, const void *src, rt_ubase_t count) #endif /* RT_KSERVICE_USING_TINY_SIZE */ } RTM_EXPORT(rt_memcpy); +#endif /* RT_USING_ASM_MEMCPY */ #ifndef RT_KSERVICE_USING_STDLIB