串口实现FIFO接受数据
基本原理:静态队列
/*
* 串口的FIFO简单读取实现
* 功能,实现串口的FIFO实现
* 使用方法:
* 版本:v1.0.0
*
*/
#include "sys.h"
#include "usartbuf.h" USARType Usart_fifo_Read( Usart_RecerivePoint Rusart,uint8_t * buf,uint8_t length)
{
if (Rusart->Count - length < )//缓冲区没有足够的数据
{
return USARTREADOVER;//读数据越界
}
while (length--)
{
*buf = Rusart->Recerivrbuffer[Rusart->Pread];
buf++;
Rusart->Count --;
Rusart->Pread++;//读取指针自加
if(Rusart->Pread == RECERIVRSIZE)
{
Rusart->Pread =;
} }
return USARTOK;//数据读取成功
} /*向缓冲区中写入length个数据*/
USARType Usart_fifo_write(Usart_RecerivePoint Rusart,uint8_t * buf,uint8_t length)//
{
if (Rusart->Count + length > RECERIVRSIZE)//写入的数据超过缓冲区
{
return USARTWRITEOVER;//写数据越界
}
while(length--)
{
Rusart->Recerivrbuffer[Rusart->Pwrite] = *buf;//赋值给缓冲区
buf++;//缓冲区地址加一
Rusart->Count ++;
Rusart->Pwrite++;//
if(Rusart->Pwrite == RECERIVRSIZE)
{
Rusart->Pwrite =;
} }
return USARTOK;//数据读取成功 } /*清空缓冲区*/
void Usart_fifo_Clear(Usart_RecerivePoint Rusart)
{
Rusart->Count = ;
Rusart->Pread =;//读指针为0
Rusart->Pwrite = ;//写指针为0
}
#ifndef _USARTBUF_H
#define _USARTBUF_H
/*该参数设置接受区大小*/
#define RECERIVRSIZE 64//接受区大小
typedef struct {
int Pread;//读指针
int Pwrite;//写指针
int Count;//缓冲区计数
uint8_t Recerivrbuffer[RECERIVRSIZE];//接受缓冲区
}Usart_ReceriveType,*Usart_RecerivePoint; #define USARType int
#define USARTREADOVER -2//串口数据超出
#define USARTWRITEOVER -3//串口写数据越界
#define USARTOK 1 USARType Usart_fifo_write(Usart_RecerivePoint Rusart,uint8_t * buf,uint8_t length);USARType Usart_fifo_Read( Usart_RecerivePoint Rusart,uint8_t * buf,uint8_t length);
void Usart_fifo_Clear(Usart_RecerivePoint Rusart); #endif/*_USARTBUF_H*/
使用方式:定义一个Usart_ReceriveType类型的缓冲队列,然后就可以利用上述文件中提供的三个函数来实现串口的FIFO的数据接受和读取
使用的时候可以利用
USARType Usart_fifo_write(Usart_RecerivePoint Rusart,uint8_t * buf,uint8_t length);
USARType Usart_fifo_Read( Usart_RecerivePoint Rusart,uint8_t * buf,uint8_t length);
这两个函数来向缓冲区中写入和读取数据,其中参数的含义如下
第一个参数(Rusart)是串口缓冲区指针类型,用来标示串口,
第二个参数(buf)是一个指uint8_t类型的指针,用来指向要写入或者读取数据的首地址,
第三个参数(length)表示要写入或者读取的数据长度
出口参数USARType 实际是一个整形数据,返回值得意义入下
#define USARTREADOVER –2//串口数据超出
#define USARTWRITEOVER -3//串口写数据越界
#define USARTOK 1// 串口缓冲区数据读出或者写入成功
void Usart_fifo_Clear(Usart_RecerivePoint Rusart);
这个函数用来清空缓冲区数据,实现起来比较简单
串口实现FIFO接受数据的更多相关文章
- 串口实现FIFO接受数据(V2)
在上一次的基础上添加了不同需求缓冲区大小可变的更改. /* * 串口的FIFO简单读取实现 * 功能,实现串口的FIFO实现 * 使用方法: * 更新时间:2017.9.26 * 版本:v2.0.0 ...
- 串口通信:接受数据(仿真task写法)
1.功能描述 设计一个串口数据接收模块.能够以设定的波特率(与发射端口速率匹配)接收数据,并输出保存到一个寄存器中. 2.过程描述 ①边沿检测器,识别出起始位时让接收使能端有效.这里需要排除边沿脉冲的 ...
- RS232串口用事件接受数据(一问一答)
private void button1_Click(object sender, EventArgs e) { serialPort1.Open(); serialPort1.DataReceive ...
- C#上位机制作之串口接受数据(利用接受事件)
前面设计好了界面,现在就开始写代码了,首先定义一个串口对象.. SerialPort serialport = new SerialPort();//定义串口对象 添加串口扫描函数,扫描出来所有可用串 ...
- linux串口驱动分析——发送数据
一.应用程序中write函数到底层驱动历程 和前文提到的一样,首先先注册串口,使用uart_register_driver函数,依次分别为tty_register_driver,cdev_init函数 ...
- dsp28377控制DM9000收发数据——第三版程序,通过外部引脚触发来实现中断接受数据,优化掉帧现象
//-------------------------------------------------------------------------------------------- - //D ...
- STM32串口接收不定长数据原理与源程序(转)
今天说一下STM32单片机的接收不定长度字节数据的方法.由于STM32单片机带IDLE中断,所以利用这个中断,可以接收不定长字节的数据,由于STM32属于ARM单片机,所以这篇文章的方法也适合其他的A ...
- STM32F407的串口采用DMA收发数据
源:STM32F407的串口采用DMA收发数据
- 纠错:基于FPGA串口发送彩色图片数据至VGA显示
今天这篇文章是要修改之前的一个错误,前面我写过一篇基于FPGA的串口发送图片数据至VGA显示的文章,最后是显示成功了,但是显示的效果图,看起来确实灰度图,当时我默认我使用的MATLAB代码将图片数据转 ...
随机推荐
- 【纯css】响应式图片列表
示例演示 <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF- ...
- ios htttp网络请求cookie的读取与写入(NSHTTPCookieStorage)
当你访问一个网站时,NSURLRequest都会帮你主动记录下来你访问的站点设置的Cookie,如果 Cookie 存在的话,会把这些信息放在 NSHTTPCookieStorage 容器中共享,当你 ...
- MysqlNDB集群配置
为了避免不必要的资源分配,默认情况下是不启动ndbcluster引擎.
- Maven之安装与简单入门一
Maven 是一个项目管理和构建自动化工具,我们最关心的是它的项目构建功能.Maven 使用惯例优于配置的原则. 1,下载安装包,并根据文档说明安装: http://maven.apache.org/ ...
- ElasticSearch性能优化官方建议
ES 手册 如何提高ES的性能 不要返回较大的结果集 ES是设计成一个搜索引擎的,只擅长返回匹配查询较少文档,如果需要返回非常多的文档需要使用Scroll. 避免稀疏 因为ES是基于Lucene来索引 ...
- Windows平台下和跨平台的相关公共库
以下主要包含windows下公共库以及跨平台公共库: 1. google base库:google下chromium项目的跨平台公共库: 2. vc_common_src:即HP_SOCKET项目中的 ...
- [译]:Xamarin.Android平台功能——位置服务
返回索引目录 原文链接:Location Services. 译文链接:Xamarin.Android平台功能--位置服务 本部分介绍位置服务以及与如何使用位置提供商服务 Location Servi ...
- Tomcat 9.0安装配置(转)
http://www.cnblogs.com/saratearing/p/5811866.html
- 限制input只能输入金额(类似:100.00|100.9|100)
$(".inputmoney").keyup(function () { var reg = $(this).val().match(/\d+\.?\d{0,2}/); ...
- 大家都在用PDA条码扫描枪管理企业仓库 PDA无线数据采集程序
PDA数据采集器又称之为手持终端,这些都是用于扫描货物条码统计数据用的,PDA扫描枪有效提高企业仓库管理,在仓库管理中引入条码技术,对仓库的到货检验.入库.出库.调拨.移库移位.库存盘点等各个作业环节 ...