From e847d8b387217275dd552afa91ad0703a291b91b Mon Sep 17 00:00:00 2001 From: Gang Li Date: Sun, 12 May 2024 19:22:58 +0900 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E5=AE=8C=E5=96=84=E3=80=91=E9=80=9A?= =?UTF-8?q?=E8=BF=87traceRETURN=5FxTaskGetCurrentTaskHandle=E8=8E=B7?= =?UTF-8?q?=E5=8F=96FreeRTOS=E4=BB=BB=E5=8A=A1=E6=A0=88=E4=BF=A1=E6=81=AF,?= =?UTF-8?q?=20=E9=81=BF=E5=85=8D=E4=BF=AE=E6=94=B9=E6=BA=90=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cm_backtrace/cm_backtrace.c | 14 +++++++++++--- cm_backtrace/cmb_def.h | 21 +++++++++++++++++---- 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/cm_backtrace/cm_backtrace.c b/cm_backtrace/cm_backtrace.c index 8390803..8bb8700 100644 --- a/cm_backtrace/cm_backtrace.c +++ b/cm_backtrace/cm_backtrace.c @@ -182,6 +182,12 @@ void cm_backtrace_firmware_info(void) { } #ifdef CMB_USING_OS_PLATFORM + +#if (CMB_OS_PLATFORM_TYPE == CMB_OS_PLATFORM_FREERTOS) +uint32_t ft_start_addr; +size_t ft_size; +#endif + /** * Get current thread stack information * @@ -208,8 +214,9 @@ static void get_cur_thread_stack_info(uint32_t *sp, uint32_t *start_addr, size_t *start_addr = (uint32_t) OSTCBCurPtr->StkBasePtr; *size = OSTCBCurPtr->StkSize * sizeof(CPU_STK_SIZE); #elif (CMB_OS_PLATFORM_TYPE == CMB_OS_PLATFORM_FREERTOS) - *start_addr = (uint32_t)vTaskStackAddr(); - *size = vTaskStackSize() * sizeof( StackType_t ); + xTaskGetCurrentTaskHandle(); + *start_addr = (uint32_t) ft_start_addr; + *size = (size_t) ft_size; #elif (CMB_OS_PLATFORM_TYPE == CMB_OS_PLATFORM_RTX5) osRtxThread_t *thread = osRtxInfo.thread.run.curr; *start_addr = (uint32_t)thread->stack_mem; @@ -241,7 +248,8 @@ static const char *get_cur_thread_name(void) { return (const char *)OSTCBCurPtr->NamePtr; #elif (CMB_OS_PLATFORM_TYPE == CMB_OS_PLATFORM_FREERTOS) - return vTaskName(); + char *taskName = pcTaskGetName(NULL); + return (const char *)taskName; #elif (CMB_OS_PLATFORM_TYPE == CMB_OS_PLATFORM_RTX5) return osRtxInfo.thread.run.curr->name; #endif diff --git a/cm_backtrace/cmb_def.h b/cm_backtrace/cmb_def.h index a78894b..30c8182 100644 --- a/cm_backtrace/cmb_def.h +++ b/cm_backtrace/cmb_def.h @@ -342,10 +342,10 @@ if (!(EXPR)) \ #elif (CMB_OS_PLATFORM_TYPE == CMB_OS_PLATFORM_UCOSIII) #include #elif (CMB_OS_PLATFORM_TYPE == CMB_OS_PLATFORM_FREERTOS) - #include - extern uint32_t *vTaskStackAddr(void);/* need to modify the FreeRTOS/tasks source code */ - extern uint32_t vTaskStackSize(void); - extern char * vTaskName(void); + #include + #include "task.h" + extern TaskHandle_t xTaskGetCurrentTaskHandle(void); + extern char * pcTaskGetName(TaskHandle_t xTaskToQuery); #elif (CMB_OS_PLATFORM_TYPE == CMB_OS_PLATFORM_RTX5) #include "rtx_os.h" #else @@ -423,4 +423,17 @@ if (!(EXPR)) \ #error "not supported compiler" #endif +#if (CMB_OS_PLATFORM_TYPE == CMB_OS_PLATFORM_FREERTOS) +extern uint32_t ft_start_addr; +extern size_t ft_size; + +#undef traceRETURN_xTaskGetCurrentTaskHandle +#define traceRETURN_xTaskGetCurrentTaskHandle(xReturn) \ + { \ + ft_start_addr = (xReturn != NULL ? (StackType_t)xReturn->pxStack : 0); \ + ft_size = (xReturn != NULL ? (StackType_t)xReturn - (StackType_t)xReturn->pxStack - \ + 4 * sizeof(StackType_t) : 0); \ + } +#endif + #endif /* _CMB_DEF_H_ */