From c1ae19b098d1234ae55018cfe34d5a97a3f97ec0 Mon Sep 17 00:00:00 2001 From: zmmfly Date: Sun, 22 Mar 2020 13:41:23 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=98=E5=8E=9F=E4=B8=BA=5F=5FARMCC=5FVERSIO?= =?UTF-8?q?N=E5=88=A4=E6=96=ADAC6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cm_backtrace/cm_backtrace.c | 90 +++++++++++++++++-------------------- cm_backtrace/cmb_def.h | 12 ++--- 2 files changed, 45 insertions(+), 57 deletions(-) diff --git a/cm_backtrace/cm_backtrace.c b/cm_backtrace/cm_backtrace.c index ab2019b..8a4854c 100644 --- a/cm_backtrace/cm_backtrace.c +++ b/cm_backtrace/cm_backtrace.c @@ -35,11 +35,7 @@ #error "must be C99 or higher. try to add '-std=c99' to compile parameters" #endif -<<<<<<< HEAD -#if defined(__CC_ARM) || defined(__CLANG_ARM) -======= -#if defined(__CC_ARM) ->>>>>>> parent of 735020f... 添加AC6预定义支持 +#if defined(__CC_ARM) || (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6120001)) #define SECTION_START(_name_) _name_##$$Base #define SECTION_END(_name_) _name_##$$Limit #define IMAGE_SECTION_START(_name_) Image$$##_name_##$$Base @@ -147,44 +143,44 @@ static const char * const print_info[] = { [PRINT_MMAR] = "The memory management fault occurred address is %08x", [PRINT_BFAR] = "The bus fault occurred address is %08x", #elif (CMB_PRINT_LANGUAGE == CMB_PRINT_LANGUAGE_CHINESE) - [PRINT_MAIN_STACK_CFG_ERROR] = "错误:无法获取主栈信息,请检查主栈的相关配置", - [PRINT_FIRMWARE_INFO] = "固件名称:%s,硬件版本号:%s,软件版本号:%s", - [PRINT_ASSERT_ON_THREAD] = "在线程(%s)中发生断言", - [PRINT_ASSERT_ON_HANDLER] = "在中断或裸机环境下发生断言", - [PRINT_THREAD_STACK_INFO] = "=========== 线程堆栈信息 ===========", - [PRINT_MAIN_STACK_INFO] = "============ 主堆栈信息 ============", - [PRINT_THREAD_STACK_OVERFLOW] = "错误:线程栈(%08x)发生溢出", - [PRINT_MAIN_STACK_OVERFLOW] = "错误:主栈(%08x)发生溢出", - [PRINT_CALL_STACK_INFO] = "查看更多函数调用栈信息,请运行:addr2line -e %s%s -a -f %.*s", - [PRINT_CALL_STACK_ERR] = "获取函数调用栈失败", - [PRINT_FAULT_ON_THREAD] = "在线程(%s)中发生错误异常", - [PRINT_FAULT_ON_HANDLER] = "在中断或裸机环境下发生错误异常", - [PRINT_REGS_TITLE] = "========================= 寄存器信息 =========================", - [PRINT_HFSR_VECTBL] = "发生硬错误,原因:取中断向量时出错", - [PRINT_MFSR_IACCVIOL] = "发生存储器管理错误,原因:企图从不允许访问的区域取指令", - [PRINT_MFSR_DACCVIOL] = "发生存储器管理错误,原因:企图从不允许访问的区域读、写数据", - [PRINT_MFSR_MUNSTKERR] = "发生存储器管理错误,原因:出栈时企图访问不被允许的区域", - [PRINT_MFSR_MSTKERR] = "发生存储器管理错误,原因:入栈时企图访问不被允许的区域", - [PRINT_MFSR_MLSPERR] = "发生存储器管理错误,原因:惰性保存浮点状态时发生错误", - [PRINT_BFSR_IBUSERR] = "发生总线错误,原因:指令总线错误", - [PRINT_BFSR_PRECISERR] = "发生总线错误,原因:精确的数据总线错误", - [PRINT_BFSR_IMPREISERR] = "发生总线错误,原因:不精确的数据总线错误", - [PRINT_BFSR_UNSTKERR] = "发生总线错误,原因:出栈时发生错误", - [PRINT_BFSR_STKERR] = "发生总线错误,原因:入栈时发生错误", - [PRINT_BFSR_LSPERR] = "发生总线错误,原因:惰性保存浮点状态时发生错误", - [PRINT_UFSR_UNDEFINSTR] = "发生用法错误,原因:企图执行未定义指令", - [PRINT_UFSR_INVSTATE] = "发生用法错误,原因:试图切换到 ARM 状态", - [PRINT_UFSR_INVPC] = "发生用法错误,原因:无效的异常返回码", - [PRINT_UFSR_NOCP] = "发生用法错误,原因:企图执行协处理器指令", - [PRINT_UFSR_UNALIGNED] = "发生用法错误,原因:企图执行非对齐访问", - [PRINT_UFSR_DIVBYZERO0] = "发生用法错误,原因:企图执行除 0 操作", - [PRINT_DFSR_HALTED] = "发生调试错误,原因:NVIC 停机请求", - [PRINT_DFSR_BKPT] = "发生调试错误,原因:执行 BKPT 指令", - [PRINT_DFSR_DWTTRAP] = "发生调试错误,原因:数据监测点匹配", - [PRINT_DFSR_VCATCH] = "发生调试错误,原因:发生向量捕获", - [PRINT_DFSR_EXTERNAL] = "发生调试错误,原因:外部调试请求", - [PRINT_MMAR] = "发生存储器管理错误的地址:%08x", - [PRINT_BFAR] = "发生总线错误的地址:%08x", + [PRINT_MAIN_STACK_CFG_ERROR] = "޷ȡջϢջ", + [PRINT_FIRMWARE_INFO] = "̼ƣ%sӲ汾ţ%s汾ţ%s", + [PRINT_ASSERT_ON_THREAD] = "߳(%s)з", + [PRINT_ASSERT_ON_HANDLER] = "жϻ·", + [PRINT_THREAD_STACK_INFO] = "=========== ̶߳ջϢ ===========", + [PRINT_MAIN_STACK_INFO] = "============ ջϢ ============", + [PRINT_THREAD_STACK_OVERFLOW] = "߳ջ(%08x)", + [PRINT_MAIN_STACK_OVERFLOW] = "ջ(%08x)", + [PRINT_CALL_STACK_INFO] = "鿴ຯջϢУaddr2line -e %s%s -a -f %.*s", + [PRINT_CALL_STACK_ERR] = "ȡջʧ", + [PRINT_FAULT_ON_THREAD] = "߳(%s)з쳣", + [PRINT_FAULT_ON_HANDLER] = "жϻ·쳣", + [PRINT_REGS_TITLE] = "========================= ĴϢ =========================", + [PRINT_HFSR_VECTBL] = "Ӳԭȡжʱ", + [PRINT_MFSR_IACCVIOL] = "洢ԭͼӲʵȡָ", + [PRINT_MFSR_DACCVIOL] = "洢ԭͼӲʵд", + [PRINT_MFSR_MUNSTKERR] = "洢ԭ򣺳ջʱͼʲ", + [PRINT_MFSR_MSTKERR] = "洢ԭջʱͼʲ", + [PRINT_MFSR_MLSPERR] = "洢ԭ򣺶Ա渡״̬ʱ", + [PRINT_BFSR_IBUSERR] = "ߴԭָߴ", + [PRINT_BFSR_PRECISERR] = "ߴԭ򣺾ȷߴ", + [PRINT_BFSR_IMPREISERR] = "ߴԭ򣺲ȷߴ", + [PRINT_BFSR_UNSTKERR] = "ߴԭ򣺳ջʱ", + [PRINT_BFSR_STKERR] = "ߴԭջʱ", + [PRINT_BFSR_LSPERR] = "ߴԭ򣺶Ա渡״̬ʱ", + [PRINT_UFSR_UNDEFINSTR] = "÷ԭͼִδָ", + [PRINT_UFSR_INVSTATE] = "÷ԭͼл ARM ״̬", + [PRINT_UFSR_INVPC] = "÷ԭЧ쳣", + [PRINT_UFSR_NOCP] = "÷ԭͼִЭָ", + [PRINT_UFSR_UNALIGNED] = "÷ԭͼִзǶ", + [PRINT_UFSR_DIVBYZERO0] = "÷ԭͼִг 0 ", + [PRINT_DFSR_HALTED] = "ԴԭNVIC ͣ", + [PRINT_DFSR_BKPT] = "Դԭִ BKPT ָ", + [PRINT_DFSR_DWTTRAP] = "Դԭݼƥ", + [PRINT_DFSR_VCATCH] = "Դԭ򣺷", + [PRINT_DFSR_EXTERNAL] = "Դԭⲿ", + [PRINT_MMAR] = "洢ĵַ%08x", + [PRINT_BFAR] = "ߴĵַ%08x", #else #error "CMB_PRINT_LANGUAGE defined error in 'cmb_cfg.h'" #endif @@ -217,11 +213,7 @@ void cm_backtrace_init(const char *firmware_name, const char *hardware_ver, cons strncpy(hw_ver, hardware_ver, CMB_NAME_MAX); strncpy(sw_ver, software_ver, CMB_NAME_MAX); -<<<<<<< HEAD -#if defined(__CC_ARM) -======= -#if defined(__CC_ARM) || defined(__CLANG_ARM) ->>>>>>> fb2ce800e341910fdfc3e4b5081a9f4655da530f +#if defined(__CC_ARM) || (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6120001)) main_stack_start_addr = (uint32_t)&CSTACK_BLOCK_START(CMB_CSTACK_BLOCK_NAME); main_stack_size = (uint32_t)&CSTACK_BLOCK_END(CMB_CSTACK_BLOCK_NAME) - main_stack_start_addr; code_start_addr = (uint32_t)&CODE_SECTION_START(CMB_CODE_SECTION_NAME); @@ -442,7 +434,7 @@ static void print_call_stack(uint32_t sp) { cur_depth = cm_backtrace_call_stack(call_stack_buf, CMB_CALL_STACK_MAX_DEPTH, sp); for (i = 0; i < cur_depth; i++) { - sprintf(call_stack_info + i * (8 + 1), "%08lx", call_stack_buf[i]); + sprintf(call_stack_info + i * (8 + 1), "%08x", call_stack_buf[i]); call_stack_info[i * (8 + 1) + 8] = ' '; } diff --git a/cm_backtrace/cmb_def.h b/cm_backtrace/cmb_def.h index 2b5268a..d5b00be 100644 --- a/cm_backtrace/cmb_def.h +++ b/cm_backtrace/cmb_def.h @@ -60,11 +60,7 @@ #endif -<<<<<<< HEAD -#if defined(__CC_ARM) || defined(__CLANG_ARM) -======= -#if defined(__CC_ARM) ->>>>>>> parent of 735020f... 添加AC6预定义支持 +#if defined(__CC_ARM) || (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6120001)) /* C stack block name, default is STACK */ #ifndef CMB_CSTACK_BLOCK_NAME #define CMB_CSTACK_BLOCK_NAME STACK @@ -275,7 +271,7 @@ if (!(EXPR)) \ } /* ELF(Executable and Linking Format) file extension name for each compiler */ -#if defined(__CC_ARM) || defined(__CLANG_ARM) +#if defined(__CC_ARM) || (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6120001)) #define CMB_ELF_FILE_EXTENSION_NAME ".axf" #elif defined(__ICCARM__) #define CMB_ELF_FILE_EXTENSION_NAME ".out" @@ -316,7 +312,7 @@ if (!(EXPR)) \ #endif /* (defined(CMB_USING_BARE_METAL_PLATFORM) && defined(CMB_USING_OS_PLATFORM)) */ /* include or export for supported cmb_get_msp, cmb_get_psp and cmb_get_sp function */ -#if defined(__CC_ARM) || defined(__CLANG_ARM) +#if defined(__CC_ARM) static __inline __asm uint32_t cmb_get_msp(void) { mrs r0, msp bx lr @@ -349,7 +345,7 @@ if (!(EXPR)) \ __asm("bx lr"); } #pragma diag_default=Pe940 -#elif defined(__GNUC__) +#elif defined(__GNUC__) || (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6120001)) __attribute__( ( always_inline ) ) static inline uint32_t cmb_get_msp(void) { register uint32_t result; __asm volatile ("MRS %0, msp\n" : "=r" (result) );