C语言如何实现多级队列缓存(Queue、FIFO)

作者 将狼才鲸
日期 2022-03-20

1、各种缓存结构:

基础:指针、链表、内存、数组。
数据结构基础:表、树、图(多对多)。
缓冲区/buffer/顺序表/平直缓存/数组/内存指针(malloc)。
栈/stack:因为是先进后出,也用于函数调用时的压栈,编译器和高级算法中用的多,日常编程基本上不用。
堆/heap/完全二叉树:方便排序,编译器和算法中常用,日常编程基本上不用。
环形缓冲区/环形缓存区/循环队列/loop_buffer/ring_buffer/队列/FIFO/Queue:先进先出,满和空。

参考网址: 什么是队列(队列存储结构)
参考网址: 链式队列及基本操作(C语言实现)
参考网址: 数据结构与算法教程,数据结构C语言版教程!

分组队列/多级队列/group_buffer/fifo/queue:每个模块都有自己的队列,且不同队列间可直接通过数据指针无消耗转移大块数据。

2、自行实现的 “多级缓存队列”模块 Gitee仓库源码:

点击此处查看源码
本地路径:嵌入式知识图谱WiKi\source\lib\group_buf_queue\

有gcc-makefile和Qt两个工程都能编过,带详细注释和单元测试用例。

目录结构:

jim@DESKTOP-SVP3BEM MINGW64 /d/3_doc/嵌入式知识图谱WiKi/source/lib/group_buf_queue (develop)
$ tree
.
|-- Makefile
|-- arch_buffer_config.c
|-- arch_buffer_config.h
|-- group_buf_queue.c
|-- group_buf_queue.h
|-- group_buf_queue_init.c
|-- group_buf_queue_init.h
|-- group_buf_queue_unitest.c
|-- group_buf_queue_unitest_qt_proj
|   `-- group_buf_queue_unitest_qt_proj.pro
|-- list.h
|-- module_buf_queue.c
|-- pair_list.c
|-- pair_list.h
`-- readme.txt1 directory, 15 files

单元测试结果:

jim@DESKTOP-SVP3BEM MINGW64 /d/3_doc/嵌入式知识图谱WiKi/source/lib/group_buf_queue (develop)
$ ./group_buf_queue_demo.exebuffer_unitest start
got buf: [group_flag: 1] [addr: 0x0040d760] [buf_maxsize: 512] [len: 0]
push data: :) my first buffer message ^_^
got buf data: [group_flag: 1] [msg: :) my first buffer message ^_^] [len: 31]
________ buffer_unitest test pass. ________pair_list_unitest start
put data: :) my first buffer message ^_^
got data: :) my first buffer message ^_^
________ pair_list_unitest test pass. ________circular_linked_list_unitest start
put a node
node count: 1
put a tail node
node count: 2
delete a node
node count: 1
________ circular_linked_list_unitest test pass. ________group_buf_queue_unitest.c test pass.

3、实现原理:

……待编写……

4、编译说明

  • 用Visual Studio创建底层C程序工程编译会报错,放弃。

  • 用Qt + MSVC创建底层C程序工程编译会报错,放弃。

  • 可以用gcc 直接make编译,我用的是Windows下安装的gcc和make工具(安装这些工具的同时也会自动安装MinGW工具),生成的是exe。

  • 也可以用Qt + MinGW 64-bit(安装Qt时勾选MinGW选项即可,Qt6版本及以上的MinGW只有64位可用了)。

  • Qt创建工程时不能使用Paint C++,只能使用Paint C,因为编译时会报一些C++专有的关键字错误,和类型强制转换不支持等错误。

  • group_buf_queue_unitest_qt_proj/group_buf_queue_unitest_qt_proj.pro是Qt的工程入口,双击即可打开。

  • 点击编译,在Qt下方的一个“应用程序输出”内嵌窗口中可以看到程序输出。

  • Qt源码界面上可能出现一些C++相关的报错,但是程序编译时并没有error(实际上也是调用gcc编的,没用C++的东西),只有一些warnning(用gcc直接make时没有这些warnning),能编译通过,程序正常输出结果。

