主题中讨论的其他器件:CC2541、
我在评估板上使用2.2.1 SDK。 我的应用程序通过 UART 每秒读取大约250字节,并通过调用 SerialPortService_SetParameter()通过通知消息将其发送到我的电话应用程序,如下所示。
UART 驱动程序只需将数据复制到270字节循环缓冲区中、一个5ms 事件一次可将数据拉至80字节、4个20字节的块、并将其发送到手机。 我们之前的设计使用的是 CC2541、它在包括 Android 5.0电话在内的所有电话平台上都是稳定的。 我们目前正在升级到 CC2640、因此我将首先在评估板上运行该设计。 此设计在 Android 6和 IOS 10上保持稳定。 使用 Android 5时、我可以运行10到15秒、然后获得 bleTimeout、返回代码0x16、系统在我重新连接之前死机。 如果我将设计修改为每80ms 只写入2个20字节的缓冲区、那么它会运行更长的时间、但偶尔会停止30秒、然后恢复使用。
问题:
- 由于我正在向电话发送通知消息、导致 bleTimeout 的原因是什么?
- 当我获得 bleTimeout 时、是否有任何恢复方法?
- 为什么当我降低油门时、系统会停止30秒、然后恢复?
谢谢、
John
代码片段:
静态 bool PumpDataToPhone (void)
{
uint16i;
uint16uLen;
bStatus_tRetVal;
boolBRTN;
BRTN = false;
if (s_uPhoneTxBuffHead!= s_uPhoneTxBuffTail)
{
//我们处于活动状态...
BRTN = true;
//尝试输出4 20字节缓冲区...
for (i = 0;i < 4;i++)
{
if (s_uPhoneTxBuffHead > s_uVal TxBuffTail)
{
uLen = s_uVal TxBuffHead - s_uPhoneTxBuffeter;
}
否则
{
uLen = sizeof (s_uVal TxBuff)- s_uPortTxBuffeter
(uTX_uTX_uTXT = uTXT);}uTX_uTX_S=uTX_uTX_uTXT = uTXT = uTXT = uTXT 缓冲区;}uTX_uTX_uTX_uTXT = uTX_uTX_uTXT = uTXT = uTXT = uTXT = uTX_uTXT = uTXT = uTXT = uTXT = uTXT = uTXT = uTXT = uTXT = uTXT = uTXT = uTX
if (s_uPhoneTxBuffTxTail >= sizeof (s_phoneTxBuff))
{
s_uPhoneTxBuffTxTail = 0;
}
if (s_uPhoneTxBuffTxTail = s_uPhoneTxBuffHead)
{
//没有更多要发送的内容...
break;
}
否则
{
Display_Print1 (dispHandle、4、0、"JDO 通知错误:%d"、RetVal);
break;
}
}
返回(BRTN);
}