八年头部互联网大厂嵌入式研发经验,现就职于某头部新能源车企
私信
关注
主帖 20
回帖 2
专栏 1
1、什么是ZMQZeroMQ(也称为ÖMQ、0MQ或zmq)看起来像是一个可嵌入的网络库,但它的作用类似于一个并发框架。它为您提供了在进程内、进程间、TCP和多播等各种传输中传递原子消息的套接字。您可以使用扇出、发布订阅、任务分发和请求回复等模式将套接字N到N连接起来。它的速度足以成为集群产品的结构。它的异步IO模型为您提供了可扩展的多核应用程序,构建为异步消息处理任务。它有许多语言API,并在大多数操作系统上运行。ZeroM...
2023-02-20 00:27:45 2013浏览 0点赞 0回复 0收藏
一、引言我们讲了那么多关于中间件的示例,好像有些违背“ZMQ是无中间件”的说法。但要知道在现实生活中,中间件一直是让人又爱又恨的东西。实践中的很多消息架构能都在使用中间件进行分布式架构的搭建,所以说最终的决定还是需要你自己去权衡的。这也是为什么虽然我能驾车10分钟到一个大型商场里购买五箱音量,但我还是会选择走10分钟到楼下的便利店里去买。这种出于经济方面的考虑(时间、精力、成本等)不仅在日常生活中很常...
2023-02-18 22:48:22 1362浏览 0点赞 0回复 0收藏
上文那种实现管家模式的方法比较简单,client还是简单海盗模式中的,仅仅是用API重写了一下。我在测试机上运行了程序,处理10万条请求大约需要14秒的时间,这和代码也有一些关系,因为复制消息帧的时间浪费了CPU处理时间。但真正的问题在于,我们总是逐个循环进行处理(roundtrip),即发送接收发送接收……ZMQ内部禁用了TCP发包优化算法(Nagle'salgorithm),但逐个处理循环还是比较浪费。理论归理论,还是需要由实践来检验。...
2023-02-18 00:57:55 774浏览 0点赞 0回复 0收藏
当你意识到管家模式是一种非常可靠的消息代理时,你可能会想要使用磁盘做一下消息中转,从而进一步提升可靠性。这种方式虽然在很多企业级消息系统中应用,但我还是有些反对的,原因有:1、我们可以看到,懒惰海盗模式的client可以工作得非常好,能够在多种架构中运行。唯一的问题是它会假设worker是无状态的,且提供的服务是幂等的。但这个问题我们可以通过其他方式解决,而不是添加磁盘。2、添加磁盘会带来新的问题,需要额外...
2023-02-17 17:53:17 807浏览 0点赞 0回复 0收藏
一、什么是可靠性?要给可靠性下定义,我们可以先界定它的相反面——故障。如果我们可以处理某些类型的故障,那么我们的模型对于这些故障就是可靠的。下面我们就来列举分布式ZMQ应用程序中可能发生的问题,从可能性高的故障开始:1、应用程序代码是最大的故障来源。程序会崩溃或中止,停止对数据来源的响应,或是响应得慢,耗尽内存等。2、系统代码,如使用ZMQ编写的中间件,也会意外中止。系统代码应该要比应用程序代码更为可...
2023-02-16 13:51:17 3230浏览 0点赞 0回复 0收藏
克隆服务器的可靠性克隆模型1至5相对比较简单,下面我们会探讨一个非常复杂的模型。可以发现,为了构建可靠的消息队列,我们需要花费非常多的精力。所以我们经常会问:有必要这么做吗?如果说你能够接受可靠性不够高的、或者说已经足够好的架构,那恭喜你,你在成本和收益之间找到了平衡。虽然我们会偶尔丢失一些消息,但从经济的角度来说还是合理的。不管怎样,下面我们就来介绍这个复杂的模型。在模型3中,你会关闭和重启服务...
2023-02-15 00:11:25 653浏览 0点赞 0回复 0收藏
使用ZMQ进行多线程编程(MT编程)将会是一种享受。在多线程中使用ZMQ套接字时,你不需要考虑额外的东西,让它们自如地运作就好。使用ZMQ进行多线程编程时,不需要考虑互斥、锁、或其他并发程序中要考虑的因素,你唯一要关心的仅仅是线程之间的消息。什么叫“完美”的多线程编程,指的是代码易写易读,可以跨系统、跨语言地使用同一种技术,能够在任意颗核心的计算机上运行,没有状态,没有速度的瓶颈。如果你有多年的多线程编程...
2023-02-14 07:40:03 1115浏览 0点赞 0回复 0收藏
一、ReuqestReply(请求应答模式)1、使用RequestReply模式,需要遵循一定的规律。2、客户端必要先发送消息,在接收消息;服务端必须先进行接收客户端发送过来的消息,在发送应答给客户端,如此循环3、服务端和客户端谁先启动,效果都是一样的。4、服务端在收到消息之前,会一直阻塞,等待客户端连上来。创建一个客户端和服务端,客户端发送消息给服务端,服务端返回消息给客户端,客户端和服务器谁先启动都可以。server.cppcincl...
2023-02-13 22:52:45 890浏览 0点赞 0回复 0收藏
SPI基础支持此处不再赘述,直接分析linux中的SPI驱动源码。1、SPI设备驱动架构图​2、源码分析本次分析基于kernel5.18,linuxdriversspispidev.c设备树示例:C++&spis1{tripin;slave0{compatible"rohm,dh2228fv";spimaxfrequency;irqpin;ackpin;protocol"hootprotocol";};};设备树里面SPI设备节点的compatible属性等于如下值,就会跟spidev驱动进行匹配:C++staticconststructspideviceidspidevspiids[]{{.name"dh2228fv"},{.n...
2023-02-12 00:49:06 993浏览 0点赞 0回复 0收藏
A2BRESPCYCS寄存器用于设置从控制帧(SCF)开始到最后一个slave响应响应帧(SRF)的相对时间。寄存器设置定义了A2B网络中较早的节点在超帧的上游部分何时应该期望来自最后一个从节点的响应。如果最后一个节点没有响应,则在假定的最后一个节点之前的节点会响应。以下部分提供了关于如何对主节点和从节点A2BRESPCYCS寄存器进行编程的信息。1、配置主节点响应周期主节点响应周期示意图描述了主响应周期值是如何确定的。主节点响应周期...
2023-02-11 15:36:30 1468浏览 1点赞 0回复 0收藏
本文介绍A2B系统中主机对中断的处理流程。1、主运行中断如主运行中断图所示,触发器(主IRQ引脚)是在主节点锁定锁相环到SYNC信号后或发现线路故障后断言的。注意:MSTRRUNNING(A2BINTTYPE0xFF)是一个仅主用中断。主运行中断读取A2BINTSRC和A2BINTTYPE寄存器,继续发现从节点或处理线路故障。注意,对主A2BINTTYPE寄存器的主机读将清除中断。2、发现完成中断如发现已完成中断图所示,触发器(主IRQ引脚)是在主节点看到从节点发现的...
2023-02-11 15:16:39 1416浏览 1点赞 0回复 0收藏
特定于模块的描述符信息保存在存储设备(EEPROM或类似的设备)中,通过I2C直接连接到A2B收发器,并通过A2B总线作为外围设备访问。这种I2C连接的存储设备使用设备地址0x50(7位)。这个配置内存包含模块ID信息和可选的配置块。1、内存配置没有配置块的配置内存的内容显示在没有配置块的内存内容表中。没有配置块的内存内容在发现过程中和发现后,主机可以根据表中的约定唯一地识别从节点模块。该信息允许主机查找所有存储的配置设置...
2023-02-10 00:22:11 4038浏览 1点赞 0回复 0收藏
以下部分提供了关于修改、优化和高级发现流的附加信息。任何软件流程图都可以用作发现和初始化的指南。1、修改的发现流程在修改后的发现流程图中,所有从节点都会被发现并立即按顺序初始化,从0号从节点到系统中最后一个可用的从节点。在发现并编程所有节点之后,就不再需要总线管理了。但是中断服务例程可以用来响应特殊事件(例如,来自诊断的IRQ事件)。IRQ引脚可以用来发出这样一个事件的信号。另外,可以轮询A2BINTTYPE寄存...
2023-02-10 00:21:46 993浏览 1点赞 0回复 0收藏
Control接口主要让用户空间的应用程序(alsalib)可以访问和控制[音频](https:so.csdn.netsosearchq%E9%9F%B3%E9%A2%91&spm1001.2101.3001.7020"音频")codec芯片中的多路开关,滑动控件等。对于Mixer(混音)来说,Control接口显得尤为重要,从ALSA0.9.x版本开始,所有的mixer工作都是通过control接口的[API](https:so.csdn.netsosearchqAPI&spm1001.2101.3001.7020"API")来实现的。ALSA已经为AC97定义了完整的控制接口模型,如...
2023-02-08 11:10:08 531浏览 1点赞 0回复 0收藏
1、Platform概述ASoC被分为Machine,Platform和Codec三大部件,Platform驱动的主要作用是完成音频数据的管理,最终通过CPU的数字音频接口(DA〉把音频数据传送给Codec进行处理,最终由Codec输出驱动耳机或者是喇叭的音频信号。在具体实现上,ASoC又把Platform驱动分为两个部分:platformdriver和sndsocdaidriver。其中,platformdriver负责管理音频数据,把音频数据通过dma或其他操作传送至cpudai中,daidriver则主要完成cpu一侧...
2023-02-08 11:05:13 864浏览 1点赞 0回复 0收藏
汽车音频总线(A2B®)在节点之间连接多通道I2S同步PCM数据,距离可达15米。它还将I2S的同步、时分多路复用(TDM)特性扩展到一个连接多个节点的系统,其中每个节点可以使用数据、提供数据,或两者兼有。收发器支持这些A2B功能,通过多通道I2STDM接口与通用数字信号处理器(dsp)、现场可编程门阵列(fpga)、专用集成电路(asic)、麦克风、模数转换器(adc)、数字模拟转换器(dac)和编解码器直接接口。它们还提供了一个PDM接口,可直接连...
2023-02-08 10:40:08 1644浏览 0点赞 0回复 0收藏
1、基本概念及逻辑关系​如上图,通过上一节声卡的学习我们已经知道PCM是声卡的一个子设备,或者表示一个PCM实例。每个声卡最多可以包含4个pcm的实例,每个pcm实例对应一个pcm设备文件。pcm实例数量的这种限制源于linux设备号所占用的位大小,如果以后使用64位的设备号,我们将可以创建更多的pcm实例。不过大多数情况下,在嵌入式设备中,一个pcm实例已经足够了。一个pcm实例由一个playbackstream和一个capturestream组成,这两...
2023-02-03 00:07:48 892浏览 0点赞 0回复 0收藏
1、structsndcard1.1、sndcard是啥sndcard可以说是整个ALSA音频驱动最顶层的一个结构,整个声卡的软件逻辑结构开始于该结构,几乎所有与声音相关的逻辑设备都是在sndcard的管理之下,声卡驱动的第一个动作通常就是创建一个sndcard结构体。因此我们也从structsndcard的讲解开始。1.2、sndcard定义c++structsndcard{intnumber;numberofsoundcard(indextosndcards)charid[16];idstringofthiscardchardriver[16];drivernamecharshor...
2023-02-02 15:10:02 403浏览 0点赞 0回复 0收藏
1、概述DoIP是DiagnosticcommunicationoverInternetProtocol的简称,顾名思义,就是通过网络协议进行诊断通信。ISO13400的所有部分都基于ISOIEC74981中规定的OSI基本参考模型,该模型将通信系统分为七层。从上到下称为应用层(第7层)、表示层、会话层、传输层、网络层、数据链路层和物理层(第1层)。ISO13400使用了这些层的一个子集。ISO13400为DoIP指定了传输层、网络层、数据链路层和物理层。ISO13400由以下部分组成,其总称为"...
2023-02-01 13:30:37 1415浏览 0点赞 0回复 0收藏
​1、ALSA概述ALSA表示高级Linux声音体系结构(AdvancedLinuxSoundArchitecture)。它由一系列内核驱动,应用程序编译接口(API)以及支持Linux下声音的实用程序组成。ALSA项目发起的原由是Linux下的声卡驱动(OSSFreedrivers)没有获得积极的维护。而且落后于新的声卡技术。JaroslavKysela早先写了一个声卡驱动,并由此开始了ALSA项目,随后,更多的开发者加入到开发队伍中,更多的声卡获得支持,API的结构也获得了重组。Linux内核2....
2023-01-18 10:10:04 3234浏览 0点赞 0回复 0收藏
获得成就
已积累 6424 人气
获得 6 个点赞
获得 0 次收藏