STM32
直播中

tulin

13年用户 1282经验值
私信 关注
[问答]

STM32F407使用http连接做服务器时,程序不能进入http线程中,为什么?

  /**

  • @brief  Initialize the HTTP server (start its thread)
  • @param  none
  • @retval None/void http_server_netconn_init(){sys_thread_new("HTTP", http_server_netconn_thread, NULL, DEFAULT_THREAD_STACKSIZE  4, osPriorityAboveNormal);}
/////////////////////////////////////////
/ USER CODE BEGIN Header_StartDefaultTask //**

  • @brief  Function implementing the defaultTask thread.
  • @param  argument: Not used
  • @retval None// USER CODE END Header_StartDefaultTask /void StartDefaultTask(void const  argument){/ init code for LWIP /MX_LWIP_Init();/ USER CODE BEGIN StartDefaultTask // Initialize webserver demo /http_server_netconn_init();/ Infinite loop /for(;;){//vTaskDelete(NULL);HAL_GPIO_WritePin(LED_2_GPIO_Port,LED_2_Pin,GPIO_PIN_RESET);vTaskDelay(500);HAL_GPIO_WritePin(LED_2_GPIO_Port,LED_2_Pin,GPIO_PIN_SET);vTaskDelay(500);}/ USER CODE END StartDefaultTask /}


回帖(1)

哥儿

2024-7-22 16:59:56
在分析这个问题之前,让我们先了解一下STM32F407和HTTP服务器的基本概念。

STM32F407是STMicroelectronics公司推出的一款基于ARM Cortex-M4内核的微控制器,具有较高的性能和丰富的外设。在嵌入式系统中,HTTP服务器通常用于实现设备与远程客户端之间的通信,例如通过浏览器或移动应用程序进行数据传输和控制。

现在我们来分析你提供的代码和问题:

1. 首先,你使用的是`sys_thread_new`函数来创建一个线程,该函数是LwIP(一个开源的TCP/IP协议栈)提供的,用于创建一个新的线程。这个函数的参数包括线程名称、线程函数、传入参数、堆栈大小和优先级。

2. 你的代码中,`http_server_netconn_init`函数用于初始化HTTP服务器,创建一个名为"HTTP"的线程,执行`http_server_netconn_thread`函数,传入参数为NULL,堆栈大小为DEFAULT_THREAD_STACKSIZE*4,优先级为osPriorityAboveNormal。

3. 你提到程序不能进入HTTP线程中,可能的原因有:

   a. 线程创建失败:请检查`sys_thread_new`函数是否返回了错误值。如果返回错误,可能是由于堆栈大小不足、线程数量超过限制等原因。

   b. `http_server_netconn_thread`函数存在问题:请检查该函数的实现,确保它能够正确初始化HTTP服务器并进入正常的工作状态。

   c. 线程优先级设置不当:如果线程优先级设置得太低,可能会导致线程无法获得足够的CPU时间来执行。请尝试调整线程优先级,例如使用`osPriorityNormal`或`osPriorityHigh`。

   d. 其他线程或中断影响了线程调度:请检查系统中是否有其他高优先级的线程或中断,它们可能会影响HTTP线程的调度。

4. 你提供的代码片段中,还有一个`USER CODE BEGIN Header_StartDefaultTask`的部分,但没有给出具体的实现。请确保这部分代码没有错误,并且不会影响HTTP线程的创建和执行。

综上所述,要解决这个问题,你可以尝试以下步骤:

1. 检查`sys_thread_new`函数的返回值,确保线程创建成功。
2. 检查`http_server_netconn_thread`函数的实现,确保它能够正确初始化HTTP服务器。
3. 调整线程优先级,确保HTTP线程能够获得足够的CPU时间。
4. 检查系统中的其他线程和中断,确保它们不会影响HTTP线程的调度。

希望这些建议能帮助你解决问题。如果问题仍然存在,请提供更多的代码和信息,以便进一步分析。
举报

更多回帖

×
20
完善资料,
赚取积分