蓝牙工程监控

This commit is contained in:
stark1898y 2024-12-08 11:32:01 +08:00
parent 3cdccc4d63
commit f119dc7d0d
1 changed files with 71 additions and 41 deletions

View File

@ -263,9 +263,41 @@ void WWDG_ClearFlag(void)
*/ */
__INTERRUPT __INTERRUPT
__HIGH_CODE __HIGH_CODE
__attribute__((weak)) __attribute__((weak)) void HardFault_Handler(void)
void HardFault_Handler(void)
{ {
// https://www.cnblogs.com/gscw/p/18159920
// 监控函数和 PC 指针可以同时使用。监控函数需要在蓝牙工程中使用才有意义,如果打印值为空,检查是否使用蓝牙。
struct __MEMORY_CTL
{
struct __MEMORY_CTL *pNext;
uint16_t len;
uint16_t used;
};
typedef struct __MEMORY_CTL MemoryCtl;
extern MemoryCtl *MemCtlStart;
extern MemoryCtl *MemCtlEnd;
MemoryCtl *MemHead;
MemHead = MemCtlStart;
while (MemHead != MemCtlEnd)
{
printf("|%8x,%8x,%8d.....\n", MemHead->used, (uint32_t)MemHead,
(uint32_t)(MemHead->pNext) - (uint32_t)MemHead - sizeof(struct __MEMORY_CTL));
MemHead = MemHead->pNext;
}
printf("\n");
uint32_t v_mepc, v_mcause, v_mtval;
printf("hardfault\n");
v_mepc = __get_MEPC();
v_mcause = __get_MCAUSE();
v_mtval = __get_MTVAL();
printf("mepc:%08x\n", v_mepc);
printf("mcause:%08x\n", v_mcause);
printf("mtval:%08x\n", v_mtval);
#if 0
FLASH_ROM_SW_RESET(); FLASH_ROM_SW_RESET();
sys_safe_access_enable(); sys_safe_access_enable();
R16_INT32K_TUNE = 0xFFFF; R16_INT32K_TUNE = 0xFFFF;
@ -273,6 +305,7 @@ void HardFault_Handler(void)
sys_safe_access_enable(); sys_safe_access_enable();
R8_RST_WDOG_CTRL |= RB_SOFTWARE_RESET; R8_RST_WDOG_CTRL |= RB_SOFTWARE_RESET;
sys_safe_access_disable(); sys_safe_access_disable();
#endif
while (1); while (1);
} }
@ -372,8 +405,7 @@ int _write(int fd, char *buf, int size)
* *
* @return size: Data length * @return size: Data length
*/ */
__attribute__((used)) __attribute__((used)) void *_sbrk(ptrdiff_t incr)
void *_sbrk(ptrdiff_t incr)
{ {
extern char _end[]; extern char _end[];
extern char _heap_end[]; extern char _heap_end[];
@ -385,5 +417,3 @@ void *_sbrk(ptrdiff_t incr)
curbrk += incr; curbrk += incr;
return curbrk - incr; return curbrk - incr;
} }