首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FreeRTOS冻结

FreeRTOS冻结
EN

Stack Overflow用户
提问于 2018-04-14 17:34:08
回答 2查看 1.2K关注 0票数 4

我有一个简单的FreeRTOS程序,基本上我需要计算运行不同次数的迭代所需的时间。问题是,虽然迭代尚未完成,但它只是冻结,不再执行,我需要它成功地使用vTaskEndScheduler()来终止,以便正确计算时间。有什么原因?冰冻截图

代码语言:javascript
复制
  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();
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-15 03:42:10

只要一瞥,我就会猜测printf()是造成问题的原因,而不知道任何关于您的系统的信息。它是如何实施的?线程安全吗?您的任务是否有足够的堆栈空间来满足其堆栈需求,这取决于您使用的库:https://freertos.org/Stacks-and-stack-overflow-checking.html

请参阅(免费但有些过时)书(book.html)中的注释,参阅printf。

票数 3
EN

Stack Overflow用户

发布于 2018-04-17 11:35:40

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49834281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档