CmBacktrace icon indicating copy to clipboard operation
CmBacktrace copied to clipboard

【完善】通过traceRETURN_xTaskGetCurrentTaskHandle获取FreeRTOS任务栈信息, 避免修改源码

Open gangli01 opened this issue 1 year ago • 4 comments

通过定义traceRETURN_xTaskGetCurrentTaskHandle宏,在调用xTaskGetCurrentTaskHandle()时,在其内部记录当前task的start address和stack size,这样可以避免修改FreeRTOS源码。

gangli01 avatar May 12 '24 10:05 gangli01

通过定义traceRETURN_xTaskGetCurrentTaskHandle宏,在调用xTaskGetCurrentTaskHandle()时,在其内部记录当前task的start address和stack size,这样可以避免修改FreeRTOS源码。

在实际使用的时候,是否仍然需要在 task.c 中引用头文件 cm_backtrace/cmb_def.h 以使 traceRETURN_xTaskGetCurrentTaskHandle 生效

OotonnChen avatar Nov 13 '24 08:11 OotonnChen

哥们,好像无法生成addrline2的提示了

hmpgithub avatar Jan 14 '25 07:01 hmpgithub

image

hmpgithub avatar Jan 14 '25 07:01 hmpgithub

我有一个小小的改进,可以进一步减少对RTOS源码的修改,将下面函数添加到FreeRTOS\Source\tasks.c文件中

void get_current_task(uint32_t *ft_start_addr, uint32_t *ft_size) {
  *ft_start_addr = (uint32_t)pxCurrentTCB->pxStack;
  *ft_size = (uint32_t)pxCurrentTCB - (uint32_t)pxCurrentTCB->pxStack - 4 * sizeof(StackType_t);
}

然后在cm_backtrace.cget_cur_thread_stack_info函数中直接调用并传入指针即可

#elif (CMB_OS_PLATFORM_TYPE == CMB_OS_PLATFORM_FREERTOS)
    get_current_task(start_addr, size);
#elif (CMB_OS_PLATFORM_TYPE == CMB_OS_PLATFORM_RTX5)

ZhangRiven avatar Apr 01 '25 06:04 ZhangRiven