初级会员
- 积分
- 150
- 金钱
- 150
- 注册时间
- 2018-1-11
- 在线时间
- 64 小时
|
20金钱
Error:..\FreeRTOS\portable\MemMang\heap_4.c,320
Error:..\FreeRTOS\portable\MemMang\heap_4.c,321
Error:..\FreeRTOS\portable\MemMang\heap_4.c,320
Error:..\FreeRTOS\portable\MemMang\heap_4.c,321
我是判断到DHCP成功,创建MQTT任务,网线拔出则删除。如下
void lwip_hotplug_detect_task(void *pdata)
{
eTaskState taskstate;
while(1)
{
/*读取当前LAN8720的状态 和上次的状态比较 发生变化做处理*/
lwipdev.hotplugstatus_now = LAN8720_Get_hotplugstatus();
if(lwipdev.hotplugstatus_now != lwipdev.hotplugstatus_last) //检测到连接状态发生变化
{
lwipdev.hotplugstatus_last = lwipdev.hotplugstatus_now; //保存状态
if(lwipdev.hotplugstatus_now) //如果已连接或自协商已经完成(网线插入)
{
printf("lwip_hotplug_detect_task 网线接入\r\n");
if(lwipdev.stack_isInit) //如果已经初始化过
{
netif_set_link_up(&lwip_netif); //重新连接
lwipdev.dhcpstatus = DHCP_NONE; //重新启动DHCP
lwip_netif.ip_addr.addr = 0; //清除IP地址
printf("lwip_hotplug_detect_task 创建DHCP任务 1\r\n");
lwip_comm_dhcp_creat(); //创建dhcp任务
}
else //如果没初始化过
{
if(lwip_comm_init()==0) //初始化
{
printf("lwip_hotplug_detect_task lwip_comm_init\r\n");
lwipdev.dhcpstatus = DHCP_NONE; //重新启动DHCP
lwip_netif.ip_addr.addr = 0; //清除IP地址
printf("lwip_hotplug_detect_task 创建DHCP任务 2\r\n");
lwip_comm_dhcp_creat(); //创建dhcp任务
}
}
}
else //如果连接断开
{
printf("lwip_hotplug_detect_task 网线断开\r\n");
taskstate = eTaskGetState(DHCPTask_Handler); //获取dhcp任务状态
if(taskstate != eDeleted)
{
printf("lwip_hotplug_detect_task 删除DHCP任务\r\n");
lwip_comm_dhcp_delete(); //删除dhcp任务
}
printf("lwip_hotplug_detect_task 删除MQTT任务\r\n");
MQTT_task_delete();
netif_set_link_down(&lwip_netif); //断开网络
}
}
/*DHCP ip成功或者使用静态IP 则创建MQTT任务*/
if(lwipdev.dhcpstatus == DHCP_DONE)/*||(lwipdev.dhcpstatus == DHCP_FAIL)*/
{
lwipdev.dhcpstatus = DHCP_NONE;
printf("lwip_hotplug_detect_task 创建MQTT任务\r\n");
MQTT_task_creat();
}
vTaskDelay(200);
}
}
开始,我怀疑是MQTT里面内存申请问题,然后修改还是一样,我直接把MQTT改成了一个打印也会出错。修改如下
//任务优先级
#define MQTT_TASK_PRIO 7
//任务堆栈大小
#define MQTT_STK_SIZE 1024
//任务句柄
TaskHandle_t MQTTTask_Handler;
void MQTT_task(void *pvParameters)
{
while(1){
printf("MQTT_task run\r\n");
vTaskDelay(200);
}
}
void MQTT_task_creat(void)
{
taskENTER_CRITICAL(); //进入临界区
xTaskCreate((TaskFunction_t )MQTT_task,
(const char* )"MQTT_task",
(uint16_t )MQTT_STK_SIZE,
(void* )NULL,
(UBaseType_t )MQTT_TASK_PRIO,
(TaskHandle_t* )&MQTTTask_Handler);
taskEXIT_CRITICAL(); //退出临界区
}
void MQTT_task_delete(void)
{
if(MQTTTask_Handler != NULL)
{
vTaskDelete(MQTTTask_Handler);
MQTTTask_Handler = NULL;
}
}
。。。我把创建MQTT和删除MQTT注释掉,插拔网线都是正常的。我人傻了
|
|