Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

针对FreeRTOS10没有vTaskStackAddr,vTaskStackSize,vTaskName这三个函数,以及任务控制块无uxSizeOfStack成员的问题。 #81

Open
sdfvsdcw opened this issue May 3, 2024 · 0 comments

Comments

@sdfvsdcw
Copy link

sdfvsdcw commented May 3, 2024

前情提要:
chatgpt:在 FreeRTOS v10 版本中,确实移除了 vTaskStackSize 函数,这是因为不是所有平台都能支持直接获取任务的栈大小。在这个版本及以后的版本中,FreeRTOS 推荐的方式是在创建任务时自行记录栈大小,以便在需要时能够查询这些信息。
chatgpt太谨慎了,不敢让我改内核。推荐我新建个函数,每次创建任务时记录一下该任务的栈大小。但是这个删除任务时,不好同步。
我不接受gpt的建议,于是我参照v9版本,做出以下修改。pxCurrentTCB是内核自用的,是全局变量,指向当前正在运行的任务控制块,我们也可以用。如果它私有化了,那就在task.c里用
---------------1在task.c中加了以下几个函数:-------------------、

uint32_t * vTaskStackAddr()
{
    return pxCurrentTCB->pxStack;
}
 uint32_t vTaskStackSize()
{
    #if ( portSTACK_GROWTH > 0 )
    
    return (pxNewTCB->pxEndOfStack - pxNewTCB->pxStack + 1);
    
    #else /* ( portSTACK_GROWTH > 0 )*/
    
   return pxCurrentTCB->uxSizeOfStack;
 
    #endif /* ( portSTACK_GROWTH > 0 )*/
}

char * vTaskName()
{
    return pxCurrentTCB->pcTaskName;
}

----------------------2.修改task_create函数及TCB_t-------------------
a.找到TCB_t结构体定义添加一个新成员 UBaseType_t uxSizeOfStack;
b.在 xTaskCreate函数的合适的位置加上 pxNewTCB->uxSizeOfStack=usStackDepth;
就OK了
但是:这样勉强能用。如果删除了这个任务,这个栈深度成员怎么处理?希望有大佬能进一步优化
chatgpt给的注意事项:
内存使用:确保数组或记录结构有足够的空间来保存所有任务的信息。
线程安全:如果你的系统在多个任务中创建新任务,确保相应函数的操作是线程安全的。
资源管理:如果任务被删除,相应的记录也应当从数组或链表中移除。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant