lwip使用raw api,接收网口数据不放到mac中断函数里,应该放到哪里且如何做
时间: 2024-03-17 14:41:48 浏览: 85
如果你不想在MAC中断函数中处理数据,则可以将数据接收放在一个单独的线程中处理。可以通过lwip提供的TCP/IP协议栈中的RAW API来实现数据接收的功能。
具体步骤如下:
1. 创建一个线程用于数据接收
```c
sys_thread_new("recv_thread", recv_thread, NULL, DEFAULT_THREAD_STACKSIZE, DEFAULT_THREAD_PRIO);
```
2. 在线程中使用RAW API接收数据
```c
void recv_thread(void *arg)
{
struct netconn *conn;
struct netbuf *buf;
void *data;
u16_t len;
conn = netconn_new(NETCONN_RAW);
if (conn != NULL)
{
netconn_bind(conn, IP_ADDR_ANY, 0);
netconn_connect(conn, &remote_addr, remote_port);
while (1)
{
if (netconn_recv(conn, &buf) == ERR_OK)
{
if (netbuf_data(buf, &data, &len) == ERR_OK)
{
// 处理接收到的数据
}
netbuf_delete(buf);
}
}
}
netconn_close(conn);
netconn_delete(conn);
}
```
在这段代码中,我们创建了一个RAW类型的netconn,并将其绑定到本地IP地址和端口号。然后使用netconn_recv函数接收数据,并通过netbuf_data函数获取数据的指针和长度。最后处理完数据后,需要通过netbuf_delete函数释放缓冲区。
需要注意的是,如果使用RAW API接收数据,则需要手动处理数据的解析和协议栈的处理,可能会比较复杂。因此建议在实际开发中根据具体需求选择合适的API。
阅读全文