当前位置: 首页 > news >正文

做网站不能有中文字符自媒体平台排名前十

做网站不能有中文字符,自媒体平台排名前十,云电脑平台,政府网站建设51单片机串口通信 环形缓冲区队列最近在做毕业设计刚好涉及到51单片机,简单的研究一下发现51单片机串口只有一个字节的缓存,如果遇到单片机串口中断没有及时处理SBUF的值或者串口中断长时间未退出很容易照成数据丢失,于是就自己写了个缓冲区&…

51单片机串口通信 环形缓冲区队列
最近在做毕业设计刚好涉及到51单片机,简单的研究一下发现51单片机串口只有一个字节的缓存,如果遇到单片机串口中断没有及时处理SBUF的值或者串口中断长时间未退出很容易照成数据丢失,于是就自己写了个缓冲区,代价就是消耗一部分内存空间,时间-空间本来就是一对矛盾体,想减少串口通信中数据丢失问题只能牺牲部分空间,来减少数据通信过程中的丢失问题。

核心代码如下所示:

/**
用途: 小内存环形缓冲区(FIFO模式)
作者: 南栀<kellygod95@gmail.com>
*/
#define BUFFER_MAX 16 //缓冲区大小

typedef struct _circle_buffer{
unsigned char head_pos; //缓冲区头部位置
unsigned char tail_pos; //缓冲区尾部位置
unsigned char circle_buffer[BUFFER_MAX]; //缓冲区数组
}circle_buffer;

circle_buffer buffer;

void bufferPop(unsigned char* _buf)
{
if(buffer.head_pos==buffer.tail_pos) //如果头尾接触表示缓冲区为空
*_buf=0xFF;
else
{
*_buf=buffer.circle_buffer[buffer.head_pos]; //如果缓冲区非空则取头节点值并偏移头节点
if(++buffer.head_pos>=BUFFER_MAX)
buffer.head_pos=0;
}
}

void bufferPush(const unsigned char _buf)
{
buffer.circle_buffer[buffer.tail_pos]=_buf; //从尾部追加
if(++buffer.tail_pos>=BUFFER_MAX) //尾节点偏移
buffer.tail_pos=0; //大于数组最大长度 制零 形成环形队列
if(buffer.tail_pos==buffer.head_pos) //如果尾部节点追到头部节点 则修改头节点偏移位置丢弃早期数据
if(++buffer.head_pos>=BUFFER_MAX)
buffer.head_pos=0;

}
考虑到看到此博文的人可能有很多小白并不知道如何使用,在此简单的说一下,假设你已经能进行简单的串口发送接收了,然后串口中断部分可以这样写

void serial1(void) interrupt 4
{
if(RI)
{
bufferPush(SBUF);
RI=0;
}
if(TI)
{
TI=0;
}
}
在主程序中我们只需要调用函数就行了如

void main()

{

unsigned char dat ;

//读取缓冲区一个字符,如果dat=0xff表示缓冲区为空,所以接收的字符不能有0xff。

bufferPop(&dat);

}

bufferPop函数中没调用一次,便从缓冲区取出一个字符,头部指针就会进行偏移,具体看源码并不是很复杂 只是一个数组类型的环形FIFO缓冲区。

有一点要注意的是,如果缓冲区满的话,后面的数据会覆盖最前面的数据。

你可以把缓冲区设置大些,就可以尽可能的减少数据覆盖问题,但是带来的额外问题就是51或者其他系列的单片机RAM是非常小的,并不像PC中缓冲区动不动就1024KB。所以缓冲区设置多大,根据自己需求调整就行了。

转载自——https://blog.csdn.net/KellyGod/article/details/54236619

 

转载于:https://www.cnblogs.com/smallqing/p/10159966.html

http://www.lbrq.cn/news/2414413.html

相关文章:

  • 三五互联做的网站怎么样网络营销八大工具
  • 互动网络游戏公司网站建设廊坊关键词优化报价
  • wordpress 页面编辑失败aso优化公司
  • 把自己做的网页发布到网站百度怎么发布自己的信息
  • 点播视频网站怎么建设网络营销成功案例ppt免费
  • 企业中标信息查询网涟源网站seo
  • 网站说服力营销型网站策划 pdf网推平台
  • 旅游做攻略用什么网站好情感营销的十大案例
  • 网站域名管理中心企业互联网推广
  • 武汉市东西湖区建设局官方网站seo入门书籍
  • 电商网站开发日志网站推广渠道
  • 1997年做网站是什么语言厦门网站优化公司
  • dw自己做网站百度推广代理公司
  • 金华建设二建哪个网站报名百度引流免费推广怎么做
  • 网站建设xywlcn营销型网站建设步骤
  • 自适应网站建设需要注意什么企业网站推广方案策划
  • 网站网页怎么做长沙优化科技
  • 替别人做设计的网站多少钱网站权重怎么看
  • wordpress 移动到回收站发生错误怎样创建一个网站
  • html5做网站导航页潍坊seo建站
  • 青岛教育平台网站建设google怎么推广
  • 做视频上传可以赚钱的网站深圳优化公司哪家好
  • 开发电商网站多少钱开网店
  • 做兼职比较好的网站在线看seo网站
  • 生鲜b2c网站建设规划书长春seo主管
  • 浏阳市政府门户网站品牌推广方案案例
  • 个人网站可以做百度推广吗做网站价格
  • 模型评测网站怎么做googleplay官网
  • 室内设计公司官网seo优化seo外包
  • 腾讯官网登录入口企业网站设计优化公司
  • 内网后渗透攻击过程(实验环境)--3、横向攻击
  • 枪战验证系统:通过战斗证明你是人类
  • Linux某个进程CPU占用率高原因定位手段
  • Python关于numpy的基础知识
  • 打靶日记之xss-labs
  • 深度学习Depth Anything V2神经网络实现单目深度估计系统源码