赞
踩
硬件:NODEMCU-32,MQ-2,MH-Sensor-Series,DHT11
环境:win7
软件:vscode+espidf
连接:
效果:
看门狗错误:
可适当提高MQTT优先级
xTaskCreate(&mqtt_test_task, “mqtt_test_task”, 4096, NULL, 3, NULL);
BaseType_t xTaskCreate( TaskFunction_t pxTaskCode, /* 任务函数入口指针 */ const char * const pcName, /* 任务描述性名称 */ const uint16_t usStackDepth, /* 任务堆栈大小,不是以字节为单位,而是以字为单位。 */ void * const pvParameters, /* 传递给任务函数的参数 */ UBaseType_t uxPriority, /* 任务优先级 */ TaskHandle_t * const pxCreatedTask ) /* 任务句柄 */ { TCB_t *pxNewTCB; BaseType_t xReturn; /* 如果堆栈向下生长,则分配堆栈,然后分配TCB,这样堆栈就不会变成TCB。 同样,如果堆栈向上生长,则分配TCB,然后分配堆栈。 */ #if( portSTACK_GROWTH > 0 ) { /* 为TCB分配空间。内存的来源取决于端口malloc函数的实现以及是否使用了静态分配。 */ pxNewTCB = ( TCB_t * ) pvPortMalloc( sizeof( TCB_t ) ); if( pxNewTCB != NULL ) { /* 为正在创建的任务分配需要使用的堆栈空间。堆栈的基地址存储在TCB中,如果需要的话就可以删除这个任务。 */ pxNewTCB->pxStack = ( StackType_t * ) pvPortMalloc( ( ( ( size_t ) usStackDepth ) * sizeof( StackType_t ) ) ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */ if( pxNewTCB->pxStack == NULL ) { /* 删除分配的TCB后就无法分配堆栈。 */ vPortFree( pxNewTCB ); pxNewTCB = NULL; } } } #else /* 堆栈向上增长 */ { StackType_t *pxStack; /* 为正在创建的任务所使用的堆栈分配空间。pvPortMalloc()申请内存的时候做字节对齐处理。 */ pxStack = ( StackType_t * ) pvPortMalloc( ( ( ( size_t ) usStackDepth ) * sizeof( StackType_t ) ) ); /* */ if( pxStack != NULL ) /* 如果任务堆栈申请内存成功 */ { /* 为TCB分配空间 pvPortMalloc()申请内存时做字节对齐处理 */ pxNewTCB = ( TCB_t * ) pvPortMalloc( sizeof( TCB_t ) ); /*lint !e961 MISRA exception as the casts are only redundant for some paths. */ if( pxNewTCB != NULL ) { /* 初始化任务控制块TCB中的任务堆栈字段 */ pxNewTCB->pxStack = pxStack; } else { /* 如果任务控制块申请失败,就要释放前面已经申请成功的堆栈内存。 */ vPortFree( pxStack ); } } else { pxNewTCB = NULL; } } #endif if( pxNewTCB != NULL ) { #if( tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE != 0 ) { /* 任务可以静态或动态创建,因此请注意,此任务是动态创建的,以防稍后删除。 */ pxNewTCB->ucStaticallyAllocated = tskDYNAMICALLY_ALLOCATED_STACK_AND_TCB; } #endif /* configSUPPORT_STATIC_ALLOCATION */ /* 初始化任务 完成对任务控制块中各个字段初始化 */ prvInitialiseNewTask( pxTaskCode, pcName, ( uint32_t ) usStackDepth, pvParameters, uxPriority, pxCreatedTask, pxNewTCB, NULL ); /* 将新创建的任务添加到任务就绪列表中 */ prvAddNewTaskToReadyList( pxNewTCB ); xReturn = pdPASS; } else { xReturn = errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY; } return xReturn; }
参考资源:
https://blog.csdn.net/m0_50064262/article/details/118817032
https://blog.csdn.net/qq_42900996/article/details/116132421
源码地址:
https://github.com/Vecter8357/esp32/tree/main
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。