Open sdfvsdcw opened 2 months ago
前情提要: 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给的注意事项: 内存使用:确保数组或记录结构有足够的空间来保存所有任务的信息。 线程安全:如果你的系统在多个任务中创建新任务,确保相应函数的操作是线程安全的。 资源管理:如果任务被删除,相应的记录也应当从数组或链表中移除。
前情提要:
chatgpt:在 FreeRTOS v10 版本中,确实移除了 vTaskStackSize 函数,这是因为不是所有平台都能支持直接获取任务的栈大小。在这个版本及以后的版本中,FreeRTOS 推荐的方式是在创建任务时自行记录栈大小,以便在需要时能够查询这些信息。 chatgpt太谨慎了,不敢让我改内核。推荐我新建个函数,每次创建任务时记录一下该任务的栈大小。但是这个删除任务时,不好同步。 我不接受gpt的建议,于是我参照v9版本,做出以下修改。pxCurrentTCB是内核自用的,是全局变量,指向当前正在运行的任务控制块,我们也可以用。如果它私有化了,那就在task.c里用 ---------------1在task.c中加了以下几个函数:-------------------、
----------------------2.修改task_create函数及TCB_t------------------- a.找到TCB_t结构体定义添加一个新成员 UBaseType_t uxSizeOfStack; b.在 xTaskCreate函数的合适的位置加上 pxNewTCB->uxSizeOfStack=usStackDepth; 就OK了 但是:这样勉强能用。如果删除了这个任务,这个栈深度成员怎么处理?希望有大佬能进一步优化 chatgpt给的注意事项: 内存使用:确保数组或记录结构有足够的空间来保存所有任务的信息。 线程安全:如果你的系统在多个任务中创建新任务,确保相应函数的操作是线程安全的。 资源管理:如果任务被删除,相应的记录也应当从数组或链表中移除。