
各位大哥,遇到一个在FreeRTOS+LWIP使用信号量的问题。 项目工程是通过CubeMX生成的,使用FreeRTOS + LWIP。CubeMX版本是5.2.0. 简化代码,FreeRTOS初始化两个任务,一个默认任务、一个等待信号量任务。在默认任务中和PC上面的TCP server建立连接。在另外一个等待信号量。 信号量任务 extern osSemaphoreId EthBinSemHandle; void task_usart_function() { osSemaphoreWait(EthBinSemHandle, 0); //消耗第一次初始化之后的信号量 UsrLog("Usart Task Start"); for (;;) { if (osSemaphoreWait(EthBinSemHandle, osWaitForever) == osOK) {UsrLog("Processing");} else {UsrLog("Wait Failed");} } } 默认任务 static volatile uint8_t sec_tic = 1; extern osSemaphoreId EthBinSemHandle; void task_default_function(void) { // Application init code connect_server(get_connect_state(CLIENT_SERVER)); for (;;) { HAL_IWDG_Refresh(&hiwdg); if ((sec_tic + 15) % 15 == 0) { //每隔15秒释放一次信号量 osSemaphoreRelease(EthBinSemHandle); } sec_tic++; osDelay(1000); } } void connect_server(conn_state_t* conn_state) { if (get_link_state() == TRUE && conn_state->connected == FALSE) { connect_init(conn_state, get_config_local_port(CLIENT_SERVER)); /* 在connect_init()里面主要操作了netconn_new以及netconn_bind. local_server->conn = netconn_new(NETCONN_TCP); // UDP没有这个问题 if ((ret = netconn_bind(local_server->conn, NULL, port)) == ERR_OK) */ connect_connect(conn_state, &(get_server_data(CLIENT_SERVER)->ip_addr), get_server_data(CLIENT_SERVER)->port); /*在connect_connect()里面主要是 ret = netconn_connect(conn_state->conn, ip_addr, port); 一旦执行了netconn_connect()之后,信号量的使用就没办法用了。 */ } } TCP通信没有问题,也可以PING通。如果注释掉//connect_connect()函数,每隔15秒,可以在串口看到一个打印,说明信号量释放成功。 如果使用connect_connect函数,在PC上TCP客户端可以发现,链接已经链接成功。 此时,如果执行osSemaphoreRelease(EthBinSemHandle);整个系统会死机。如果不执行osSemaphoreRelease(EthBinSemHandle);,可以进行正常的TCP通信。 问题出在TCP建立连接之后,osSemaphoreRelease(EthBinSemHandle);函数会hang住,尝试暂停debug了一下,发现是在queue.c中, configASSERT( !( ( pvItemToQueue == NULL ) && ( pxQueue->uxItemSize != ( UBaseType_t ) 0U ) ) );导致整体系统处于for循环的情况。 检查了一下pxQueue->uxItemSize的数值为0x10000000. 不知道应该怎么搞了。不知道还有朋友遇到这样的问题吗?? 整个工程代码: 链接:https://pan.baidu.com/s/1aqnbbdeGwony7RVt-V_d7w 提取码:y7gg |
6.28周六签到打卡
foc2.0函数SVPWM_3ShuntCalcDutyCycles看不明白
请问有stm32f103驱动无刷电机的学习资料吗,找了很久都没有找到
STM32F103RET6 FLASH擦除失败问题
stm32编码器模式计数问题
关于ASM330LHH TR调试中的问题
STM32会存在单个IO口坏掉的情况吗?
STM32的DCode bus是连接到bus matrix的吗?参考手册描述和图片是不符吗?
stm32ide怎么正确的导出项目
STM32F105RBT6 2025年 ROSH REACH 报告
stm32cube_fw_f4_v1210\STM32Cube_FW_F4_V1.21.0\Projects\STM324xG_EVAL\Applications\LwIP