/*
BLE CC2541 DMA串口查询方式环形缓冲区的建立二
从二级缓冲区中读取出来一组特定数据到三级缓冲区 函数递归调用 QQ群: 376066563
每族数据中都有数据头$
每组数据中都以校验值结尾,校验值前一位为*
//低功耗 与 热启动输出以下语句
//$GPTXT,01,01,02,Resetting GPS*68礲
//$GPTXT,01,01,02,Stopping GPS*01礲
//$GPTXT,01,01,02,ANTSTATUS=INIT*25
//$GPTXT,01,01,02,ANTSTATUS=OK*3B
*/
uint8 get_cmd1_dat(frx_p *rx) //取到数据返回真,没有取到数据返回假
{
uint8 len; //缓冲区数据长度
do
{
if(rx->buf[rx->hail] == '$') //找到数据头
{
break;
}
if(++rx->hail >= RX_BUF_MAX)
{
rx->hail = 0;
}
}
while(rx->hail != rx->head);
if(rx->hail <= rx->head)
{
len = rx->head - rx->hail;
}
else
{
len = (rx->head + RX_BUF_MAX) - rx->hail;
}
if(len < RX_CMD1_MIN) //数据长度不够
{
return false;
}
else
{
for(uint8 i = 0; i < len; i++)
{
rx->dat[i] = rx->buf[rx->hail++];
if(rx->hail >= RX_BUF_MAX)
{
rx->hail = 0;
}
if(rx->dat[i] == '*') //取到数据尾
{
return true;
}
if(rx->dat[i] == '$')
{
get_cmd1_dat(rx); //本函数递归调用,函数重入,消耗资源比较多
}
}
}
return false;
}
BLE CC2541 DMA串口查询方式环形缓冲区的建立二
最新推荐文章于 2025-03-18 22:49:53 发布