生产者消费者模型最早由荷兰计算机科学家 Edsger W. Dijkstra 在他的经典著作《The Structure of the “THE”- Multiprogramming System》中提出。在这篇论文中,Dijkstra 讨论了操作系统中的并发控制问题,并引入了生产者消费者问题作为一个经典的示例,以展示如何使用信号量机制来协调生产者和消费者之间的数据交换。模型架构如下:

生产者消费者模型

这个模型在生产者和消费者之间增加一个缓存也相当于增加了一个库存,用于降低生产者对消费者实时处理的要求,试想一下生产者每生产一条数据都需要消费者实时处理才能生产下一条数据,这会对消费者的处理能力以及实时性要求极高,消费者由于不能及时的消耗这一条数据就会导致无法再生产数据。从更长的时间周期来看消费者的消费能力都一定是大于等于生产者的生产能力,但消费者的任务繁重实时能力这类数据的能力已不太高,增加这么一个缓存机制后,虽然成本有所增加,但是从整个系统的角度上生产消费的效率可以较大的提供。

生产者消费者之间的缓存,一般有两种数据结构,分别是FIFO(First In First Out,先进先出)、FILO(First In Last Out,先进后出),在实际环境中究竟应该选择哪种数据结构需要结合实际的需求、数据特征等条件进行选择。

2. 重构串口处理程序

串口上数据本质是流数据,“什么时候有数据、有多少数据、数据内容是什么”都是未知的,需要把数据完整的收下来做进一步数据解析才能清楚,考虑数据串口流数据的特征,为了更好保证数据的完整性这里的缓存数据类型应该选择FIFO,架构如下:

FIFO的实现有多种方式,比如队列、环形缓存(环形缓存本质是一个数组,仅仅将数组的收尾链接在了一起),队列更多用在一些固定长度内容的场景有助于提高缓存的利用率,当然队列也可以用在串口这个场景里面仅仅是缓存的利用率可能不太高而已,更多的场景还是推荐使用环形缓存数据结构作为缓存,如下图所示:

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数嵌入式工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!

img

img

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以+V:Vip1104z获取!!! (备注:嵌入式)

img

最后

资料整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~

你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!

帮助的朋友可以帮忙点赞分享支持一下小编~**

你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!

更多资料点击此处获qu!!

Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