簡體   English   中英

FreeRTOS凍結

[英]FreeRTOS freezes

我有一個簡單的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();
}

只是一目了然,我不知道你的系統,我會GUESS printf()導致問題。 它是如何實現的? 它是線程安全的嗎? 您的任務是否有足夠的堆棧空間用於其堆棧需求,這可能很大,具體取決於您使用的庫: https//freertos.org/Stacks-and-stack-overflow-checking.html

請參閱(免費但有些過時)的書( https://freertos.org/Documentation/RTOS_book.html)ref printf中的注釋。

您必須首先為任務選擇適當的堆棧並確保它在運行時可以通過堆大小訪問,之后我認為問題可能在於printf()方法以及實現的方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM