8个帖子/ 0新
最后一篇
ch
离线
最后一次露面:3年12个月前
加入:2014-09-02 09:54
调试下载出错

官网下载的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。编译调试下载没出现个问题,一切正式。这个问题是咋回?

关键词:
设备:
Gongyu_dialog.
离线
最后一次露面:2天10小时前
加入:2016-04-27 07:07
我在演示板上跑,没问题啊。是怎么出现问题的

我在演示板上跑,没问题啊。是怎么出现问题的?

ch
离线
最后一次露面:3年12个月前
加入:2014-09-02 09:54
不到怎么出现的,有时又会出这种,换一块板又好了

不到怎么出现的,有时又会出这种,换一块板又好了

Gongyu_dialog.
离线
最后一次露面:2天10小时前
加入:2016-04-27 07:07
我也是不是没接闪存?邦德_DB

我也是不是是闪存?BOND_DB_INIT参数需要和闪光行交互

Gongyu_dialog.
离线
最后一次露面:2天10小时前
加入:2016-04-27 07:07
出问题的时髦,你把*(挥发性无符号

出问题的时代,你把*(valatile unsigned long *)(status_base + 0x14)= hardfault_args [5];// lr.
*(valatile unsigned long *)(status_base + 0x18)= hardfault_args [6];// 个人电脑

这两个值拿到,回到地图文件,看看落在哪哪函数码里

ch
离线
最后一次露面:3年12个月前
加入:2014-09-02 09:54
谢谢。

谢谢。
这这个仪器:
lr 0xfffffff9.
PC 0x200005F0.
SP 0x20009738.
地铁在地图上没没找到。

Gongyu_dialog.
离线
最后一次露面:2天10小时前
加入:2016-04-27 07:07
需要拿的是之词的lr和pc,直接从地图“状态

需要拿的是之前保存的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面面)

ch
离线
最后一次露面:3年12个月前
加入:2014-09-02 09:54
谢谢帮助。

谢谢帮助。