Переглянути джерело

修改log组件、修复部分线程非安全问题

ryancw 2 роки тому
батько
коміт
cb3a385ed1

+ 2 - 0
.gitignore

@@ -4,3 +4,5 @@
 # 平台移植层
 platform/linux/*
 platform/FreeRTOS/*
+
+null

+ 1 - 2
W5500Client/RyanW5500.c

@@ -152,6 +152,7 @@ static void wizIntDataTask(void *parameter)
     {
 
         RyanW5500Reset(); // 重启w5500
+        delay(100);
 
         // 超时中断触发为retry_cnt * time_100us * 100us
         struct wiz_NetTimeout_t net_timeout = {
@@ -160,13 +161,11 @@ static void wizIntDataTask(void *parameter)
         ctlnetwork(CN_SET_TIMEOUT, (void *)&net_timeout);
 
         memset(&net_timeout, 0, sizeof(struct wiz_NetTimeout_t));
-
         ctlnetwork(CN_GET_TIMEOUT, (void *)&net_timeout);
         if (5 == net_timeout.retry_cnt && 2000 == net_timeout.time_100us)
             break;
 
         rlog_e("没有监测到w5500");
-
         delay(2000);
     }
     netdev_low_level_set_status(netdev, RT_TRUE); // 设置网络接口设备状态

+ 39 - 18
W5500Client/RyanW5500Socket.c

@@ -51,10 +51,12 @@ int RyanW5500CloseCallback(int socket)
     RyanW5500CheckCode(NULL != sock, EBADF, rlog_d, { return -1; });
 
     sock->state = RyanW5500SocketClose;
-    rt_event_send(RyanW5500Entry.W5500EventHandle, 1 << sock->socket);
 
     RyanW5500DoEventChanges(sock, WIZ_EVENT_RECV, RT_TRUE);
     RyanW5500DoEventChanges(sock, WIZ_EVENT_ERROR, RT_TRUE);
+
+    rt_event_send(RyanW5500Entry.W5500EventHandle, 1 << sock->socket);
+
     return 0;
 }
 
@@ -211,9 +213,14 @@ static int RyanW5500SocketDestory(RyanW5500Socket *sock)
     RT_ASSERT(NULL != sock);
 
     rt_mutex_take(RyanW5500Entry.socketMutexHandle, RT_WAITING_FOREVER); //
+    rlog_i("销毁套接字");
+
     if (sock->magic != WIZ_SOCKET_MAGIC)
         goto next;
 
+    if (sock->recvLock)
+        rt_mutex_delete(sock->recvLock);
+
     if (sock->remoteAddr)
         free(sock->remoteAddr);
 
@@ -278,7 +285,7 @@ RyanW5500Socket *RyanW5500SocketCreate(int type, int port)
     // 没有空闲socket
     RyanW5500CheckCode(RyanW5500MaxSocketNum != idx, EMFILE, rlog_d, {
                         rt_mutex_release(RyanW5500Entry.socketMutexHandle); // 释放互斥锁
-                        goto err; });
+                       goto err; });
 
     sock = &(RyanW5500Sockets[idx]);
     sock->magic = WIZ_SOCKET_MAGIC;
@@ -292,23 +299,34 @@ RyanW5500Socket *RyanW5500SocketCreate(int type, int port)
     sock->serviceInfo = NULL; // 用于服务器套接字
     sock->serviceSocket = -1;
 
-    rt_mutex_release(RyanW5500Entry.socketMutexHandle); // 释放互斥锁
-
-    setSn_IR(sock->socket, 0xff);              // 清空套接字中断
-    setSn_IMR(sock->socket, RyanW5500SnIMR);   // 设置套接字ISR状态支持
-    wiz_recv_ignore(sock->socket, UINT16_MAX); // 清空之前的接收缓存
+    // 创建接收锁
+    char name[32] = {0};
+    rt_snprintf(name, sizeof(name), "%s%d", "w5500_sr", idx);
+    sock->recvLock = rt_mutex_create(name, RT_IPC_FLAG_FIFO);
+    if (RT_NULL == sock->recvLock)
+    {
+        rt_mutex_release(RyanW5500Entry.socketMutexHandle); // 释放互斥锁
+        goto err;
+    }
 
 #ifdef SAL_USING_POSIX
     rt_wqueue_init(&sock->wait_head);
 #endif
 
+    setSn_IR(sock->socket, 0xff);              // 清空套接字中断
+    setSn_IMR(sock->socket, RyanW5500SnIMR);   // 设置套接字ISR状态支持
+    wiz_recv_ignore(sock->socket, UINT16_MAX); // 清空之前的接收缓存
+
     int8_t result = wizchip_socket(sock->socket, sock->type, sock->port, 0); // wizchip_socket内部会先close一次
     if (result != sock->socket)
     {
         rlog_e("RyanW5500 socket(%d) create failed!  result: %d", sock->socket, result);
+        rt_mutex_release(RyanW5500Entry.socketMutexHandle); // 释放互斥锁
         goto err;
     }
 
+    sock->state = RyanW5500SocketInit;
+    rt_mutex_release(RyanW5500Entry.socketMutexHandle); // 释放互斥锁
     return sock;
 
 err:
@@ -481,12 +499,10 @@ int wiz_socket(int domain, int type, int protocol)
     }
 
     // 分配并初始化一个新的 WIZnet 套接字
+    wiz_port++;
     sock = RyanW5500SocketCreate(type, wiz_port);
     RyanW5500CheckCode(NULL != sock, EMFILE, rlog_d, { return -1; });
 
-    sock->state = RyanW5500SocketInit;
-    wiz_port++;
-
     return sock->socket;
 }
 
@@ -609,7 +625,6 @@ int wiz_listen(int socket, int backlog)
     RyanW5500LinkCheck(-1);
 
     RyanW5500Socket *sock = RyanW5500GetSock(socket);
-
     RyanW5500CheckCode(NULL != sock, EBADF, rlog_d, { return -1; }); // 套接字参数不是有效的文件描述符。
     RyanW5500CheckCode(WIZ_SOCKET_MAGIC == sock->magic, EIO, rlog_d, { return -1; });
     RyanW5500CheckCode(RyanW5500SocketEstablished != sock->state, EINVAL, rlog_d, { return -1; }); // 套接字已连接
@@ -664,7 +679,6 @@ int wiz_accept(int socket, struct sockaddr *addr, socklen_t *addrlen)
     RyanW5500CheckCode(NULL != addr && 0 != addrlen, EAFNOSUPPORT, rlog_d, { return -1; }); // 非法地址
 
     RyanW5500Socket *serviceSock = RyanW5500GetSock(socket);
-
     RyanW5500CheckCode(NULL != serviceSock, EBADF, rlog_d, { return -1; }); // 套接字参数不是有效的文件描述符。
     RyanW5500CheckCode(WIZ_SOCKET_MAGIC == serviceSock->magic, EIO, rlog_d, { return -1; });
     RyanW5500CheckCode(RyanW5500SocketListen == serviceSock->state, EINVAL, rlog_d, { return -1; }); // 套接字不接受连接,没有listen
@@ -752,7 +766,7 @@ int wiz_sendto(int socket, const void *data, size_t size, int flags, const struc
         sendLen = wizchip_send(socket, (uint8_t *)data, sendLen);
         if (sendLen < 0)
         {
-            rlog_e("udp send fail, result: %d", sendLen);
+            rlog_e("tcp send fail, result: %d", sendLen);
             RyanW5500DoEventChanges(sock, WIZ_EVENT_ERROR, RT_TRUE);
             RyanW5500CheckCode(SOCKERR_SOCKCLOSED == sendLen, EPIPE, rlog_d, { return 0; }); // 套接字被关闭
             return -1;
@@ -841,7 +855,8 @@ int wiz_recvfrom(int socket, void *mem, size_t len, int flags, struct sockaddr *
 
 again:
     // 判断是否超时
-    RyanW5500CheckCode(0 != platformTimerRemain(&recvTimer), EAGAIN, rlog_d, { result = -1; goto __exit; });
+    timeout = platformTimerRemain(&recvTimer);
+    RyanW5500CheckCode(0 != timeout, EAGAIN, rlog_d, { result = -1; goto __exit; });
 
     switch (sock->type)
     {
@@ -851,7 +866,9 @@ again:
         recvLen = getSn_RX_RSR(socket);
         if (recvLen > 0)
         {
+            rt_mutex_take(sock->recvLock, RT_WAITING_FOREVER);
             recvLen = wizchip_recv(socket, mem, len);
+            rt_mutex_release(sock->recvLock);
             if (recvLen > 0)
                 goto __exit;
         }
@@ -869,7 +886,9 @@ again:
         if (getSn_RX_RSR(socket) <= 0)
             goto again;
 
+        rt_mutex_take(sock->recvLock, RT_WAITING_FOREVER);
         recvLen = wizchip_recv(socket, mem, len);
+        rt_mutex_release(sock->recvLock);
         if (recvLen < 0)
         {
             rlog_e("recv error, result: %d", recvLen);
@@ -904,7 +923,9 @@ again:
         if (recvLen > len)
             recvLen = len;
 
+        rt_mutex_take(sock->recvLock, RT_WAITING_FOREVER);
         recvLen = wizchip_recvfrom(socket, mem, recvLen, remoteIp, &remotePort);
+        rt_mutex_release(sock->recvLock);
         if (recvLen < 0)
         {
             RyanW5500CheckCode(SOCKERR_SOCKCLOSED == recvLen, ECONNRESET, rlog_d, { result = 0; goto __exit; }); // 套接字被关闭
@@ -974,7 +995,6 @@ int wiz_recv(int socket, void *mem, size_t len, int flags)
 int wiz_closesocket(int socket)
 {
     RyanW5500Socket *sock = NULL;
-
     sock = RyanW5500GetSock(socket);
     RyanW5500CheckCode(NULL != sock, EBADF, rlog_d, { return -1; });
 
@@ -1349,9 +1369,12 @@ int RyanW5500_gethostbyname(const char *name, ip_addr_t *addr)
         uint8_t remote_ip[4] = {0};
         uint8_t data_buffer[512];
 
-        rlog_w("开始获取dns");
+        // rlog_w("开始获取dns");
+
         // DNS客户端处理
+        rt_mutex_take(RyanW5500Entry.socketMutexHandle, RT_WAITING_FOREVER); // 获取互斥锁
         ret = DNS_run(gWIZNETINFO.dns, (uint8_t *)name, remote_ip, data_buffer);
+        rt_mutex_release(RyanW5500Entry.socketMutexHandle); // 释放互斥锁
         if (1 != ret)
         {
             if (-1 == ret)
@@ -1435,8 +1458,6 @@ struct hostent *wiz_gethostbyname(const char *name)
     return &s_hostent;
 }
 
-// 看以后要不要实现了
-
 /**
  * @brief wiz_gethostbyname 线程安全版本
  *

+ 2 - 0
W5500Client/RyanW5500Socket.h

@@ -52,6 +52,8 @@ extern "C"
         struct sockaddr *remoteAddr;       // 远程地址
         RyanW5500ServiceInfo *serviceInfo; // 服务器套接字信息
 
+        rt_mutex_t recvLock; // 读取数据锁
+
 #ifdef SAL_USING_POSIX
         rt_wqueue_t wait_head;
 #endif

+ 2 - 2
W5500Client/RyanW5500Store.h

@@ -76,8 +76,8 @@ extern "C"
     if (!(EX))                                                     \
     {                                                              \
                                                                    \
-        Ryanlevel("ErrorCode: %d, strError: %s",                   \
-                  ErrorCode, RyanW5500StrError(ErrorCode));        \
+        Ryanlevel("ErrorCode: %d, strError: %d",                   \
+                  ErrorCode, (ErrorCode));                         \
         errno = (ErrorCode);                                       \
         {code};                                                    \
     }

+ 9 - 10
common/RyanW5500Log.h

@@ -42,32 +42,31 @@
 static void rlog_output(char *lvl, uint8_t color_n, char *const fmt, ...)
 {
     // RyanLogPrintf("\033[字背景颜色;字体颜色m  用户字符串 \033[0m" );
-    char dbgBuffer[256];
-    uint16_t len;
+    char dbgBuffer[256] = {0};
+    uint16_t len = 0;
 
 // 打印颜色
 #if rlogColorEnable > 0
-    len = snprintf(dbgBuffer, sizeof(dbgBuffer), "\033[%dm", color_n);
-    platformPrint(dbgBuffer, len);
+    len += snprintf(dbgBuffer + len, sizeof(dbgBuffer) - len, "\033[%dm", color_n);
 #endif
 
     // 打印提示符
-    len = snprintf(dbgBuffer, sizeof(dbgBuffer), "[%s/%s]", lvl, rlogTag);
-    platformPrint(dbgBuffer, len);
+    len += snprintf(dbgBuffer + len, sizeof(dbgBuffer) - len, "[%s/%s]", lvl, rlogTag);
 
     // 打印用户输入
     va_list args;
     va_start(args, fmt);
-    len = vsnprintf(dbgBuffer, sizeof(dbgBuffer), fmt, args);
+    len += vsnprintf(dbgBuffer + len, sizeof(dbgBuffer) - len, fmt, args);
     va_end(args);
-    platformPrint(dbgBuffer, len);
 
 // 打印颜色
 #if rlogColorEnable > 0
-    platformPrint("\033[0m", sizeof("\033[0m"));
+    len += snprintf(dbgBuffer + len, sizeof(dbgBuffer) - len, "\033[0m");
 #endif
 
-    platformPrint("\r\n", sizeof("\r\n"));
+    len += snprintf(dbgBuffer + len, sizeof(dbgBuffer) - len, "\r\n");
+
+    platformPrint(dbgBuffer, len);
 }
 
 static void rlog_output_raw(char *const fmt, ...)

+ 72 - 70
example/RyanW5500Test.c

@@ -4,19 +4,21 @@
 #include <stdint.h>
 #include <string.h>
 #include <errno.h>
-#include <board.h>
 
+#include <board.h>
 #include <rtthread.h>
 #include <rtdevice.h>
-#include "drv_spi.h"
 #include <rtdbg.h>
-#include "ulog.h"
-#include "RyanW5500.h"
-#include "netdb.h"
-
 #include "netdev_ipaddr.h"
 #include "netdev.h"
+#include "netdb.h"
 #include "sys/socket.h"
+#include "sal_socket.h"
+#include "sal_netdb.h"
+#include "drv_spi.h"
+
+#include "RyanW5500.h"
+#include "RyanW5500Log.h"
 
 #ifdef PKG_USING_RYANW5500_EXAMPLE
 static const char *TAG = "RyanW5500Test";
@@ -25,7 +27,7 @@ static struct netdev *RyanNetdev = NULL;
 
 void neDevStatusChangeCallback(struct netdev *netdev, enum netdev_cb_type type)
 {
-    ulog_i(TAG, "w5500 nedev state: %d", type);
+    rlog_i("w5500 nedev state: %d", type);
 }
 
 int w5500Start(int argc, char *argv[])
@@ -33,7 +35,7 @@ int w5500Start(int argc, char *argv[])
 
     if (NULL != RyanNetdev)
     {
-        ulog_w(TAG, "w5500已经启动,不要重复选择");
+        rlog_w("w5500已经启动,不要重复选择");
         return -1;
     }
 
@@ -79,21 +81,21 @@ int w5500Start(int argc, char *argv[])
 
     if (0 != RyanW5500Init(&netInfo)) // 初始化w5500并启动
     {
-        ulog_e(TAG, "初始化w5500错误");
+        rlog_e("初始化w5500错误");
         return -1;
     }
 
     RyanNetdev = netdev_get_by_name("RyanW5500"); // netdev
     if (NULL == RyanNetdev)
     {
-        ulog_e(TAG, "No device found");
+        rlog_e("No device found");
         return -1;
     }
 
     netdev_set_default(RyanNetdev);
     netdev_set_status_callback(RyanNetdev, neDevStatusChangeCallback);
 
-    ulog_i(TAG, "w5500 启动成功");
+    rlog_i("w5500 启动成功");
 
     // while (!netdev_is_link_up(RyanNetdev))
     // {
@@ -126,11 +128,11 @@ void deal_client_fun(void *argument)
                  errno == EWOULDBLOCK || // 发送时套接字发送缓冲区已满,或接收时套接字接收缓冲区为空
                  errno == EINTR))        // 操作被信号中断
             {
-                ulog_w(TAG, "接收超时...........");
+                rlog_w("接收超时...........");
                 continue;
             }
 
-            ulog_e(TAG, "遇到错误, 退出 socket: %d, len: %d", fd, len);
+            rlog_e("遇到错误, 退出 socket: %d, len: %d", fd, len);
             closesocket(fd);
             return;
         }
@@ -171,7 +173,7 @@ void tcpEchoTask(void *argument)
                 break;
 
             // new_fd代表的是客户端的连接   cli_addr存储是客户端的信息
-            ulog_i(TAG, "客户端: %s, port: %hu, 连接了服务器", inet_ntoa(cli_addr.sin_addr.s_addr), ntohs(cli_addr.sin_port));
+            rlog_i("客户端: %s, port: %hu, 连接了服务器", inet_ntoa(cli_addr.sin_addr.s_addr), ntohs(cli_addr.sin_port));
 
             rt_thread_t idex = rt_thread_create("socket123123123", deal_client_fun, (void *)&new_fd, 2048, 12, 5);
             if (idex != NULL)
@@ -189,7 +191,7 @@ void udpEchoServiceTask(void *argument)
 
     // 创建通讯的udp套接字(没有port, ip)
     int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
-    ulog_i(TAG, "UDP套接字sockfd=%d", sockfd);
+    rlog_i("UDP套接字sockfd=%d", sockfd);
 
     // 定义一个IPv4地址结构, 存放客户端的地址信息(本地主机)
     struct sockaddr_in myAddr = {
@@ -215,16 +217,16 @@ void udpEchoServiceTask(void *argument)
                  errno == EWOULDBLOCK || // 发送时套接字发送缓冲区已满,或接收时套接字接收缓冲区为空
                  errno == EINTR))        // 操作被信号中断
             {
-                ulog_w(TAG, "接收超时...........");
+                rlog_w("接收超时...........");
                 continue;
             }
 
-            ulog_e(TAG, "遇到错误, 退出 socket: %d, len: %d", sockfd, len);
+            rlog_e("遇到错误, 退出 socket: %d, len: %d", sockfd, len);
             break;
         }
 
-        // ulog_i(TAG, "udp echo service, 消息来自: %s, port: %hu", inet_ntoa(from_addr.sin_addr), ntohs(from_addr.sin_port));
-        // ulog_i(TAG, "udp echo service, len: %d, msg: %s", len, buf);
+        // rlog_i("udp echo service, 消息来自: %s, port: %hu", inet_ntoa(from_addr.sin_addr), ntohs(from_addr.sin_port));
+        // rlog_i("udp echo service, len: %d, msg: %s", len, buf);
 
         sendto(sockfd, buf, len, 0, (struct sockaddr *)&from_addr, sizeof(from_addr));
 
@@ -272,16 +274,16 @@ void multicastEchoServiceTask(void *argument)
                  errno == EWOULDBLOCK || // 发送时套接字发送缓冲区已满,或接收时套接字接收缓冲区为空
                  errno == EINTR))        // 操作被信号中断
             {
-                ulog_w(TAG, "multicast, 接收超时...........");
+                rlog_w("multicast, 接收超时...........");
                 continue;
             }
 
-            ulog_e(TAG, "multicast, 遇到错误, 退出 socket: %d, len: %d", sockfd, len);
+            rlog_e("multicast, 遇到错误, 退出 socket: %d, len: %d", sockfd, len);
             break;
         }
 
-        ulog_i(TAG, "multicast, 消息来自: %s, port: %hu", inet_ntoa(from_addr.sin_addr), ntohs(from_addr.sin_port));
-        ulog_i(TAG, "multicast, len: %d, msg: %s", len, buf);
+        rlog_i("multicast, 消息来自: %s, port: %hu", inet_ntoa(from_addr.sin_addr), ntohs(from_addr.sin_port));
+        rlog_i("multicast, len: %d, msg: %s", len, buf);
 
         // socket加入多播组后,sendto消息只能发送给多播组,这是w5500硬件限制的,如果想单播回复组播收到的信息,需要重新创建socket
         // sendto(sockfd, "hellow", strlen("hellow"), 0, (struct sockaddr *)&from_addr, sizeof(from_addr));
@@ -319,14 +321,14 @@ static int w5500Static(int argc, char *argv[])
     addr = inet_addr("114.114.114.114");
     //  设置网卡子网掩码地址
     netdev_set_dns_server(RyanNetdev, 0, (const ip_addr_t *)&addr);
-    ulog_w(TAG, "w5500Static");
+    rlog_w("w5500Static");
     return 0;
 }
 
 static int w5500Dhcp(int argc, char *argv[])
 {
     netdev_dhcp_enabled(RyanNetdev, RT_TRUE);
-    ulog_w(TAG, "w5500Dhcp");
+    rlog_w("w5500Dhcp");
     return 0;
 }
 
@@ -334,7 +336,7 @@ static int w5500UdpClient(int argc, char *argv[])
 {
     if (argc < 4)
     {
-        ulog_w(TAG, "请输入udp服务器的IP, port ");
+        rlog_w("请输入udp服务器的IP, port ");
         return 0;
     }
 
@@ -343,7 +345,7 @@ static int w5500UdpClient(int argc, char *argv[])
 
     // 创建通讯的udp套接字(没有port, ip)
     int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
-    ulog_i(TAG, "UDP客户端套接字sockfd: %d", sockfd);
+    rlog_i("UDP客户端套接字sockfd: %d", sockfd);
 
     // 定义一个IPv4地址结构, 存放服务器的地址信息(目标主机)
     struct sockaddr_in ser_addr = {
@@ -365,7 +367,7 @@ static int w5500UdpService(int argc, char *argv[])
 {
     if (argc < 3)
     {
-        ulog_w(TAG, "请输入udpService的port ");
+        rlog_w("请输入udpService的port ");
         return 0;
     }
 
@@ -373,7 +375,7 @@ static int w5500UdpService(int argc, char *argv[])
     static rt_thread_t hid = NULL;
     if (NULL != hid)
     {
-        ulog_w(TAG, "udp服务器已启动, 请勿重复创建");
+        rlog_w("udp服务器已启动, 请勿重复创建");
         return -1;
     }
 
@@ -387,12 +389,12 @@ static int w5500UdpService(int argc, char *argv[])
 
     if (NULL == hid)
     {
-        ulog_w(TAG, "创建udp echo线程失败");
+        rlog_w("创建udp echo线程失败");
         return -1;
     }
 
     rt_thread_startup(hid);
-    ulog_i(TAG, "udp echo服务器启动成功 service: %s, port: %d", inet_ntoa(RyanNetdev->ip_addr), port);
+    rlog_i("udp echo服务器启动成功 service: %s, port: %d", inet_ntoa(RyanNetdev->ip_addr), port);
 
     return 0;
 }
@@ -401,7 +403,7 @@ static int w5500TcpClient(int argc, char *argv[])
 {
     if (argc < 4)
     {
-        ulog_w(TAG, "请输入tcp服务器的IP, port ");
+        rlog_w("请输入tcp服务器的IP, port ");
         return 0;
     }
 
@@ -412,7 +414,7 @@ static int w5500TcpClient(int argc, char *argv[])
 
     // 创建一个TCP套接字 SOCK_STREAM
     int sockfd = socket(AF_INET, SOCK_STREAM, 0);
-    ulog_i(TAG, "TCP客户端套接字sockfd: %d", sockfd);
+    rlog_i("TCP客户端套接字sockfd: %d", sockfd);
 
     // bind是可选的,这里使用,纯粹为了演示
     // !此库w5500实现, 不推荐使用bind,使用bind会释放之前申请socket,重新申请。这是因为w5500特性造成
@@ -435,7 +437,7 @@ static int w5500TcpClient(int argc, char *argv[])
     result = connect(sockfd, (struct sockaddr *)&ser_addr, sizeof(ser_addr));
     if (0 != result)
     {
-        ulog_i(TAG, "connect错误, 目标ip: %s, 目标端口: %d, err code: %s", serviceIP, servicePort, strerror(errno));
+        rlog_i("connect错误, 目标ip: %s, 目标端口: %d, err code: %s", serviceIP, servicePort, strerror(errno));
         return -1;
     }
 
@@ -444,7 +446,7 @@ static int w5500TcpClient(int argc, char *argv[])
     result = send(sockfd, buf, strlen(buf), 0);
     if (result < 0)
     {
-        ulog_i(TAG, "send错误, 目标ip: %s, 目标端口: %s, err code: %s", serviceIP, servicePort, strerror(errno));
+        rlog_i("send错误, 目标ip: %s, 目标端口: %s, err code: %s", serviceIP, servicePort, strerror(errno));
         return -1;
     }
 
@@ -467,7 +469,7 @@ static int w5500tcpService(int argc, char *argv[])
 {
     if (argc < 3)
     {
-        ulog_w(TAG, "请输入tcpService的port ");
+        rlog_w("请输入tcpService的port ");
         return 0;
     }
 
@@ -476,7 +478,7 @@ static int w5500tcpService(int argc, char *argv[])
     static rt_thread_t hid = NULL;
     if (NULL != hid)
     {
-        ulog_w(TAG, "tcp服务器已启动, 请勿重复创建");
+        rlog_w("tcp服务器已启动, 请勿重复创建");
         return -1;
     }
 
@@ -490,12 +492,12 @@ static int w5500tcpService(int argc, char *argv[])
 
     if (NULL == hid)
     {
-        ulog_w(TAG, "创建tcp echo线程失败");
+        rlog_w("创建tcp echo线程失败");
         return -1;
     }
 
     rt_thread_startup(hid);
-    ulog_i(TAG, "tcp echo服务器启动成功 service: %s, port: %d", inet_ntoa(RyanNetdev->ip_addr), port);
+    rlog_i("tcp echo服务器启动成功 service: %s, port: %d", inet_ntoa(RyanNetdev->ip_addr), port);
 
     return 0;
 }
@@ -505,7 +507,7 @@ static int w5500Broadcast(int argc, char *argv[])
 
     if (argc < 4)
     {
-        ulog_w(TAG, "请输入broadcast发送的port和消息内容 ");
+        rlog_w("请输入broadcast发送的port和消息内容 ");
         return 0;
     }
 
@@ -530,7 +532,7 @@ static int w5500Broadcast(int argc, char *argv[])
 
     closesocket(sockfd);
 
-    ulog_i(TAG, "broadcast发送成功");
+    rlog_i("broadcast发送成功");
     return 0;
 }
 
@@ -550,7 +552,7 @@ static int w5500Multicast(int argc, char *argv[])
 
     if (argc < 3)
     {
-        ulog_w(TAG, "请输入multicast发送的port ");
+        rlog_w("请输入multicast发送的port ");
         return 0;
     }
 
@@ -559,7 +561,7 @@ static int w5500Multicast(int argc, char *argv[])
     static rt_thread_t hid = NULL;
     if (NULL != hid)
     {
-        ulog_w(TAG, "组播echo服务器已启动, 请勿重复创建");
+        rlog_w("组播echo服务器已启动, 请勿重复创建");
         return -1;
     }
 
@@ -573,13 +575,13 @@ static int w5500Multicast(int argc, char *argv[])
 
     if (NULL == hid)
     {
-        ulog_w(TAG, "创建multicast echo线程失败");
+        rlog_w("创建multicast echo线程失败");
         return -1;
     }
 
     rt_thread_startup(hid);
-    ulog_i(TAG, "multicast echo服务器启动成功");
-    ulog_i(TAG, "multicast 地址: %s, port: %d", "224.0.0.252", port);
+    rlog_i("multicast echo服务器启动成功");
+    rlog_i("multicast 地址: %s, port: %d", "224.0.0.252", port);
     return 0;
 }
 
@@ -587,11 +589,11 @@ static int w5500dhcpLeasetime(int argc, char *argv[])
 {
     if (RT_TRUE != netdev_is_dhcp_enabled(RyanNetdev))
     {
-        ulog_w(TAG, "dhcp服务未启动, 目前处于静态ip状态");
+        rlog_w("dhcp服务未启动, 目前处于静态ip状态");
         return 0;
     }
 
-    ulog_i(TAG, "租期总时长:%d s, 剩余时长: %d s", getDHCPLeaseTime() / 1000, getDHCPRemainLeaseTime() / 1000);
+    rlog_i("租期总时长:%d s, 剩余时长: %d s", getDHCPLeaseTime() / 1000, getDHCPRemainLeaseTime() / 1000);
     return 0;
 }
 
@@ -603,17 +605,17 @@ static int w5500GetNetInfo(int argc, char *argv[])
     ctlnetwork(CN_GET_NETINFO, (void *)&netinfo); // 获取网络信息
 
     if (NETINFO_DHCP == netinfo.dhcp)
-        ulog_i(TAG, "=== %s NET CONF : DHCP ===", (char *)tmpstr);
+        rlog_i("=== %s NET CONF : DHCP ===", (char *)tmpstr);
     else
-        ulog_i(TAG, "=== %s NET CONF : Static ===", (char *)tmpstr);
+        rlog_i("=== %s NET CONF : Static ===", (char *)tmpstr);
 
-    ulog_i(TAG, "MAC: %02X:%02X:%02X:%02X:%02X:%02X", netinfo.mac[0], netinfo.mac[1], netinfo.mac[2],
+    rlog_i("MAC: %02X:%02X:%02X:%02X:%02X:%02X", netinfo.mac[0], netinfo.mac[1], netinfo.mac[2],
            netinfo.mac[3], netinfo.mac[4], netinfo.mac[5]);
-    ulog_i(TAG, "SIP: %d.%d.%d.%d", netinfo.ip[0], netinfo.ip[1], netinfo.ip[2], netinfo.ip[3]);
-    ulog_i(TAG, "GAR: %d.%d.%d.%d", netinfo.gw[0], netinfo.gw[1], netinfo.gw[2], netinfo.gw[3]);
-    ulog_i(TAG, "SUB: %d.%d.%d.%d", netinfo.sn[0], netinfo.sn[1], netinfo.sn[2], netinfo.sn[3]);
-    ulog_i(TAG, "DNS: %d.%d.%d.%d", netinfo.dns[0], netinfo.dns[1], netinfo.dns[2], netinfo.dns[3]);
-    ulog_i(TAG, "===========================");
+    rlog_i("SIP: %d.%d.%d.%d", netinfo.ip[0], netinfo.ip[1], netinfo.ip[2], netinfo.ip[3]);
+    rlog_i("GAR: %d.%d.%d.%d", netinfo.gw[0], netinfo.gw[1], netinfo.gw[2], netinfo.gw[3]);
+    rlog_i("SUB: %d.%d.%d.%d", netinfo.sn[0], netinfo.sn[1], netinfo.sn[2], netinfo.sn[3]);
+    rlog_i("DNS: %d.%d.%d.%d", netinfo.dns[0], netinfo.dns[1], netinfo.dns[2], netinfo.dns[3]);
+    rlog_i("===========================");
 
     return 0;
 }
@@ -622,7 +624,7 @@ static int w5500GetHostByName(int argc, char *argv[])
 {
     if (argc < 4)
     {
-        ulog_w(TAG, "请版本、带解析的域名信息。 版本1使用线程安全版本, 0非线程安全版本");
+        rlog_w("请输入版本、带解析的域名信息。 版本1使用线程安全版本, 0非线程安全版本");
         return 0;
     }
 
@@ -636,19 +638,19 @@ static int w5500GetHostByName(int argc, char *argv[])
 
         if (NULL == hent)
         {
-            ulog_e(TAG, "gethostbyname error for hostname: %s", nameStr);
+            rlog_e("gethostbyname error for hostname: %s", nameStr);
             return 0;
         }
 
-        ulog_i(TAG, "name: %s, addrtype: %d, AF_INET: %d, len:%d",
+        rlog_i("name: %s, addrtype: %d, AF_INET: %d, len:%d",
                hent->h_name, hent->h_addrtype, AF_INET,
                hent->h_length);
 
         for (uint8_t i = 0; hent->h_aliases[i]; i++)
-            ulog_i(TAG, "alias hostname: %s", hent->h_aliases[i]);
+            rlog_i("alias hostname: %s", hent->h_aliases[i]);
 
         for (uint8_t i = 0; hent->h_addr_list[i]; i++)
-            ulog_i(TAG, "host addr is: %s", inet_ntoa(*(struct in_addr *)hent->h_addr_list[i]));
+            rlog_i("host addr is: %s", inet_ntoa(*(struct in_addr *)hent->h_addr_list[i]));
     }
 
     else
@@ -659,19 +661,19 @@ static int w5500GetHostByName(int argc, char *argv[])
 
         if (0 != gethostbyname_r(nameStr, &hostinfo, buf, sizeof(buf), &phost, &ret))
         {
-            ulog_e(TAG, "gethostbyname: %s, ret:%d", nameStr, ret);
+            rlog_e("gethostbyname: %s, ret:%d", nameStr, ret);
             return 0;
         }
 
-        ulog_i(TAG, "name: %s, addrtype: %d, AF_INET: %d, len: %d",
+        rlog_i("name: %s, addrtype: %d, AF_INET: %d, len: %d",
                phost->h_name, phost->h_addrtype, AF_INET,
                phost->h_length);
 
         for (uint8_t i = 0; hostinfo.h_aliases[i]; i++)
-            ulog_i(TAG, "alias hostname: %s", hostinfo.h_aliases[i]);
+            rlog_i("alias hostname: %s", hostinfo.h_aliases[i]);
 
         for (uint8_t i = 0; hostinfo.h_addr_list[i]; i++)
-            ulog_i(TAG, "host addr is: %s", inet_ntoa(*((struct in_addr *)hostinfo.h_addr_list[i])));
+            rlog_i("host addr is: %s", inet_ntoa(*((struct in_addr *)hostinfo.h_addr_list[i])));
     }
 
     return 0;
@@ -681,7 +683,7 @@ static int w5500GetAddrInfo(int argc, char *argv[])
 {
     if (argc < 4)
     {
-        ulog_w(TAG, "请输入要解析的域名和端口");
+        rlog_w("请输入要解析的域名和端口");
         return 0;
     }
 
@@ -696,7 +698,7 @@ static int w5500GetAddrInfo(int argc, char *argv[])
     int result = getaddrinfo(nameStr, namePort, &hints, &addrList);
     if (0 != result)
     {
-        ulog_e(TAG, "getaddrinfo: %s ret:%d", nameStr, result);
+        rlog_e("getaddrinfo: %s ret:%d", nameStr, result);
         return 0;
     }
 
@@ -708,7 +710,7 @@ static int w5500GetAddrInfo(int argc, char *argv[])
     {
         sinp = (struct sockaddr_in *)aip->ai_addr;
         addr = inet_ntop(AF_INET, &sinp->sin_addr, buf, sizeof(buf));
-        ulog_i(TAG, "addr: %s, port: %d", addr ? addr : "unknow ", ntohs(sinp->sin_port));
+        rlog_i("addr: %s, port: %d", addr ? addr : "unknow ", ntohs(sinp->sin_port));
     }
 
     if (NULL != addrList)
@@ -794,7 +796,7 @@ static int RyanMqttMsh(int argc, char *argv[])
 // stm32用户需要更改此代码为自己w5500实际挂载的spi总线
 // 非stm32用户可以调用rt_spi_bus_attach_device,
 // 参考连接:https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/device/spi/spi?id=%e6%8c%82%e8%bd%bd-spi-%e8%ae%be%e5%a4%87
-//static int RyanW5500SpiArrach(void)
+// static int RyanW5500SpiArrach(void)
 //{
 //    rt_err_t result = rt_hw_spi_device_attach("spi2", RYANW5500_SPI_DEVICE, GPIOE, GPIO_PIN_15);
 //    if (RT_EOK != result)
@@ -802,7 +804,7 @@ static int RyanMqttMsh(int argc, char *argv[])
 //
 //    return result;
 //}
-//INIT_DEVICE_EXPORT(RyanW5500SpiArrach); // spi总线挂载
+// INIT_DEVICE_EXPORT(RyanW5500SpiArrach); // spi总线挂载
 
 #if defined(RT_USING_MSH)
 MSH_CMD_EXPORT_ALIAS(RyanMqttMsh, w5500, RyanMqtt command);