waiwai-409857 发表于 2018-3-3 12:31:40

悬赏500元解决STM32F207 CubeMx FreeRtos Lwip 无法建立多个端口问题

本帖最后由 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;
const unsigned short TCP_SOCKET_PORT = {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 = netconn_new(NETCONN_TCP);
      err = netconn_bind(conn, NULL, TCP_SOCKET_PORT);
      if (err == ERR_OK)
                        netconn_listen(conn);
      
         while (1)
      {
                /* Grab new connection. */
                err = netconn_accept(conn, &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);
                }
      }
}




anobodykey 发表于 2018-3-3 12:31:41

LWIP在配置的头文件中有个有关连接数的宏定义,你可以找找

MrJiu 发表于 2018-3-3 13:38:05

现在的软件技术这么便宜了么?;P;P;P

waiwai-409857 发表于 2018-3-3 16:08:31

MrJiu 发表于 2018-3-3 13:38
现在的软件技术这么便宜了么?

纯属友情指导,不是完整项目外包,完整外包应该在后面加2个0以上,应该是某个地方设置不对,明眼人应该一下子看出问题,帮指导一下而已。欢迎吐槽!

abc727727 发表于 2018-3-3 21:56:58

了解了解

codeskin 发表于 2018-3-5 16:42:34

解决了?

jokeym 发表于 2019-3-21 19:07:59

STM32F207VC和ksz8041nl 用cubemx要怎么设置呀?我的都没法ping通
求教育:handshake
页: [1]
查看完整版本: 悬赏500元解决STM32F207 CubeMx FreeRtos Lwip 无法建立多个端口问题