官网下载的SDK5.04。没迁移过,编译ble_app_security工程,调试下载出现以:
if(development_debug)
{
wdg_freeze();//停止wdog.
setbits16(sys_ctrl_reg,debugger_enable,1);//使调试器能够重新连接
*(volatile unsigned long *)(status_base)= hardfault_args [0];// r0.
*(varatile unsigned long *)(status_base + 0x04)= hardfault_args [1];// r1
*(valatile unsigned long *)(status_base + 0x08)= hardfault_args [2];// r2.
*(valatile unsigned long *)(status_base + 0x0c)= hardfault_args [3];// r3.
*(volatile unsigned long *)(status_base + 0x10)= hardfault_args [4];// r12.
*(valatile unsigned long *)(status_base + 0x14)= hardfault_args [5];// lr.
*(valatile unsigned long *)(status_base + 0x18)= hardfault_args [6];// 个人电脑
*(varatile unsigned long *)(status_base + 0x1c)= hardfault_args [7];// psr.
*(valatile unsigned long *)(status_base + 0x20)=(无符号长)hardfault_args;//堆栈指针
*(volatile unsigned long *)(status_base + 0x24)=(*((varatile unsigned long *)(0xe000ed28))));// cfsr.
*(valatile unsigned long *)(status_base + 0x28)=(*((varatile unsigned long *)(0xe000ed2c)))));// HFSR.
*(valatile unsigned long *)(status_base + 0x2c)=(*((volatile unsigned long *)(0xe000ed30)))));// dfsr.
*(valaTile unsigned long *)(status_base + 0x30)=(*((varatile unsigned long *)(0xe000ed3c)))));// AFSR.
*(volatile unsigned long *)(status_base + 0x34)=(*((volatile unsigned long *)(0xe000ed34))));// mmar.
*(valatile unsigned long *)(status_base + 0x38)=(*((valatile unsigned long *)(0xe000ed38)))));// bfar.
if((getword16(sys_stat_reg)&dbg_is_up)== dbg_is_up)
__asm(“bkpt#0 \ n”);//调试下车在这里
别的
{
而(1);
}
又试了下SDK5.04的其他工程:APP_SLEEPMODE。编译调试下载没出现个问题,一切正式。这个问题是咋回?
我在演示板上跑,没问题啊。是怎么出现问题的?
不到怎么出现的,有时又会出这种,换一块板又好了
我也是不是是闪存?BOND_DB_INIT参数需要和闪光行交互
出问题的时代,你把*(valatile unsigned long *)(status_base + 0x14)= hardfault_args [5];// lr.
*(valatile unsigned long *)(status_base + 0x18)= hardfault_args [6];// 个人电脑
这两个值拿到,回到地图文件,看看落在哪哪函数码里
谢谢。
这这个仪器:
lr 0xfffffff9.
PC 0x200005F0.
SP 0x20009738.
地铁在地图上没没找到。
需要拿的是之前保存的LR和PC,直接从地址“STATUS_BASE + 0×14”里找。而不是停在NMI_HandlerC里直接从寄存器获取的值。
*(valatile unsigned long *)(status_base + 0x14)= hardfault_args [5];// lr.
*(valatile unsigned long *)(status_base + 0x18)= hardfault_args [6];// 个人电脑
从地图文件里找,地址只会在某某函中的范围。所以能确定是哪个个函引起的。
如果要找对应行,需要在汇编文件里找。
来自自己的.rc ./***.axf> code.asm生成汇编
(fromelf.exe可在\ keil_v5 \ arm \ armcc \binire面面)
谢谢帮助。