TI中文支持网
TI专业的中文技术问题搜集分享网站

CC2642R: 蓝牙程序运行一段时间后跑飞死机

Part Number:CC2642ROther Parts Discussed in Thread:SYSCONFIG

基于CCS10.3 ,sdk_5_10_00_48,simple_peripheral_oad_offchip_CC26X2R1_LAUNCHXL_tirtos_ccs

程序运行了一晚上后出现死机现象,复位后可正常运行。一般此现象会在运行6-10小时以上才会出现,复现比较麻烦。昨晚运行的时间约为8.9小时,可以看到任务轮询时间卡在第几秒,在此之前一直有执行外部中断计数,硬件定器计数,还保存了外部flash数据(5分钟存储一次数据),想知道如果是程序跑飞,该从哪里查找?一般跑飞是否可以进入某些函数,进行打印信息?

Kevin Qiu1:

使用的是自制板还是launchpad,程序中有几个任务?

死机可能是任务之间有冲突,也有可能是内存溢出

参考这里抓取一些日志信息看一下https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/939054/faq-cc2642r-tips-and-tricks-to-use-ble_log_int_-functionalities?tisearch=e2e-sitesearch&keymatch=faq%3Atrue

,

xiaoxiong:

三个,一个默认的系统任务SimplePeripheral,一个是外部flash任务,一个硬件定时任务发布信号量的任务。问题依然没找出来,有一个板子运行了约69个小时,两天多,系统任务SimplePeripheral死机了,此时该任务下的任务不运行了,包括灯不闪了,但是此时搜索蓝牙发现依然在广播,我用蓝牙调试助手连接了一下,发现可以连接上,可以读,后面断开蓝牙后便搜索不到了。但是还没有完全死机,此时我又按了下按键,发现外部中断依然有部分效果。

这种不完全死机应该从哪里下手查找问题呢?

,

Kevin Qiu1:

不好判断是什么引起的,内存溢出或者任务调度有问题都有可能

上面让你抓取log信息,抓取了吗,显示什么信息

,

xiaoxiong:

没有,现在尝试,是否要一直开启仿真模式?等待异常到来时再查看

gBleLogBuffer的数值吗?异常到来时需要先暂停仿真吗

,

xiaoxiong:

大概抓取到这些信息,这次运行了约15小时

,

xiaoxiong:

,

Kevin Qiu1:

xiaoxiong 说:是否要一直开启仿真模式?

不需要一直开启仿真模式,它会保存在flash中,之后读取就可以了,上面的log信息看起来没有有用的信息,一般会触发一些事件

实际测试可以减小连接间隔,这样可以减小复现问题所需要的时间

从最后一张图来看,唤醒有一些问题,关于唤醒、休眠你修改了哪些部分

你的板子是自己制作的还是TI的launchpad?在launchpad上能否复现这个问题

,

xiaoxiong:

自制的板,手上没有launchpad。

没有改动过唤醒和休眠,默认使用POWER_SAVING。先前参考零项目,照着改动过相关的连接间隔,基本都为很小的

,

Kevin Qiu1:

看起来硬件可能也有问题,按照这里排查一下:https://www.ti.com.cn/cn/lit/an/swra640e/swra640e.pdf

最好是用launchpad验证一下,这样有助于快速排查问题

,

xiaoxiong:

如果找不到合适的解决办法,是否可以忽略此部分的内容?即注释掉这部分断言

,

Kevin Qiu1:

注释掉只是看不见断言错误了,不能解决死机的问题

,

Kevin Qiu1:

注释掉只是看不见断言错误了,不能解决死机的问题

,

xiaoxiong:

有一台跑了四天才跑飞,想了一下,休眠和睡眠的,似乎没改什么,只有在初始化的时候,原本main函数执行的是Board_initGeneral();,里面有管脚初始化和flash睡眠的函数,由于flash管脚更改了,且这部分函数不会自动生成新的管脚,所以我没有采用这部分函数,这里的main函数只执行PIN_init(BoardGpioInitTable);了,对比一下,缺少Power_init();,Board_shutDownExtFlash();,Board_initHook();这三个,是否有影响呢,如果有影响,现在能做的便是添加Power_init();,Board_initHook();函数,Flash这个函数难道要自己改一份?管脚不一样

,

Kevin Qiu1:

现在不确定是什么引起的,从上面的结果来看,可能是硬件也可能是软件

不好针对性的修改,只能修改着看

xiaoxiong 说:Flash这个函数难道要自己改一份?管脚不一样

如果用到了片外flash,是需要修改一下,管脚不一样则需要重新修改映射

上面说过,用launchpad有助于快速定位问题所在

,

xiaoxiong:

感谢回复!

FLASH重新映射我了解,但是重新映射后,Board_shutDownExtFlash()函数并不会按照管脚去修改,不知道您是否有了解过这部分代码,这部分是固定的代码,管脚使用的是直接调用IOID_20,并不会随着配置文件syscfg修改,且这个函数的生成在ti_drivers_config.c,是派生文件

,

Kevin Qiu1:

这部分是固化了,不能通过sysconfig动态修改,

在SDK安装目录\simplelink_cc13x2_26x2_sdk_5_20_00_52\source\ti\drivers\.meta\templates

找到BoardCC26XX.c.xdt文件,打开后查找IOID_20将其全部替换为自定义引脚(如IOID_15)

改完后保存,然后rebuild工程就可以替换成功

,

xiaoxiong:

好的,感谢。有一个相关的论坛https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/651951/cc2640r2f-multirole-satck-4-2-and-stack-5-0-problems/2407554#2407554也是有这种偶发性问题,不过看到最后似乎跟我的不太一样

,

Kevin Qiu1:

是和你的不太一样,如果没有launchpad,只能慢慢试了,逐个排除

赞(0)
未经允许不得转载:TI中文支持网 » CC2642R: 蓝牙程序运行一段时间后跑飞死机
分享到: 更多 (0)

© 2024 TI中文支持网   网站地图 鲁ICP备2022002796号-1