新手上路
- 积分
- 45
- 金钱
- 45
- 注册时间
- 2019-8-5
- 在线时间
- 10 小时
|
5金钱
在调试freertos+lwip时我通过网线直接连接电脑与开发板(stm32做服务端,电脑上的软件作为客户端),ping通后能够收发数据,但是我在测试大量的数据收发时发现,程序会卡在freertos的list.c文件中void vListInsert( List_t * const pxList, ListItem_t * const pxNewListItem )函数下的
for( pxIterator = ( ListItem_t * ) &( pxList->xListEnd ); pxIterator->pxNext->xItemValue <= xValueOfInsertion; pxIterator = pxIterator->pxNext )
{
/* There is nothing to do here, just iterating to the wanted
insertion position. */
}
这个for循环中。
起初我是从以下几个方面来调试的
1、我怀疑堆栈空间给的太小
recv_data = (char *)pvPortMalloc(Server_RX_BUFSZ);//从configTOTAL_HEAP_SIZE中申请内存
然后我将Server_RX_BUFSZ增加到1024,这个问题并没有解决。
2、网上说可能是中断优先级的问题,网络中断优先级不受freertos管理了,所以我将中断优先级分组设置为分组四
HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);
将系统滴答定时器优先级设置为15,然后调整网络中断的优先级,从高到低都试了一遍也没有解决
3、还有的说可能是任务堆栈的问题,我打印了系统任务信息,看堆栈和优先级信息:
任务名称 运行状态 优先级 剩余堆栈 任务序号
==============================================
Remote_Access_t X 8 238 12
Key_Scan_Task R 5 225 8
TCP/IP R 5 892 9
Main_Control_Ta R 1 179 1
vTASK_MBMasterP R 1 180 3
IDLE R 0 105 6
User_GUI_Task B 1 87 2
vTASK_MBMasterP B 5 486 7
PHY_LINK B 5 201 11
vTask_Net_Confi B 1 369 4
Loacl_User_Inte B 1 454 5
mod_bus_process B 8 153 13
EthIf B 6 1358 10
==============================================
B:阻塞,R:就绪,D:删除,S:暂停
任务名称 运行计数 使用率
==========================
Remote_Access_t 962 <1%
vTASK_MBMasterP 153 <1%
TCP/IP 45 <1%
Key_Scan_Task 18043 5%
Loacl_User_Inte 5323 1%
User_GUI_Task 56712 18%
vTASK_MBMasterP 3 <1%
Main_Control_Ta 152 <1%
IDLE 206556 67%
vTask_Net_Confi 16193 5%
PHY_LINK 563 <1%
EthIf 25 <1%
mod_bus_process 56 <1%
==========================
在网上搜了也没有明确的答案,已经困扰好几天了,希望有大神能指点一下,谢谢!!
|
|