09 嵌入式C语言如何实现多级队列缓存(Queue、FIFO)相关推荐

  1. 嵌入式C语言数据结构精讲-曹国辉-专题视频课程

    嵌入式C语言数据结构精讲-236人已学习 课程介绍         系统学习嵌入式开发中常用的数据结构知识,包括顺序表,链表,栈和队列. 包括理论讲解和代码实现,配套课件和源码资料齐全,代码全部采用C ...

  2. 面试篇1:嵌入式C语言面试常见问题

    嵌入式C语言面试常见问题 入门C语言20问20答: 01源程序的编译及链接是怎样一个过程? 02编写第一个简单的C语言程序 03C语言是强类型的语言,这是什么意思? 任何程序都要处理数据,计算机可以处 ...

  3. c语言stdoux串口流,嵌入式C语言代码优化的一些经验

    C语言在嵌入式领域凭借着高效与简单的特点成为了一门与底层非常亲近的语言,当时由于嵌入式领域相比计算机领域硬件资源上是非常受限的,比如主频比较低.内存小等等. 这样就对嵌入式软件就有了新的要求,务必要写 ...

  4. 嵌入式 C 语言中三块难啃的硬骨头

    我是小麦,一名热爱学习的嵌入式工程师 关注我,一起变得更加优秀! C语言在嵌入式学习中是必备的知识,审核大部分操作都要围绕C语言进行,而其中有三块"难啃的硬骨头"几乎是公认级别的. ...

  5. 啃下这三块最难啃的硬骨头,你将在嵌入式C语言中大放异彩

    啃下这三块最难啃的硬骨头,你将在嵌入式C语言中大放异彩 C语言在嵌入式学习中是必备的知识,审核大部分操作都要围绕C语言进行,而其中有三块"难啃的硬骨头"几乎是公认级别的. ///插 ...

  6. 【笔记】嵌入式C语言随堂笔记

    喏,你们要的嵌入式C语言随堂笔记,丰富度应该要比老师自己记录的高一些.但是机酱的废话一样很多哦! 这个笔记是自己一个字一个字手打的,话说打个原创图个慰藉没问题的吧=.= 而且那时候很菜,知道就好不许说 ...

  7. 【嵌入式C语言】4.指针

    0.前言 本章开始主要讲解C语言内存空间的使用. 这里的内存泛指RAM资源.内存条资源.显卡资源.IIC资源等等. 本文主要整理指针的使用方法. 内存属性: 1.内存操作的大小 2.内存的变化性,可写 ...

  8. 嵌入式C语言——学习笔记

    嵌入式C语言--学习笔记 计算机程序语言的学习思路? GCC的使用及其常用选项介绍 gcc概述 C语言编译过程 C语言常见的错误 预处理的使用 宏展开下的 #.## C语言常用关键字及运算符操作 关键 ...

  9. 知名外企嵌入式C语言笔试试题

    知名外企嵌入式C语言笔试试题 嵌入式C语言笔试试题 知名外企嵌入式C语言笔试试题 一. 选择题 二. 填空题 三.写出程序的运行结果 一. 选择题 01.C语言合法的常量是() A-45 B.078 ...

最新文章

  1. shell学习笔记 (2)
  2. 服务器主板开机无显维修,电脑主板开机无显示的维修方法-1
  3. 【建议收藏】这个工具专门用于寻找路由器中的安全漏洞
  4. python中sorted_Python中sorted()方法的用法
  5. P7115-[NOIP2020]移球游戏【构造】
  6. java中国象棋网络对弈,java课程设计---中国象棋对弈系统
  7. 集合框架(用LinkedList实现栈结构的集合代码)
  8. Dropout抑制过拟合
  9. 中国最惨创业者的惨痛教训!
  10. python做社会网络分析_利用GooSeeker分词、Ucient和NetDraw进行社会网络分析
  11. 黑客X档案 2002~2007 NPM、PYPI、DockerHub 备份
  12. 《东周列国志》第二十二回 公子友两定鲁君 齐皇子独对委蛇
  13. python爬取京东手机数据_Python数据爬虫学习笔记(21)爬取京东商品JSON信息并解析...
  14. DOS命令导出文件夹内所有文件的名称和全路径
  15. CTF密码学--新手题--Normal_RSA--解题过程及总结
  16. RT-thread-2022夏令营-学习总结-第二天
  17. [OPNET]license expired的处理
  18. [激光原理与应用-16]:《激光原理与技术》-2- 光的本质(粒子、波动说、电磁波、量子)
  19. Air202掉坑日记(3)——刷DTU固件(DTU版本)
  20. 2022深圳杯A题论文

热门文章

  1. [生存志] 第114节 韩信围垓下
  2. 将十进制数转换成二进制数(C语言)
  3. Windows10 下同一局域网两台电脑互传文件及其取消
  4. 景深决定照相机什么特性_行政执法考试题库2017 2017摄影专业考试题库
  5. Rust中的channel
  6. SQL高级查询案例讲解与分析
  7. 上传照片显示服务器繁忙怎么回事,解决WordPress上传图片“图像后期处理失败,可能是服务器忙或没有足够的资源”问题...
  8. 【java框架】Maven是干什么的?
  9. OA系统请假,出差等流程审批解析
  10. 使用CStdioFile::ReadString来逐行读取文件