STM32进阶之串口环形缓冲区实现】的更多相关文章

转载自微信公众号“玩转单片机”,感谢原作者“杰杰”. 队列的概念 在此之前,我们来回顾一下队列的基本概念:队列 (Queue):是一种先进先出(First In First Out ,简称 FIFO)的线性表,只允许在一端插入(入队),在另一端进行删除(出队). 队列的特点 类似售票排队窗口,先到的人看到能先买到票,然后先走,后来的人只能后买到票 队列的常见两种形式 在计算机中,每个信息都是存储在存储单元中的,比喻一下吧,上图的一些小正方形格子就是一个个存储单元,你可以理解为常见的数组,存放我们…
队列的概念 在此之前,我们来回顾一下队列的基本概念: 队列 (Queue):是一种先进先出(First In First Out ,简称 FIFO)的线性表,只允许在一端插入(入队),在另一端进行删除(出队). 队列的特点 类似售票排队窗口,先到的人看到能先买到票,然后先走,后来的人只能后买到票 队列的常见两种形式 普通队列 在计算机中,每个信息都是存储在存储单元中的,比喻一下吧,上图的一些小正方形格子就是一个个存储单元,你可以理解为常见的数组,存放我们一个个的信息. 当有大量数据的时候,我们不…
我是卓波,我是一名嵌入式工程师,我万万没想到我会在这里跟大家吹牛皮. 嵌入式框架Zorb Framework搭建过程 嵌入式框架Zorb Framework搭建一:嵌入式环境搭建.调试输出和建立时间系统 嵌入式框架Zorb Framework搭建二:环形缓冲区的实现 嵌入式框架Zorb Framework搭建三:列表的实现 嵌入式框架Zorb Framework搭建四:状态机的实现 嵌入式框架Zorb Framework搭建五:事件的实现 嵌入式框架Zorb Framework搭建六:定时器的实…
公司项目中经常设计到串口通信,TCP通信,而且大多都是实时的大数据的传输,然后大家都知道协议通讯肯定涉及到什么,封包.拆包.粘包.校验--什么鬼的概念一大堆,说简单点儿就是要一个高效率可复用的缓存区.按照码农的惯性思维就是去百度.谷歌搜索看有没有现成的东西可以直接拿来用,然而我并没有找到,好吧不是很难的东西自己实现一个呗.开扯-- 为什么要用环形队列? 环形队列是在实际编程极为有用的数据结构,它有如下特点: 它是一个首尾相连的FIFO的数据结构,采用数组的线性空间,数据组织简单.能很快知道队列是…
还是没有接触到怎么控制硬件,但是在书里看到了一个挺巧妙的环形缓冲区实现. 此环形缓冲区实际为一个大小为bufsize的一维数组,有一个rp的读指针,一个wp的写指针. 在数据满时写进程会等待读进程读取数据,数据为空时读进程会等待写进程写入数据. 在上次代码上改的,所以名字还是ioctldemo ioctldemo.c #include <linux/module.h> #include <linux/init.h> #include <linux/stat.h> #in…
源:STM32 USB虚拟串口 串口调试在项目中被使用越来越多,串口资源的紧缺也变的尤为突出.很多本本人群,更是深有体会,不准备一个USB转串口工具就没办法进行开发.本章节来简单概述STM32低端芯片上的USB虚拟串口的移植.在官方DEMO中已经提供了现成的程序,这里对修改方法做简单说明. 官方demo及驱动程序,我存放在百度盘: http://pan.baidu.com/s/1hq3moE4 首先打开官方demo我们开始进行移植,第一步复制我们可用的文件,操作如下: Projects\Virt…
在上章34.Linux-printk分析.使用printk调试驱动里讲述了: printk()会将打印信息存在内核的环形缓冲区log_buf[]里, 可以通过dmesg命令来查看log_buf[] 1.环形缓冲区log_buf[]又是存在内核的哪个文件呢? 位于/proc/kmsg里,所以除了dmesg命令查看,也可以使用cat /proc/kmsg来查看 2.但是,dmesg命令和cat /proc/kmsg有所不同 2.1 dmesg命令 每次使用,都会打印出环形缓冲区的所有信息 2.2 c…
在事件处理层(evdev.c)中结构体evdev_client定义了一个环形缓冲区(circular buffer),其原理是用数组的方式实现了一个先进先出的循环队列(circular queue),用以缓存内核驱动上报给用户层的input_event事件. struct evdev_client { unsigned int head; // 头指针 unsigned int tail; // 尾指针 unsigned int packet_head; // 包指针 spinlock_t bu…
转自:https://blog.csdn.net/vertor11/article/details/53741681 struct kfifo{ uint8_t *buffer; uint32_t in; // 输入指针 uint32_t out; // 输出指针 uint32_t size; // 缓冲区大小,必须为2的次幂 } /*判断n是否为2的幂*/ static bool is_power_of_2(unsigned int n) { && ((n & (n - )) =…
转自:https://blog.csdn.net/yusiguyuan/article/details/18368095 1. 应用场景 网络编程中有这样一种场景:需要应用程序代码一边从TCP/IP协议栈接收数据(reading data from socket),一边解析接收的数据.具体场景例如:用户点击Youtube或优酷网站上的视频内容,这时用户PC上的播放软件就是一边接收数据一边对数据进行解码并播放的.这样的场景的存在如下约束: 1. 必须边接收数据,边对数据进行解析,不能等待到数据全部…
转自:http://blog.chinaunix.net/uid-28458801-id-4262445.html 操作系统:ubuntu10.04 前言:     在嵌入式开发中,只要是带操作系统的,在其上开发产品应用,基本都需要用到多线程.     为了提高效率,尽可能的提高并发率.因此,线程之间的通信就是问题的核心.     根据当前产品需要,使用 环形缓冲区 解决. 一,环形缓冲区的实现     1,cbuf.h 点击(此处)折叠或打开 #ifndef __CBUF_H__ #defin…
在嵌入式开发中离不开设备通信,而在通信中稳定性最高的莫过于环形缓冲区算法, 当读取速度大于写入速度时,在环形缓冲区的支持下不会丢掉任何一个字节(硬件问题除外). 在通信程序中,经常使用环形缓冲区作为数据结构来存放通信中发送和接收的数据.环形缓冲区是一个先进先出的循环缓冲区,可以向通信程序提供对缓冲区的互斥访问. 1.环形缓冲区的实现原理 环形缓冲区通常有一个读指针和一个写指针.读指针指向环形缓冲区中可读的数据,写指针指向环形缓冲区中可写的缓冲区.通过移动读指针和写指针就可以实现缓冲区的数据读取和…
环形缓冲区的用途及原理可以去百度资料狠多的,这里就不介绍了.直接贴代码.代码分别用D7,XE2编译测试 源码下载 http://files.cnblogs.com/lwm8246/uCircleBuffer.rar //环形缓冲区实现类 //-- : //QQ unit uCircleBuffer; interface uses Windows,Classes; type TCircleBuffer=class private FMS:TMemoryStream; FUserData:Point…
转载:http://blog.csdn.net/HADOOP_83425744/article/details/49560583 http://bigdatadecode.club/MapReduce%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90--%E7%8E%AF%E5%BD%A2%E7%BC%93%E5%86%B2%E5%8C%BA.html 一.什么是Hadoop 环形缓冲区: Shuffle过程是MapReduce的核心,也被称为奇迹发生的地方.要想理解Map…
#cat aa.c /*ringbuf .c*/ #include<stdio.h> #include<ctype.h> #define NMAX 8 int iput = 0; /* 环形缓冲区的当前放入位置 */ int iget = 0; /* 缓冲区的当前取出位置 */ int n = 0; /* 环形缓冲区中的元素总数量 */ double buffer[NMAX]; /* 环形缓冲区的地址编号计算函数,如果到达唤醒缓冲区的尾部,将绕回到头部. 环形缓冲区的有效地址编号为…
dmesg命令被用于检查和控制内核的环形缓冲区.kernel会将开机信息存储在ring buffer中.您若是开机时来不及查看信息,可利用dmesg来查看.开机信息保存在/var/log/dmesg文件里. 语法 dmesg(选项) 选项 -c:显示信息后,清除ring buffer中的内容: -s<缓冲区大小>:预设置为8196,刚好等于ring buffer的大小: -n:设置记录信息的层级.…
物联网安全himqtt防火墙数据结构之ringbuffer环形缓冲区 随着5G的普及,物联网安全显得特别重要,himqtt是首款完整源码的高性能MQTT物联网防火墙 - MQTT Application FireWall,C语言编写,采用epoll模式支持IoT数十万的高并发连接,并且兼容ModSecurity部分规则. 代码非常优秀,非常值得收藏和学习,今天笔者就从结合himqtt的源码来进行ringbuffer数据结构分析,主要特点是速度快. 一. ringBuffer 介绍 ringBuf…
mapreduce过程解析 数据在map中怎么写入磁盘? 数据:经过map逻辑处理过后的数据(key,value)- 磁盘:本地磁盘 环形缓冲区 1.为什么要环形缓冲区? 答:使用环形缓冲区,便于写入缓冲区和写出缓冲区同时进行. 2.为什么不等缓冲区满了再spill? 答:会出现阻塞. 3.数据的分区和排序是在哪完成的? 答:分区是根据元数据meta中的分区号partition来分区的,排序是在spill的时候排序. 环形缓冲区详解 不同方向写入数据 图示:…
使用 VSCode 给STM32配置一个串口 printf 工程 gcc 重定向 printf 和 keil 不一样. 文件准备 先从以前的工程中拷过一份串口的代码来,然后在 main 函数中初始化串口并 print 一个数据吧. 新添加的文件需要添加到 Markfile 文件中,否则编译肯定会报错的.同时为了 vscode 不报错也把 include 路径在 c_cpp_properties.json 中放一份. .h 文件路径 -> Makefile + c_cpp_properties.j…
一 工程习惯 ①必须模块化编程-一个功能一个CH分开,一个对象一个结构体; ②习惯使用bsp.c/bsp.h,BSP板级支持包源文件; ③多使用#define 来定义IO口与硬件相关特性,方便修改; 二 实际应用 模块化编程起始比较看实际使用场合, 这个和板级支持包有相同特性,使用时可以结合使用,硬件级底层配置全都在bsp文件里面编辑. 初始化的时候其实有一个比较好的实际使用可以供给使用: void bsp_Init(void) { /* 优先级分组设置为4,可配置0-15级抢占式优先级,0级子…
总的函数如下 void USART1Configuration(void){    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO | RCC_APB2Periph_USART1,ENABLE);    USART1_GPIO_Configuration();    USART1_Param_Configuration();    NVIC_Configuration();  /*串口使用中断方式才用到*/   …
原文:https://blog.easwy.com/archives/advanced-vim-skills-netrw-bufexplorer-winmanager-plugin/ 本节所用命令的帮助入口: :help netrw-browse :help bufexplorer :help winmanager [文件浏览] 在开发过程中,经常需要查找某个文件.我们前面在介绍path选项时,介绍过使用find命令查找文件的方法.本节介绍vim的文件浏览插件. 在vim 7.0以前,文件浏览功…
串口调试在项目中被使用越来越多,串口资源的紧缺也变的尤为突出.很多本本人群,更是深有体会,不准备一个USB转串口工具就没办法进行开发.本章节来简单概述STM32低端芯片上的USB虚拟串口的移植.在官方DEMO中已经提供了现成的程序,这里对修改方法做简单说明. 官方demo及驱动程序,我存放在百度盘: http://pan.baidu.com/s/1hq3moE4 首先打开官方demo我们开始进行移植,第一步复制我们可用的文件,操作如下: Projects\Virtual_COM_Port文件夹下…
一.前言 1.简介 写的这篇博客,是为了简单讲解一下UART通信协议,以及UART能够实现的一些功能,还有有关使用STM32CubeMX来配置芯片的一些操作,在后面我会以我使用的STM32F429开发板来举例讲解(其他STM32系列芯片大多数都可以按照这些步骤来操作的),如有不足请多多指教. 2.UART简介 嵌入式开发中,UART串口通信协议是我们常用的通信协议(UART.I2C.SPI等)之一,全称叫做通用异步收发传输器(Universal Asynchronous Receiver/Tra…
STM32串口通信(F1系列包含3个USART和2个UART) 一.单片机与PC机串行通信研究目的和意义: 单片机自诞生以来以其性能稳定,价格低廉.功能强大.在智能仪器.工业装备以及日用电子消费产品中得到了广泛的应用.在单片机的输入输出控制中,除直接接上小键盘和LCD显示屏等方法外,一般都通过串口和上位机PC进行通信.这样不仅能够实现远程控制,而且能够利用PC机强大的数据处理功能以及友好的控制界面.在一般的利用PC机对单片机进行控制的场合,都是采用操作系统作为上位机的平台,其优点是界面友好,编程…
一.设计用途: 公司PCB制成板降成本,选择的MCU比项目需求少一个串口,为满足制成板成本和项目对串口需求,选择模拟一路串口. 二.硬件电路: 三.设计实现: 工具&软件:STM32F030R8    KEIL5    STM32CubeMX 1. 串口通信 串口是一种很常用的通信接口,按位(bit)发送和接收字节,串口通信是异步传输,端口能够在一根线上发送数据同时在另一根线上接收数据.串口通信最重要的参数是比特率.数据位.停止位和奇偶校验.对于两个进行通信的端口,这些参数必须匹配,在我们单片机…
在基础实验成功的基础上,对串口的调试方法进行实践.硬件代码顺利完成之后,对日后调试需要用到的printf重定义进行调试,固定在自己的库函数中. b) 初始化函数定义: void USART_Configuration(void); //定义串口初始化函数 c) 初始化函数调用: void UART_Configuration(void); //串口初始化函数调用 初始化代码: void USART_Configuration(void) //串口初始化函数 { //串口参数初始化 USART_I…
参考文章:http://blog.csdn.net/linyt/article/details/53355355 本文参考linux系统中 kfifo缓冲区实现.由于没有涉及到锁,在多线程环境下,只适用于 单生产者 + 单消费者 模型. fifo_buffer.h #ifndef FIFO_BUFFER_H_ #define FIFO_BUFFER_H_ #include <stdint.h> class FifoBuffer { public: enum { enmDefaultBuffer…
解决方法一: .串口初始化配置时,需要打开ORE 溢出中断,否则串口中断没有及时读取数据会触发溢出中断(打开接收中断默认开启溢出中断,但是为了读取溢出标志位还需要明确执行以下打开溢出中断),如果没有清溢出中断就会一直进串口中断. USART_ITConfig(USART2, USART_IT_ORE, ENABLE);//USART_IT_ORE参数在这个函数中是不合法,参数检测过不去,关闭参数检测这样写确实有效 串口接收中断函数要增加如下代码: if (USART_GetITStatus(US…
转自:https://blog.csdn.net/eydwyz/article/details/56671023 循环缓冲区在一些竞争问题上提供了一种免锁的机制,免锁的前提是,生产者和消费 都只有一个的情况下,否则也要加锁.下面就内核中提取出来,而经过修改后的fifo进 行简要的分析.  先看其只要数据结构: struct my_fifo { unsignedchar *buffer;/* the buffer holding the data*/ unsignedint size;/* the…