CmBacktrace
CmBacktrace copied to clipboard
【完善】通过traceRETURN_xTaskGetCurrentTaskHandle获取FreeRTOS任务栈信息, 避免修改源码
通过定义traceRETURN_xTaskGetCurrentTaskHandle宏,在调用xTaskGetCurrentTaskHandle()时,在其内部记录当前task的start address和stack size,这样可以避免修改FreeRTOS源码。
通过定义
traceRETURN_xTaskGetCurrentTaskHandle宏,在调用xTaskGetCurrentTaskHandle()时,在其内部记录当前task的start address和stack size,这样可以避免修改FreeRTOS源码。
在实际使用的时候,是否仍然需要在 task.c 中引用头文件 cm_backtrace/cmb_def.h 以使 traceRETURN_xTaskGetCurrentTaskHandle 生效
哥们,好像无法生成addrline2的提示了
我有一个小小的改进,可以进一步减少对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.c的get_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)