FreeRTOS冻结

4

我有一个简单的FreeRTOS程序,基本上我需要计算不同迭代次数运行所需的时间。 问题是它只是停止执行,而迭代还没有完成,我需要它成功地走到vTaskEndScheduler()来终止,这样我才能正确地计算时间。可能的原因是什么?

冻结截图
  void Task1() {

    for (int i = 0; i < 100; i++)
 {
        printf("This is task 1 ");
        printf("Iteration number ");
        printf("%d", i);
        printf("\n");
        vTaskDelay(100);
    }
    vTaskEndScheduler();
};

void Task2() {

    for (int i = 0; i < 100; i++) {
        printf("This is task 2 ");
        printf("Iteration number ");
        printf("%d", i);
        printf("\n");


        vTaskDelay(100);
    }
    vTaskEndScheduler();
};



void main_blinky(void)
{
    enableFlushAfterPrintf();

    xTaskCreate(Task1, (signed char*) "t1", 100, NULL, 1, NULL);
    xTaskCreate(Task2, (signed char*) "t2", 100, NULL, 1, NULL);


    vTaskStartScheduler();
}
2个回答

3

2

你首先必须选择适合任务的堆栈,并确保它在运行时可由堆大小访问,之后我认为问题可能出现在printf()方法和其实现方式上。


这不是其他答案的后续复制吗? - Richard
1
有点不同,我注意到在编译之前要检查微控制器的静态堆大小值,如果没有正确配置,可能会发生错误。@Richard - Iman.B

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接