程序运行一段时间后进入__asm("BKPT #0\n");死循环了。

2 posts / 0 new
Last post
gwjgwgshxd
Offline
Last seen:3 years 1 month ago
加入:2016-12-14 52
程序运行一段时间后进入__asm("BKPT #0\n");死循环了。

技术支持你好!
现在遇到个问题,程序运行一段时间后就进入下面的程序中一直死循环。
if (REG_GETF(CRG_TOP, SYS_STAT_REG, DBG_IS_ACTIVE)) {
__asm("BKPT #0\n");
}
应该是进入了不可屏蔽中断,但是之前程序都可以正常运行没有改动过其他地方啊。应该是从看门狗hw_watchdog_handle_int中断进入的死循环。我从新下载没有改动过的pxp_reporter工程到板子上,问题依然存在。

下面是调试的时候打印出来的消息:(一直不停的打印)我通过Ozone工具查找到0x07FD0576这个地址正好是 __asm("BKPT #0\n");这个语句
开始目标CPU……
...Breakpoint reached @ address 0x07FD0576
Reading all registers
Read 4 bytes @ address 0x07FD0576 (Data = 0xBD70BE00)
开始目标CPU……
...Breakpoint reached @ address 0x07FD0576
Reading all registers
Read 4 bytes @ address 0x07FD0576 (Data = 0xBD70BE00)
开始目标CPU……
...Breakpoint reached @ address 0x07FD0576
Reading all registers
Read 4 bytes @ address 0x07FD0576 (Data = 0xBD70BE00)
开始目标CPU……
...Breakpoint reached @ address 0x07FD0576
Reading all registers
Read 4 bytes @ address 0x07FD0576 (Data = 0xBD70BE00)
开始目标CPU……
...Breakpoint reached @ address 0x07FD0576
Reading all registers
Read 4 bytes @ address 0x07FD0576 (Data = 0xBD70BE00)
开始目标CPU……
...Breakpoint reached @ address 0x07FD0576
Reading all registers
Read 4 bytes @ address 0x07FD0576 (Data = 0xBD70BE00)
开始目标CPU……

Device:
Qinjiny_Dialog
Offline
Last seen:1 month 3 days ago
圣aff
加入:2016-11-01 05:47
这个是进入hardfault了

这个是进入hardfault了,你找到函数HardFault_HandlerC里的
*(volatile unsigned long *)(STATUS_BASE + 0x14) = hardfault_args[5]; // LR
*(volatile unsigned long *)(STATUS_BASE + 0x18) = hardfault_args[6]; // PC

一般这个寄存器位于0x07FC56000,LR和PC分别位于5 6位,可以用Studio里的memory browser看到,从这两个位置储存的地址可以用来作为根据去map文件里查看是哪里引起的错误,结合studio里的汇编浏览窗口反查程序出错的地方