之前在E2E发过一个帖,是在2640中新创建任务遇到的问题
https://e2e.ti.com/support/wireless_connectivity/bluetooth_low_energy/f/538/p/633320/2337081#2337081
英文不好,所以把问题简单地描述了一下,现在说具体一些
在自己创建的任务中,往任务发送队列消息、信号量,任务都能收到,收到以后,执行一些如UART发送数据、IO操作,都很正常。
但是只要在任务中调用了GATT_Notification、GAPRole_TerminateConnection()这些涉及到BLE底层的函数,程序就出现异常了,而这些函数在SimpleBLEPeripheral_taskFxn任务中调用是一点问题都没有的。
我仔细检查过出现问题的原因,排除了以下可能性:
1)、已经修改了ICALL_MAX_NUM_TASKS值,否则连新创建的任务都运行不了,所以这个可能性排除;
2)、任务堆栈不够大?任务本身执行的东西非常少,在加大堆栈以后,问题仍然存在,所以这个可能性也排除;
3)、任务优先级问题?修改过优先级,问题仍然如此;
目前我唯一怀疑的可能性,是注册消息的接收的函数,是在SimpleBLEPeripheral_taskFxn里面执行的,
GAP_RegisterForMsgs(selfEntity);
GATT_RegisterForMsgs(selfEntity);
所以在别的任务里去调用涉及到这个层次的函数,就会出错!
请问TI的工程师,是否真有可能如我分析,问题出现在这里呢,如此的话,该如何解决,谢谢!
Sheldon He:
这个问题出在任务注册上。一个任务如果要调用GAP的东西需要通过ICALL注册,具体请参考例程里面的几个任务,在任务循环的外边是有这个注册过程的
Sheldon He:
请参考https://e2e.ti.com/support/wireless_connectivity/bluetooth_low_energy/f/538/t/616474?tisearch=e2e-sitesearch&keymatch=%20user%3A319007