在线时间11 小时
UID409857
ST金币17
蝴蝶豆0
注册时间2016-1-5
该用户从未签到
初级会员
- 最后登录
- 2020-11-10
|
1ST金币
本帖最后由 waiwai-409857 于 2018-3-4 00:41 编辑
刚刚转入Freertos阵营,就遇到了问题,卡住了,在此悬赏200-500大洋求助。
项目信息:
CPU:STM32F207VC
PHY:KSZ8041NL
协议栈:LWIP
OS:Freertos
当前源码采用STM32CubeMX生产的源码,底层稍微改动,已经完成了硬件功能的调试。
可确保所有硬件没问题,前后台程序能正常运行,网络通信正常,相关功能正常。
现状:
1. 只能使用netconn_new建议一个连接,建立多个的时候,程序卡死。
已解决:
1. 硬件问题。调试的时候采用的是仿真器给电路板供电,供电电压不够,只开一个连接的时候,能ping通,开多个连接就不行了。外接电源后,开了5个端口都可以ping通。(不理解为什么多开几个socket的任务会导致电压的跌落)
2. 配置问题。电源导致的ping问题解决后,出现无法建立多个连接的问题,解决办法:
修改opt.h配置:
#define MEMP_NUM_RAW_PCB 8 //4
#define MEMP_NUM_UDP_PCB 8 //4
#define MEMP_NUM_TCP_PCB 8 //5
#define MEMP_NUM_NETBUF 8//2 这个很关键
#define MEMP_NUM_NETCONN 8//4 这个很关键
注释内容为原有配置
1. mian函数进程
需要5个端口,只打开任意一个都能成功,打开2个以上就死机。
2. tcpecho_thread进程
- #define TCP_SOCKET_NUM 5
- struct netconn *conn[TCP_SOCKET_NUM];
- const unsigned short TCP_SOCKET_PORT[TCP_SOCKET_NUM] = {7,4000,4001,4002,4003};
- /*-----------------------------------------------------------------------------------*/
- void tcpecho_thread(void *arg)
- {
- err_t err;
- struct netconn *newconn;
- int id;
-
- id = (int)arg;
-
- LWIP_UNUSED_ARG(arg);
- vTaskDelay(5000);
- /* Create a new connection identifier. */
- conn[id] = netconn_new(NETCONN_TCP);
- err = netconn_bind(conn[id], NULL, TCP_SOCKET_PORT[id]);
- if (err == ERR_OK)
- netconn_listen(conn[id]);
-
- while (1)
- {
- /* Grab new connection. */
- err = netconn_accept(conn[id], &newconn);
- /* Process the new connection. */
- if (err == ERR_OK)
- {
- struct netbuf *buf;
- void *data;
- u16_t len;
-
- while ((err = netconn_recv(newconn, &buf)) == ERR_OK)
- {
- do
- {
- netbuf_data(buf, &data, &len);
- netconn_write(newconn, data, len, NETCONN_COPY);
-
- }
- while (netbuf_next(buf) >= 0);
-
- netbuf_delete(buf);
- }
-
- /* Close connection and discard connection identifier. */
- netconn_close(newconn);
- netconn_delete(newconn);
- }
- }
- }
复制代码
|
最佳答案
查看完整内容
LWIP在配置的头文件中有个有关连接数的宏定义,你可以找找
|