当前位置:网站首页>队列方法接收串口的数据
队列方法接收串口的数据
2022-08-03 05:24:00 【langaopeng】
通常在接收串口数据时,往往由于发送端发送数据量太快导致接收端无法完全接收发送过来的数据。原因是还没有来得
急处理数据,后面的数据已将前面数据覆盖。所以在处理此问题时,必须用队列的方式处理串口的数据。。即把接收数
据和处理数据分开处理。用缓冲的方法,如下。。
typedef struct
{
unsigned int UsartRxbuf[1000]; //接收串口buf
unsigned int *Usart_IN; //接收串口数据存入的地址
unsigned int *Usart_OUT; //访问接收的串口数据时,访问此地址
unsigned int *Usart_start; //接收串口buf的起始指针
unsigned int *Usart_end; //接收串口buf的结束指针
unsigned int usart_RX_cout; //接收计数器
unsigned int usart_TX_cout; //处理计数器
}Usart_struct;
Usart_struct usartstruct;
void usart_start(Usart_struct *pd)
{
pd->Usart_start = &(pd->UsartRxbuf[0]);
pd->Usart_end = &(pd->UsartRxbuf[1000-1]);
pd->Usart_IN = &(pd->UsartRxbuf[0]);
pd->Usart_OUT = &(pd->UsartRxbuf[0]);
pd->usart_RX_cout = 0;
pd->usart_TX_cout = 0;
}
void usart_Rx(Usart_struct *pd, unsigned int dat) //接收中断调用,dat为接收到的数据
{
*pd->Usart_IN = dat;
pd->Usart_IN++;
pd->usart_RX_cout++;
if(pd->Usart_IN == pd->Usart_end) //当接收串口数据存入的地址为结束指针时返回起始地址
{
pd->Usart_IN = pd->Usart_start;
}
if(pd->usart_RX_cout==1000)
{
pd->usart_RX_cout = 0;
}
}
unsigned int usart_confign(Usart_struct *pd)
{
unsigned int msg;
msg = *pd->Usart_OUT;//读出数据
pd->Usart_OUT++ ;
if(pd->Usart_OUT== pd->Usart_end)
{
pd->Usart_OUT = pd->Usart_start;
}
return msg;
}
void send_RX_TX(Usart_struct *pd )
{
unsigned int msg;
if(pd->usart_RX_cout != pd->usart_TX_cout)
{
pd->usart_TX_cout++;
if(pd->usart_TX_cout == 1000) pd->usart_TX_cout = 0;
msg = usart_confign(pd);
dowith(msg); //访问串口过来的数据
}
}
边栏推荐
- HoloLens联合发明人:打造理想的全天AR需要解决这些问题
- 【第二周】卷积神经网络
- 中国生物反应器行业市场投资分析及前景预测报告2022~2028年
- Hook初探索
- 自监督论文阅读笔记 Ship Detection in Sentinel 2 Multi-Spectral Images with Self-Supervised Learning
- 中国生产力促进中心”十四五”规划与发展规模分析报告2022~2028年
- 自监督论文阅读笔记 SimCLRV2 Big Self-Supervised Models are Strong Semi-Supervised Learners
- Sqli-labs-master shooting range 1-23 customs clearance detailed tutorial (basic)
- 二叉树常见的问题和解决思路
- Qemu 搭建Armv8 平台
猜你喜欢
随机推荐
Oracle 日历表详解(含节假日)
page fault-页异常流程
Android学习 | 08.SQLiteOpenHelper
该描述怎么写成SQL语句
深度学习理论课程第四、五章总结
Mysql 外键详解(Foreign Key)
神经网络基础
Oracle 密码策略详解
中国食品产业园区行业前景规划建议及投融资模式分析报告2022~2028年
ASP.NET MVC3的伪静态实现
【DC-2 Range Penetration】
A.1#【内存管理】——1.1.4 node: 初始化
进程间通信IPC - 信号量
Qlik Sense 字符串截取和拼接详解(Left、Right、&)
【Yarn】yarn常用命令 查看日志和Kill任务
自监督论文阅读笔记 DenseCL:Dense Contrastive Learning for Self-Supervised Visual Pre-Training
NFT租赁提案EIP-5006步入最后审核!让海外大型游戏的链改成为可能
MySQL 慢查询
代码没写完,哪里有脸睡觉!17 张程序员壁纸推荐
自监督论文阅读笔记FIAD net: a Fast SAR ship detection network based on feature integration attention and self