FREERTOS必备知识:
MUST修改地方:D:\GKOSON_BACK_GARDEN\TOUCH_CLASS\TOUCH-KING\KEIL\Inc\FreeRTOSConfig.h
#define configASSERT( x ) if ((x) == 0) {taskDISABLE_INTERRUPTS();printf(">>>>>>>>>>>>>>>>freertos config assert %s<<<<<<<<<<<<<<<<<\n",__func__); for( ;; );}
此后可以找到问题!!!
>>>>>>>>>>>>>>>>freertos config assert creat_mqtt_send_task<<<<<<<<<<<<<<<<<
找到问题:需要修改如下
configMINIMAL_STACK_SIZE*15--->10 OK
给他一个比较小的 内存才可以!!!
优先级也很重要!!
我现在事件组喂狗 比如在喂狗里面有最高优先级 其他的都是比他低!
喂狗:
/* 每个任务的喂狗 */
#define TASK_BLE_BIT 0x0001
#define TASK_KEY_BIT 0x0002
#define TASK_NET_BIT 0x0004
#define TASK_ALL_BIT (TASK_BLE_BIT|TASK_KEY_BIT|TASK_NET_BIT)
/* 每个任务的喂狗 */
#define TASK_BLE_BIT 0x0001
#define TASK_KEY_BIT 0x0002
#define TASK_NET_BIT 0x0004
#define TASK_ALL_BIT (TASK_BLE_BIT|TASK_KEY_BIT|TASK_NET_BIT)
EventGroupHandle_t xWatchdogEventGroup;
configASSERT((xWatchdogEventGroup = xEventGroupCreate()));
task_keep_alive(TASK_BLE_BIT);
void task_keep_alive( uint32_t taskBit)
{
log(DEBUG , "任务喂狗:");
if( (taskBit & TASK_BLE_BIT ) )
{
printf("蓝牙 ");
}
if( (taskBit & TASK_KEY_BIT ))
{
printf("按键 ");
}
if( (taskBit & TASK_NET_BIT))
{
printf("网络 ");
}
printf("\r\n");
xEventGroupSetBits(xWatchdogEventGroup, taskBit);
}
void show_no_feed_task( uint32_t taskBit )
{
log(DEBUG , "任务没有喂狗:");
if( (taskBit & TASK_BLE_BIT ) ==0)
{
printf("蓝牙 ");
}
if( (taskBit & TASK_KEY_BIT )==0)
{
printf("按键 ");
}
if( (taskBit & TASK_NET_BIT)==0)
{
printf("网络 ");
}
printf("\r\n");
}
/* 集中喂狗 需要很高的优先级 --软定时器*/ osThreadDef(main, main_task, osPriorityRealtime, 0, 216);
EventBits_t uxBits;
uxBits = xEventGroupWaitBits(xWatchdogEventGroup,TASK_ALL_BIT, pdTRUE,pdTRUE,2500);
if((uxBits & TASK_ALL_BIT) == TASK_ALL_BIT)
{
HAL_IWDG_Refresh(&hiwdg);
xEventGroupClearBits(xWatchdogEventGroup, uxBits);
}
else
{
log(INFO,"ubits = %x " , uxBits);
show_no_feed_task(uxBits);
}
具体:
Searching for '\bosThreadDef\b'...
D:\GKOSON_BACK_GARDEN\TOUCH_CLASS\TOUCH-KING\KEIL\Src\freertos.c(156) : osThreadDef(main, main_task, osPriorityRealtime, 0, configMINIMAL_STACK_SIZE*8);
D:\GKOSON_BACK_GARDEN\TOUCH_CLASS\TOUCH-KING\KEIL\GMODES\GW5500\gw5500_mode.c(145) : osThreadDef( w5500NULL, w5500_task_entry , osPriorityRealtime, 0, configMINIMAL_STACK_SIZE*15);
D:\GKOSON_BACK_GARDEN\TOUCH_CLASS\TOUCH-KING\KEIL\GMODES\GSIM800C\Gsim800c_task.c(161) : osThreadDef( GSMNULL, gsm_task_entry , osPriorityRealtime, 0, configMINIMAL_STACK_SIZE*20);
D:\GKOSON_BACK_GARDEN\TOUCH_CLASS\TOUCH-KING\KEIL\GAPP\GTaskUP\GTaskup.c(161) : osThreadDef( upNULL, up_task_entry , osPriorityLow, 0, configMINIMAL_STACK_SIZE*10);
D:\GKOSON_BACK_GARDEN\TOUCH_CLASS\TOUCH-KING\KEIL\GAPP\Gmqtt\mqtt\mqtt_client.c(191) : osThreadDef( mqtt_send, mqtt_send_task , osPriorityNormal, 0, configMINIMAL_STACK_SIZE*10);
D:\GKOSON_BACK_GARDEN\TOUCH_CLASS\TOUCH-KING\KEIL\GAPP\Gmqtt\GTaskMQTTRecv.c(316) : osThreadDef( MQTTRECVNULL, mqtt_recv_entry , osPriorityNormal, 0, configMINIMAL_STACK_SIZE*10);
D:\GKOSON_BACK_GARDEN\TOUCH_CLASS\TOUCH-KING\KEIL\GAPP\Gmqtt\GTaskMQTT.c(299) : osThreadDef( MQTTNULL, mqtt_task_entry , osPriorityHigh , 0, configMINIMAL_STACK_SIZE*20);
D:\GKOSON_BACK_GARDEN\TOUCH_CLASS\TOUCH-KING\KEIL\GAPP\GKEY\Gkey.c(177) : osThreadDef( KEYNULL, KEY_task_entry , osPriorityHigh, 0, configMINIMAL_STACK_SIZE*3);
D:\GKOSON_BACK_GARDEN\TOUCH_CLASS\TOUCH-KING\KEIL\GAPP\Gappw5500\appw5500.c(51) : osThreadDef( w5500NULL, w5500_task_entry , osPriorityHigh, 0, configMINIMAL_STACK_SIZE*10); w5500Taskname = osThreadCreate(osThread(w5500NULL), NULL);
D:\GKOSON_BACK_GARDEN\TOUCH_CLASS\TOUCH-KING\KEIL\GAPP\GAPPBLE\GTaskBLE.c(56) : osThreadDef( BLENULL, BLE_task_entry , osPriorityHigh, 0, configMINIMAL_STACK_SIZE*7);
Lines matched: 15 Files matched: 11 Total files searched: 408