我創建了兩個消耗RAM的任務,當他們完成了他們必須做的事情之後,我需要自動重新啓動它,甚至有可能這樣做?我已閱讀了許多文章,但仍未找到答案,請幫忙。如何在FreeRTOS中重新啓動任務?
0
A
回答
1
RAM是如何消耗的。如果是from the FreeRTOS heap,那麼在重新啓動或刪除任務之前,您需要手動釋放堆RAM。
當你說「重新啓動」任務時,你究竟是什麼意思?
1)刪除任務,然後再次創建它?如果是這樣,那麼你可以使用vTaskDelete()和xTaskCreateStatic API函數。然而,雖然人們很想做到這一點很常見,但實際上人們很少需要這樣做 - 更好地保持相同的任務並使任務結構化,以便可以循環回到其實施的頂部而不是重新創建。
2)根據上面第(1)點的後半部分,如果你只是想讓任務從其實施的開始再次開始,你可以將任務放在一個循環中,當你到達循環,你回到頂端並等待信號重新開始。
如果您絕對必須刪除任務然後自動重新啓動,請創建一個創建該任務的函數,然後使用xTimerPendFunctionCall() API函數在任務剛剛刪除之前[通過調用vTaskDelete(NULL)]將函數掛起。
1
通常U不應該重新啓動任務。這不是個好主意。更好地運行在無盡的循環中。使用最小的堆棧大小創建,在工作時分配和釋放內存。
void* create_taskX()
{
xTaskCreate(..., configMINIMAL_STACK_SIZE, ...);
}
void taskX(void*arg)
{
// Do not create big variables on stack to prevent overflow
while(1)
{
void *resource = malloc(resource_size); // Allocate resources before job
// Do the work. Repeat with delay
free(resource); // Free resources after job
vTaskDelay(timeout_ticks);
// or xSemaphoreTake(); // Wait for event from another task or interrupt
// There are many other ways to block task, make it wait some event
}
}
當您在heap_4.c
和heap_5.c
執行任務 良好的內存釋放(免費)。或使用heap_3.c
將FreeRTOS malloc
和free
重定向到STL功能。如果要經常使用malloc/free或重新創建任務,請勿使用堆1和2。
您也可以在task2工作時創建互斥體來阻止task1,反之亦然。這將允許當時通過一項任務使用內存。
最後。你的問題很一般。答案也是如此。具體一點。描述更多細節。
相關問題
- 1. 重新啓動一個任務活動
- 2. 如何重新啓動/重複使用重複性任務?
- 3. freertos暫停任務
- 4. FreeRTOS鎖和任務
- 5. 重新啓動任務或創建一個新任務?
- 6. Kafka連接任務重新啓動`NoSuchMethodError:HttpServletRequest.isAsyncStarted`?
- 7. 如何重用Azure啓動任務?
- 8. 如何重新啓動Android服務,當它被重啓中斷?
- 9. 如何在不重新啓動的情況下「重新啓動」Internet Explorer服務
- 10. 如何優雅地重新啓動任務?
- 11. Capistrano任務啓動/重新啓動pm2如何傳遞--env變量
- 12. 如何在重新啓動LDAP服務器時重新連接?
- 13. FreeRTOS任務不恢復
- 14. freeRTOS任務調度配置
- 15. 重新啓動服務器後重新啓動WCF服務
- 16. 如何重新啓動窗口服務
- 17. 如何重新啓動flask服務器?
- 18. 如何重新啓動REST服務?
- 19. 如何重新啓動node.js服務器
- 20. 如何重新啓動Windows服務?
- 21. 如何重新啓動windows服務c#
- 22. 後臺任務不能在Swift中重新啓動
- 23. 頁面重新載入後如何重新啓動任務流程?
- 24. 在FreeRTOS中創建用於USART接收的新任務
- 25. 如何在電話重新啓動後重新啓動鬧鐘?
- 26. 在c中重新啓動Windows服務#
- 27. 在Android中重新啓動服務
- 28. 如何在C中重新啓動System.Threading.Tasks.Task#
- 29. 如何在Windows中重新啓動Jenkins
- 30. Android重新啓動服務
你實際上不能。 –