参考TI工程师给的例子,在CC2640上实现了peripheral + Observer功能,运行一段时间后进入HARDWARE死循环。
个人严格按照github的例程写的,这里也做了几个试验发现了一个规律:
1、屏蔽 Observer 的初始化,关闭Observer功能,不会死机
2、打开Observer功能后,修改 DEFAULT_MAX_SCAN_RES 单次扫描最大数量,设置为20时,一般运行30s左右就挂了。 设置为1时,能够运行5分钟。
感觉和缓存有什么关系,但是这边回调函数发送的消息队列每一个用完我都调用了 ICall_freeMsg(pEvent)。
毕竟添加Observer功能没几行代码,已经找了2天问题,没有解决,项目进度卡住了,请ti工程师帮忙分析下!
盼复!
Viki Shi:
具体的报错信息是什么?卡在哪条语句?
user5318699:
回复 Viki Shi:
void AssertHandler(uint8 assertCause, uint8 assertSubcause){ // check the assert cause switch (assertCause) { case HAL_ASSERT_CAUSE_OUT_OF_MEMORY: break;
case HAL_ASSERT_CAUSE_INTERNAL_ERROR: // check the subcause if (assertSubcause == HAL_ASSERT_SUBCAUSE_FW_INERNAL_ERROR) { ; } else { ; } break;
case HAL_ASSERT_CAUSE_ICALL_ABORT: HAL_ASSERT_SPINLOCK; break;
default: HAL_ASSERT_SPINLOCK; }
return;}
条件 assertCause = 8,对应的错误信息,如下:
// Common Assert Causes (0x00 .. 0x1F)#define HAL_ASSERT_CAUSE_FALSE 0x00#define HAL_ASSERT_CAUSE_TRUE 0x01#define HAL_ASSERT_CAUSE_INTERNAL_ERROR 0x02#define HAL_ASSERT_CAUSE_HW_ERROR 0x03#define HAL_ASSERT_CAUSE_OUT_OF_MEMORY 0x04#define HAL_ASSERT_CAUSE_ICALL_ABORT 0x05#define HAL_ASSERT_CAUSE_ICALL_TIMEOUT 0x06#define HAL_ASSERT_CAUSE_WRONG_API_CALL 0x07#define HAL_ASSERT_CAUSE_HARDWARE_ERROR 0x08#define HAL_ASSERT_CAUSE_RF_DRIVER_ERROR 0x09#define HAL_ASSERT_CAUSE_UNEXPECTED_ERROR 0x0A
卡在 HAL_ASSERT_SPINLOCK; 具体什么原因导致的,个人并没有找到,LR寄存器保存的是这条函数的入口地址。
Viki Shi:
回复 user5318699:
是否再最新版的SDK上进行的测试?