Skip to content

Conversation

gangli01
Copy link

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

@gangli01 gangli01 force-pushed the develop/cmbacktrace branch from e08c5ee to e847d8b Compare May 13, 2024 02:26
@OotonnChen
Copy link

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

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

@hmpgithub
Copy link

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

@hmpgithub
Copy link

image

@ZhangRiven
Copy link

我有一个小小的改进,可以进一步减少对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)

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

Successfully merging this pull request may close these issues.

4 participants