• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# OpenHarmony驱动子系统开发—ETH驱动
2
3## 配置说明
4
5    1. 在lwip_adapter/include/app_ethernet.h中:
6
7        #define USE_DHCP: 当此宏被定义时,表示开启DHCP功能,若需使用静态IP,则注释此宏定义即可
8
9        #define DHCP_TIMEOUT_S:当DHCP功能开启时,此宏定义值表示DHCP超时时间设置
10
11        #define ETH_THREAD_PRIORITY:此宏定义值表示ETH初始化线程的优先级
12
13        以下定义使用静态IP时的IP地址设置:
14        /* STATIC IP */
15        #define IP_ADDR0   (uint8_t) 192
16        #define IP_ADDR1   (uint8_t) 168
17        #define IP_ADDR2   (uint8_t) 8
18        #define IP_ADDR3   (uint8_t) 200
19
20        /*NETMASK*/
21        #define NETMASK_ADDR0   (uint8_t) 255
22        #define NETMASK_ADDR1   (uint8_t) 255
23        #define NETMASK_ADDR2   (uint8_t) 255
24        #define NETMASK_ADDR3   (uint8_t) 0
25
26        /*GATEWAY*/
27        #define GW_ADDR0   (uint8_t) 192
28        #define GW_ADDR1   (uint8_t) 168
29        #define GW_ADDR2   (uint8_t) 8
30        #define GW_ADDR3   (uint8_t) 1
31
32     2. 在lwip_adapter/include/lwipopts.h中:
33
34        此头文件中定义了LWIP的一些基本选项设置,有几个比较重要的参数设置,如下:
35
36        #define MEM_SIZE: 此宏定义了LWIP协议栈使用的内存堆大小
37
38        #define PBUF_POOL_SIZE: 定义了数据收发时的pbuf数量
39        #define PBUF_POOL_BUFSIZE:定义了每个pbuf的大小
40
41        LWIP总内存占用基本 = MEM_SIZE + PBUF_POOL_SIZE*PBUF_POOL_BUFSIZE
42
43        #define TCPIP_THREAD_NAME  "TCP/IP"
44        #define TCPIP_THREAD_STACKSIZE  4096 : 这两个宏定义了TCPIP线程运行时的任务名以及栈大小
45
46## 初始化接口说明
47
48    ETH驱动的初始化接口: void ethernet_enable(eth_state_callBack callback);
49
50    此函数实现于:lwip_adapter/src/app_ethernet.c51
52    参数callback: 此参数为ETH初始化状态回调函数。
53
54    当调用 ethernet_enable函数,并且注册了状态回调函数后,ETH connect/disConnect状态都会通过此回调返回!
55
56
57## 具体使用步骤
58
59    1. 在main函数中调用 ethernet_enable(eth_callBack)函数,初始化ETH驱动接口,并注册状态回调函数eth_callBack;
60
61    2. 实现回调函数,在回调函数中处理应用程序,例:
62
63        void eth_callBack(EthLinkState state)
64        {
65            static osThreadId_t tcp_client_id = NULL;
66
67            /* ETH连接断开*/
68            if (state == STATE_UPDATE_LINK_DOWN){
69                printf("ETH LINK STATE: DisConnected!\r\n");
70
71                // 断开ETH连接时删除TCP线程
72                osThreadTerminate(tcp_client_id);
73                tcp_client_id = NULL;
74            }
75            /* ETH连接成功*/
76            else if (state == STATE_UPDATE_LINK_UP){
77                printf("ETH LINK STATE: Connected!\r\n");
78
79                // ETH连接成功后 创建TCP线程
80                osThreadAttr_t attr;
81                attr.name = "tcp_client";
82                attr.attr_bits = 0U;
83                attr.cb_mem = NULL;
84                attr.cb_size = 0U;
85                attr.stack_mem = NULL;
86                attr.stack_size = 1024 * 4;
87                attr.priority = 25;
88                tcp_client_id = osThreadNew((osThreadFunc_t)tcp_client, NULL, &attr);
89                if (tcp_client_id == NULL)
90                {
91                    printf("Failed to create tcp_client thread!\n");
92                }
93            }
94        }
95
96        回调函数原型位于: lwip_adapter/include/app_ethernet.h97
98        注意: 回调函数实现时,当ETH连接时创建线程,ETH断开后务必记得删除线程。防止多次连接/断开时,创建多个线程而没有释放,导致程序崩溃!
99
100
101
102