中
A
在TLSR8258正常运行过程中,经常异常卡死,卡死后,通过BDT查看RAM的明显的异常点是 :00849b88 g O .data_no_init 00000200 scan_pri_chn_rx_fifo 这个区域的值都变成了0xFF。
请问是什么原因造成的?
你好,
请和未修改的SDK比对,有什么操作引起的,一般可能是是数组越界了。
红色框的数据跟正常的时候是一样的,按理说数组越界了,那么在9B88地址前的数据也可能会异常,且也不会有覆盖512大小的填充0xFF的操作。
以下是在此地址之前的相关的变量,新增的变量没发现有越界的操作,其他的是SDK自带的,其中system_clk_type的值是0x60,是正常的,bltempParam,aes_enc_dec_busy,scan_pri_chn_rx_fifo在库里,看不到怎么操作的,这个数组512大小全部变成0xFF了,感觉更可能是库自行赋值。
PS: 目前用的是B85M_BLE_SDK_V4.0.1.3这个软件中的b85m_m1s1工程
最好能在原始SDK复现出来,如果为企业可以同FAE一起调试看看。
另外请教一下:
boot_32k_retn.link中的:
. = 0x848900; .data : AT ( _dstored_ ) { . = (((. + 3) / 4)*4); PROVIDE(_start_data_ = . ); *(.data); //这个为什么有 ’;‘ *(.data.*); //这个为什么有 ’;‘
但是在boot.link文件中相应的位置却没有’;‘。 这个是什么意思呢?
还有.S文件中:
FLL_D: .word 0xffffffff .word (_start_data_) @.word (0x850000) .word (_start_data_ + 32)
这个只需要初始化前32个字节,而不需要全部初始化吗?
如果系统卡死了,如何定位死在什么位置,什么原因导致的?
尝试逐渐减少你的应用代码,添加打印,找到出问题的地方。
谢谢解答,我用了很简易的应用,还是同样概率出现。
有什么方法可以读取当前PC指向哪个位置,以及往上Track Call stack的过程?
另:上面说的 *(.data)和 *(.data.*)后面是否加分号“;” 有什么影响,以及.S文件对RAM的初始化,为什么只前32个字节,其余的不用初始化,没什么关系吗?
感谢!
1 BDT软件中的PC按钮能获取当前PC值,查看函数压栈的过程请联系FAE,并未公开。
2 .word (_start_data_ + 32)只是在flash的某个位置保存_start_data_ + 32这个值,初始化ram在后面了,可以贴出你的复现代码,步骤。
你好,
请和未修改的SDK比对,有什么操作引起的,一般可能是是数组越界了。
红色框的数据跟正常的时候是一样的,按理说数组越界了,那么在9B88地址前的数据也可能会异常,且也不会有覆盖512大小的填充0xFF的操作。
以下是在此地址之前的相关的变量,新增的变量没发现有越界的操作,其他的是SDK自带的,其中system_clk_type的值是0x60,是正常的,bltempParam,aes_enc_dec_busy,scan_pri_chn_rx_fifo在库里,看不到怎么操作的,这个数组512大小全部变成0xFF了,感觉更可能是库自行赋值。
PS: 目前用的是B85M_BLE_SDK_V4.0.1.3这个软件中的b85m_m1s1工程
你好,
最好能在原始SDK复现出来,如果为企业可以同FAE一起调试看看。
另外请教一下:
boot_32k_retn.link中的:
. = 0x848900;
.data :
AT ( _dstored_ )
{
. = (((. + 3) / 4)*4);
PROVIDE(_start_data_ = . );
*(.data); //这个为什么有 ’;‘
*(.data.*); //这个为什么有 ’;‘
但是在boot.link文件中相应的位置却没有’;‘。 这个是什么意思呢?
还有.S文件中:
FLL_D:
.word 0xffffffff
.word (_start_data_)
@.word (0x850000)
.word (_start_data_ + 32)
这个只需要初始化前32个字节,而不需要全部初始化吗?
如果系统卡死了,如何定位死在什么位置,什么原因导致的?
尝试逐渐减少你的应用代码,添加打印,找到出问题的地方。
谢谢解答,我用了很简易的应用,还是同样概率出现。
有什么方法可以读取当前PC指向哪个位置,以及往上Track Call stack的过程?
另:上面说的 *(.data)和 *(.data.*)后面是否加分号“;” 有什么影响,以及.S文件对RAM的初始化,为什么只前32个字节,其余的不用初始化,没什么关系吗?
感谢!
1 BDT软件中的PC按钮能获取当前PC值,查看函数压栈的过程请联系FAE,并未公开。
2 .word (_start_data_ + 32)只是在flash的某个位置保存_start_data_ + 32这个值,初始化ram在后面了,可以贴出你的复现代码,步骤。