用8670做uart到spp透传的乱码问题
有朋友用8670做uart到spp的透传吗?我发现开启透传以后,第一包数据前有2、3个字节的乱码(uart source已经clean过),有朋友遇到过类似的问题么? 配置 不要休眠 就可以。但功耗增加。 没遇到过,先确定问题,可以先调试下收到的UART数据。 试试VmDeepSleepEnable(FALSE); 如果一定要休眠,可以试着过滤掉乱码(一般是0),或用RTS或CTS脚来唤醒蓝牙再通信(要配置) 休眠已经disable了,我发现是SinkClaim得到的offset导致,按照文档说明,发送的数据需要copy到SinkMap得到的地址加上一个偏移量offset,这个offset由SinkClaim得到。我调试发现,如果这个offset是2,那么发送就会有2个字节的乱码。也就是说,发送内容的起始地址是SinkMap的返回值,但是我copy数据却往后推了offset个字节,所以前面出现了乱码。所以我有点困惑,到底要不要按照文档写的,加上这个offset?另外用StreamConnect也有同样的现象,怀疑adk底层代码也是加了offset的,那我要用透传的话,这个乱码岂不是无解了?
所以我在想,是不是我的理解有问题?或者是忽略了哪里的设置?希望有朋友帮忙指点一二 luckyflycat 发表于 2019-12-27 21:04
休眠已经disable了,我发现是SinkClaim得到的offset导致,按照文档说明,发送的数据需要copy到SinkMap得到 ...
别纠结了,照着下面代码抄就好了
void UartSendBytes(const char *s, uint16 n)
{
Sink SinkUart = StreamUartSink();
uint16 offset_claim = SinkClaim(SinkUart, n);
if(SinkUart && offset_claim != 0xFFFF)
{
memcpy((SinkMap(SinkUart) + offset_claim), s, n);
(void) PanicZero(SinkFlush(SinkUart, n));
}
} 路过,学习了
页:
[1]