当前位置:网站首页>队列方法接收串口的数据
队列方法接收串口的数据
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); //访问串口过来的数据
}
}
边栏推荐
- Oracle count(1)、count(*)、count(列) 区别详解
- Qemu 搭建Armv8 平台
- 自监督论文阅读笔记: MoCoV2使用动量对比学习改进基线
- Oracle null 有哪些注意事项【面试题】
- HANA 常用数据类型详解
- 自监督论文阅读笔记 Incremental-DETR:Incremental Few-Shot Object Detection via Self-Supervised Learning
- 极光推送 能否缓存 消息
- A.1#【内存管理】——1.1.4 node: 初始化
- MySQL 排序
- 自监督论文阅读笔记 SimCLRV2 Big Self-Supervised Models are Strong Semi-Supervised Learners
猜你喜欢
二叉树常见的问题和解决思路
漫谈Map Reduce 参数优化
嵌入式实验二注意点
当我们在看Etherscan的时候,到底在看什么?
MySQL 下载和安装详解
【DC-2 Range Penetration】
自监督论文阅读笔记Index Your Position: A Novel Self-Supervised Learning Method for Remote Sensing Images Sema
Qlik Sense 聚合函数及范围详解(Sum、Count、All、ToTaL、{1})
Qlik Sense 判空详解(IsNull)
Leetcode刷题——一些用层次遍历解决的问题(111. 二叉树的最小深度、104. 二叉树的最大深度、226. 翻转二叉树、剑指 Offer 27. 二叉树的镜像)
随机推荐
嵌入汇编-1 格式讲解
Convolutional Nerual Nertwork(CNN)
中国水环境治理行业投融资分析及“十四五”规划建议报告2022~2028年
A.1#【内存管理】——1.1.2 zone: struct zone
Qemu 搭建Armv8 平台
A.1#【内存管理】——1.1.1 node:struct pglist_data
IO 复用
中国食品微生物检测行业深度监测及投资战略规划建议报告2022~2028年
controller层到底能不能用@Transactional注解?
交叉熵(第六周)
php连接数据库脚本
观看华为AI技术领域课程--深度学习前三章总结
[frp intranet penetration]
网络间通信
Makefile自动推导的简单例程
B.1#【编程语言】—1 arm 汇编指令
cmdline -[command line,__fdt_pointer,initial_boot_params] boot_command_line 获取
Playing with Markdown(2) - Extraction and Manipulation of Abstract Syntax Trees
The result of request.getParameter is on
自监督论文阅读笔记Index Your Position: A Novel Self-Supervised Learning Method for Remote Sensing Images Sema