硬件: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