freertos可视化调试中打印任务信息是不是只可以打印一次?
在freertos中,使用可视化调试打印任务消息,但是打印不全,还只能打印一次,使用IAR自带的调试插件看,显示可视化调试任务的堆栈顶全是a,这事怎么回事?any012 发表于 2017-4-15 11:02
应该就是pcWriteBuffer数组定义太小的原因,我试了定义为50,100,200个字节大小,前两次都不行,和你描述 ...
没问题,说的完成正确!! 没人了解? 本帖最后由 月霜寒 于 2017-4-13 16:31 编辑
void Debugging_Task(void *pvParameters)//可视化调试任务
{
char pcWriteBuffer;
//portTickType xLastWakeTime;//最后一次释放时时间
pvParameters = pvParameters;
//xLastWakeTime=xTaskGetTickCount();
while(1)
{
USART1_RX485_Gets();
if(rece==1)
{
rece=0;
vTaskList((char *)&pcWriteBuffer);
/*任务状态:r:运行,R:就绪,B:阻塞,S:挂起,D:删除*/
printf("任务名 任务状态优先级 剩余栈任务序号\r\n");
printf("%s\r\n",pcWriteBuffer);
vTaskGetRunTimeStats((char *)&pcWriteBuffer);
printf("\r\n任务名 运行计数 使用率\r\n");
printf("%s\r\n",pcWriteBuffer);
printf("剩余动态内存为:%d\r\n",xPortGetFreeHeapSize());
}
else
{}
//TaskDelayUntil(&xLastWakeTime,1000);//使用这个函数能完成精确周期调用
vTaskDelay(500); //系统延时的心跳数,可设置
}
}
这是我可视化调试的打印部分函数
本帖最后由 any012 于 2017-4-15 10:45 编辑
是不是pcWriteBuffer设的太小了?
我看的安富莱德教程,是设的500个字节。相应的任务栈要分配的空间也要大于500字节。
我这阵子也遇到了类似问题。
一开始是任务给的栈太小了,我用的20k byteRAM的片子。用CUBE生成工程时默认给每个任务分配128words,而按教程里任务里一开始就减了500字节的数组,结果任务空间不够用了。后来给该任务分配了2k RAM。
输出任务使用率这部分,一开始我这里也没有显示出来。后来发现,调试信息用的定时器,我忘记了打开。
void Func_LED(void const * argument)
{
/* USER CODE BEGIN Func_LED */
uint8_t pcWriteBuffer;
HAL_GPIO_WritePin(ERR_GPIO_Port, ERR_Pin, GPIO_PIN_SET);
/* Infinite loop */
for (;;)
{
HAL_GPIO_TogglePin(RUN_GPIO_Port, RUN_Pin);
HAL_GPIO_TogglePin(PWR_GPIO_Port, PWR_Pin);
printf("\r\n1秒时间到");
printf("=================================================\r\n");
printf("任务名 任务状态优先级 剩余栈任务序号\r\n");
vTaskList((char *) &pcWriteBuffer);
printf("%s\r\n", pcWriteBuffer);
printf("\r\n任务名 运行计数 使用率\r\n");
vTaskGetRunTimeStats((char *) &pcWriteBuffer);
printf("%s\r\n", pcWriteBuffer);
osDelay(1000);
}
/* USER CODE END Func_LED */
}
应该就是pcWriteBuffer数组定义太小的原因,我试了定义为50,100,200个字节大小,前两次都不行,和你描述的现象一致。定义为200字节后才正常。 好,我试试
页:
[1]