README.md
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.c中
51
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.h中
97
98 注意: 回调函数实现时,当ETH连接时创建线程,ETH断开后务必记得删除线程。防止多次连接/断开时,创建多个线程而没有释放,导致程序崩溃!
99
100
101
102