嗨对话框,
我的设备在启动后跑了几分钟或几小时。它不经常发生。异常位置是SDK内部代码。以下是UART捕获的3个例外信息。SDK是5.0.3。你可以帮帮我吗?
例外1:
--- HF状态
r0 =0x00000080
r1 =0x0000000d
r2 =0x0000000d
r3 =0x00000002
R12 = 0x00000028
lr = 0x200013cb.
PC = 0x0002401A.
PSR = 0x21000000.
地图文件有这个:
lld_data_ind_handler 0x00023fef Thumb Code 0 rom_symdef.txt ABSOLUTE
llm_le_enc_cmp_evt_handler 0x000241cf thumb代码0 rom_symdef.txt绝对
GAPM_ADV_SANITY 0x200012D5拇指代码170 GAPM_UTIL.OBJ(.text)
.text 0x20001384部分0 ke_task.obj(.text)
ke_task_schedule 0x20001385 Thumb代码146 ke_task.obj(.text)
.text 0x2000143C第0 SMPC.OBJ(.text)
.text 0x20001598第0节SMPC_TASK.OBJ(.text)
.text 0x200017ac部分0 llc.obj(.text)
my_llc_le_con_update_cmd_handler 0x200017AD thumb代码30 llc.obj(.text)
例外2:
--- HF状态
r1 =0x0000000d
r2 =0x0000000d
r3 =0x00000002
R12 = 0x00000028
LR = 0x2000141B.
pc = 0x0002401a
PSR = 0x21000000.
地图文件有这个:
lld_data_ind_handler 0x00023fef Thumb Code 0 rom_symdef.txt ABSOLUTE
llm_le_enc_cmp_evt_handler 0x000241cf thumb代码0 rom_symdef.txt绝对
gapm_adv_sanity 0x20001325 Thumb Code 170 gapm_util.obj(.text)
.text 0x200013d4 Section 0 ke_task.obj(.text)
ke_task_schedule 0x200013d5拇指代码146 ke_task.obj(.text)
.text 0x2000148C第0 SMPC.OBJ(.text)
.text 0x200015e8 Section 0 smpc_task.obj(.text)
.text 0x200017FC第0 LLC.OBJ(.text)
my_llc_le_con_update_cmd_handler 0x200017fd Thumb Code 30 llc.obj(.text)
例外3:
--- HF状态
r0 =0x240027fd
r1 =0x00000000
R2 = 0x0000003F.
R3 = 0x00000050
r12=0x00080ec8
lr =0xfffffff9
pc =0x240027fc
PSR = 0x01000014
didn't found lr and pc address in map file.
嗨ericxiong,
这是一个棘手的,它有点难以点击这样的问题,因为PC在ROM函数中撞击。我可以建议检查您发送的邮件的分配,或许会出现问题,或检查是否有任何memcpy函数,也许错误的错误损坏了内存中的数据。
谢谢mt_dialog.
Exception 1 and 2 seems identical. Exception 3 is hard to tell anything about.
在异常1和2中,似乎LLD_DATA_IND_HANDLLER正在处理BLE事件,即使当前没有建立连接,因此崩溃了与空指针异常。
My wild guess is that the connection was teared down just before this happened.
你的设置如何?你的DA14580外围或吗central?
Do you have a permanent active connection to a peer or are you manually connecting/disconnecting when this happens?
您是否在BLE链接上发送大量数据,或者大部分时间都是空闲的吗?
Are you sending connection parameter update requests or other kind of non-GATT requests?
这会发生一次吗?
Hi Joacimwe:
你的意思是lld_data_ind_handler正在处理一个对中心设备的指示的ble事件?
我构建了一个新的应用程序,参考Prox_reporter外围示例代码。我的DA14580是一个带有128位UUID服务的外设,具有150字节的大小特性和20个字节大小特性和几个2或4个字节大小特性。
中央设备是iOS或Android。连接时间为几分钟,中央设备将手动断开连接。
连接后,中央设备将从(至)DA14580中读取(或写入)约50个字节。大部分时间都是空闲的。
I use SDK default connection parameters and not sure if iOS or Android will send connection parameter update requests.
如果我的测试iOS应用程序工作首先进行扫描,则会发生大约1次,然后连接到发现的DA14580并读取几个字节并保持连接1分钟,然后与DA14580断开连接1分钟,定期保持闲置1分钟。在测试时,我有时会按键将触发指示通知中央设备的键。
两个新例外:
Exception 4:
--- NMI STATUS
r0 =0x00000000
r1 =0x00000000
R2 = 0x000805E4
r3 =0x00000002
R12 = 0x00000028
lr = 0x00026079.
pc =0x00032102
PSR = 0x61000000
map file is:
lld_evt_schedule 0x00026041拇指代码0 rom_symdef.txt绝对
lld_evt_init_func 0x000260e9 thumb代码0 rom_symdef.txt绝对
ke_event_clear 0x000320dd Thumb Code 0 rom_symdef.txt ABSOLUTE
ke_event_get 0x00032109 Thumb Code 0 rom_symdef.txt ABSOLUTE
Exception 5:
--- NMI STATUS
R0 = 0x00080FA4.
r1 =0x00008000
r2 = 0xffffffff.
R3 = 0x00000025
R12 = 0x00000028
lr = 0x00025d29.
PC = 0x0002572E.
PSR = 0x01000000.
map file:
lld_data_tx_flush 0x00025603拇指代码0 rom_symdef.txt绝对
lld_evt_int_extract 0x00025877 Thumb Code 0 rom_symdef.txt ABSOLUTE
lld_evt_init 0x00025f5f thumb代码0 rom_symdef.txt绝对
这些例外似乎很奇怪......你确定你不会破坏你的堆栈还是什么?
Hi Joacimwe:
What kinds of thing will corrupt stack? when testing, my iOS app just read several bytes data from DA14580. Could you give some advise to avoid those situation? Thanks!
你好,
在例外3中,地址0x240027FC指向PC指向无效,这在保留区域中。
如果到目前为止,如果堆栈损坏是主要的嫌疑人,则可以从一件事开始,是检查项目中的任何非法访问是否有任何非法访问数据数组。
嗨lt_dialog:
我的所有数据都存储在数据库中,并通过attmdb_att_get_value在配置文件和应用程序图层中获取的指针操作。ATTMDB_ATT_GET_VALUE可能会返回无效指针吗?
Hi Eric,
我的意思是,如果您的本地缓冲区,变量,指针等有任何非法访问
我的计划中没有违法的访问权限。有时,当程序访问DA14580寄存器时,可能会发生一种异常。我的设备硬件根据对话框参考设计设计。以下是在未修改的GPIO_CONFIGUREPIN中发生了异常。
lr=0x200019cd
pc=0xfffffffe
map file:
GPIO_CONFIGUREPIN 0x200019B3拇指代码38 GPIO.O(.text)
GPIO_GETPINSTATUS 0x200019D9拇指代码26 GPIO.O(.text)