- 博客(78)
- 资源 (5)
- 收藏
- 关注
转载 高性能网络编程之 Reactor 模型
网络框架的设计离不开 I/O 线程模型,线程模型的优劣直接决定了系统的吞吐量、可扩展性、安全性等。目前主流的网络框架,在网络 IO 处理层面几乎都采用了「I/O多路复用方案」,这是服务端应对高并发的性能利器。进一步看,当上升到整个网络模块时,另一个常常听说的模式出现了 ---- 「Reactor模式」,也叫反应器模式,本质是一个事件转发器,是网络模块核心中枢,负责将读写事件分发给对应的读写事件处理者。大名鼎鼎的 Java 并发包作者 DougLea。
2025-03-12 16:41:08
65
转载 libmodbus编程应用(源码讲解+移植STM32)
之前介绍了Modbus协议,见Modbus通讯协议,广泛应用于工业控制领域,协议内部有很多细节;比如报文的预处理、解析等等,所以我们需要移植别人的库,理解核心代码的主要逻辑,修改底层和硬件相关的代码就可以了,这就需要介绍libmodbus开发库。UART开发基础移植USBX实现虚拟串口。由于篇幅过长,还有很多细节不方便展开讲,感兴趣的兄弟可以私信我。至此对于modbus协议和libmodbus库的原理讲解和移植就完成了,可以看到能讲的我就尽量讲了,光是代码注释我就写了很久,
2025-03-04 18:08:51
477
转载 Modbus通讯协议
Modbus 协议是一种已广泛应用于当今工业控制领域的通用通讯协议。通过此协议,控制器相互之间、或控制器经由网络(如以太网)可以和其它设备之间进行通信。Modbus 协议使用的是主从通讯技术,即由主设备主动查询和操作从设备。一般将主控设备方所使用的协议称为 Modbus Master,从设备方使用的协议称为 Modbus Slave。典型的主设备包括工控机和工业控制器等;典型的从设备如 PLC 可编程控制器等。有了它,不同厂商生产的控制设备就可以连接成工业网络,进行集中监控。
2025-03-04 15:55:54
212
转载 Modbus tcp 协议详解
1.1 ModbusModbus是一种广泛应用于工业自动化领域的通信协议, Modbus提供了通用的语言在设备之间建立主从式的通信,Modbus协议简单、开放、易于实现,且支持多种物理层通信介质(RS232、RS485、TCP/IP网络等),因此成为了工业领域通信协议的业界标准之一。我们今天要介绍的是一种基于以太网TCP/IP的应用层协议——Modbus TCP/IP协议。
2024-11-21 10:28:49
526
1
转载 秒懂Modbus通信协议
顾名思义,它是一个Bus,即总线协议。比如串口协议、IIC协议、SPI都是通信协议。你接触到这种协议,相信你所处的行业是工业电子方面或者你的产品用于工业。好了,现在知道了大概知道了,这是一个总线协议,是一个Mod什么的公司发表的一个通信协议。那为什么要用这个呢?答案就是他们都在用,你就得学,啊哈哈!正经的说,它被工业领域所接受的原因是它具备一下三个优点公开发表并且无版权要求易于部署和维护对供应商来说,修改移动本地的比特或字节没有很多限制简单的概括,就是免费+简单+方便修改!
2024-11-21 09:27:32
260
转载 UDP数据包最大长度与收发包
关于UDP面向报文的传输方式决定了UDP的数据发送方式是一份一份的,也就是应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文。那么UDP的报文大小由哪些影响因素呢?UDP数据包的理论长度是多少,合适的UDP数据包应该是多少呢?(1)UDP报文大小的影响因素,主要有以下3个[1] UDP协议本身,UDP协议中有16位的UDP报文长度,那么UDP报文长度不能超过2^16=65536.[2] 以太网(Ethernet)数据帧的长度,数据链路层的MTU(最大传输单元)。
2024-08-19 18:03:50
1833
1
转载 Git工程中.gitkeep文件
gitkeep文件是创建在一个空目录下的标识性文件,其作用是为了使 Git 保留该空目录(在有了 .gitkeep 文件后就不是空目录了)。.gitkeep文件的文件名是社区的一个约定,仅仅只是为了起到一个统一的目的,使开发者在看到该文件时就知道其作用。.gitkeep文件和官方没有任何关系,并不是官方定义的 Git 的系统文件。.gitkeep文件应该是一个目录下的唯一文件,当该目录下有了其他文件时,就应该删除.gitkeep文件。.gitkeep文件和.gitignore文件没有任何关系;
2024-07-24 09:49:32
211
转载 Visual Studio Code统计代码量插件VS Code Counter
顶部菜单栏 【查看】(View) 选择下拉菜单 【命令面板】打开命令输入栏,或者直接快捷键。结果非常翔实,从时间、目录、总数、语言以及各目录的统计都有,各位小伙伴可以按需查看。当选择代码统计之后,底部会出现VSCodeCounter的提示,耐心等待。md文件建议使用md扩展工具查看,也可以直接txt文件查看,结果一致。,如果要统计整个工作区间的代码也可以,选择下面的。另外一种方案就特别简单,直接右击指定目录,选择。的目录,并按照统计时间展现对应的代码统计数据。然后输入指定目录并回车就可以统计代码了。
2024-06-11 10:49:14
3887
原创 C++设计模式:Singleton 模式( 单例模式)
Singleton 模式是设计模式中最为简单、最为常见、最容易实现,也是最应该熟悉和掌握的模式。Singleton 模式就是一个类只创建一个唯一的对象,即一次创建多次使用。懒汉式:解决了饿汉式内存浪费问题,但是线程不安全的,可以通过互斥量mutex.lock()和mutex.unlock()来解决。饿汉式:还没有使用该单例对象,该单例对象就已经被加载到内存了,在对象过多时会造成内存浪费。3、提供静态对外接口,可以让用户获得单例对象。2、增加静态私有的当前类的指针变量。单例分为懒汉式和饿汉式。
2024-05-31 21:50:47
235
转载 HTTP报文中的MIME type
MIME typeMIME type的缩写为(Multipurpose Internet Mail Extensions)代表互联网媒体类型(Internet mediatype),MIME使用一个简单的字符串组成,最初是为了标识邮件Email附件的类型,在html文件中可以使用content-type属性表示,描述了文件类型的互联网标准。是一种用于在异构系统、网络之间传递信息时时声明其格式的方法。MIME类型能包含视频、图像、文本、音频、应用程序等数据。一般的,在文件系统中,我们会使用扩展名来表示。
2024-05-09 14:10:47
407
转载 TortoiseGit提示No supported authentication methods available
采用GortoiseGit方式clone失败之后,一定要先尝试用Git bash命令行试下,如果Git bash命令行可以,那就用上面的方法切换ssh。如果Git bash也失败,那就要考虑更换下生成SSH密钥的加密算法类型再试试,例如采用RSA类型,而不是ED25519。远程仓库的公匙无法和本地的密匙进行匹配认证造成的(主要是。却可以正常使用,不受影响。没有支持认证的方法可用。通过调查,发现应该是。
2024-04-24 15:00:16
1346
1
转载 匿名结构体/联合体(#pragma anon_unions)
之所以要使用这个东西,是因为在gcc编译器中是支持匿名结构体/联合体的使用的,而在ARMCC中不支持,所以如果要在ARMCC中使用匿名的结构体/结合体,就需要使用 #pragma anon_unions 告知编译器,不然会编译不通过。匿名结构:在另一个结构中声明结构变量,而无需为其命名的嵌套结构称为匿名结构。匿名结构体/联合体指的是没有命名的结构,因为没有对应的名字,所以也不会直接创建这个对象或者变量,一般都是在嵌套结构中使用。常规用法中,会层层递进来操作内部结构体中的变量,例如上图中的P.bit.C。
2024-04-19 11:56:18
1840
转载 C++设计模式:AbstactFactory 模式(抽象工厂模式)
每上架一个国家的苹果我们都要实现一次苹果类,这样就会有成千上万的苹果类需要被创建,AbstractFactory 模式就是用来解决这类问题的:要创建一组相关或者相互依赖的对象。实际上,AbstractFactory模式是为创建一组(有多类)相关或依赖的对象提供创建接口,而 Factory模式是为一类对象提供创建接口或延迟对象的创建到子类中实现。假如我们要买水果,水果的产地来自中国、日本、美国,每个国家的水果种类都可以分为苹果、香蕉、梨子。
2024-04-16 10:09:46
78
转载 C++设计模式:Factory 模式(工厂模式)
main.c文件中只需要关注Product类(基类),不关注具体某个ConcreteProduct,采用多态特性,调用ConcreteProduct的接口。如此实现,在ConcreteProduct类内部做任何修改,都不影响main.c的代码逻辑。可以看出,对与某一个具体的工厂ConcreteFactory类,其所生产的产品是ConcreteProduct类,通过工厂类的CreateProduct接口,实现内部对ConcreteProduct对象的封装和屏蔽;
2024-04-15 15:27:44
214
转载 C++设计模式:概述
设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的解决某一类问题的一种编码方案。
2024-04-08 21:30:47
58
原创 用QT调用FFMPEG的接口
主要目的是:添加FFMEEG的库路径和头文件路径,实际地址根据不同的客户端环境,会有差异。运行时,需要在指令中添加目标文件的地址,这里用了绝对路径,相对路径不知为何行不通,先不管了,这些不重要。主要目的是:添加FFMPEG的库路径和头文件路径,实际地址根据不同的客户端环境,会有差异。主要目的是:添加SDL的库路径和头文件路径,实际地址根据不同的客户端环境,会有差异。主要目的是:添加SDL的库路径和头文件路径,实际地址根据不同的客户端环境,会有差异。在工程的pro文件中,添加如下字段;打开Qt,新建工程;
2024-04-03 14:55:02
1542
转载 AAC文件的ADTS格式解析
平时如果你遇到了编码AAC裸流的时候,很有可能会出现写出来的AAC文件不能在PC端和手机上进行正常播放,这时候可能的原因是你的AAC文件中的每一帧里面缺少了ADTS头信息文件的包装拼接。⼀个AAC原始数据块⻓度是可变的,对原始帧加 上ADTS头进⾏ADTS的封装,就形成了ADTS帧。注意:ADTS Header的长度可能是7个字节或者9个字节,protection_absent=0时,则ADTS Header的长度为9个字节;固定头信息中的数据每⼀帧都相 同,⽽可变头信息则在帧与帧之间可变。
2024-04-03 11:00:19
405
原创 Uboot的start.s源码分析
将此标号地址处的内容取出来给pc指针,而这内容恰好是异常处理函数的首地址(预留的空间就是为了放异常处理地址用的,这里_software_interrupt: .word software_interrupt指令中software_interrupt,是一个标号,标号代表的是处理地址,也是跳转的目标地址,该标号在本文件最下边有定义,其他标号类似),这样完成了一次异常处理。_TEXT_BASE并不是ram中的起始地址,只是u-boot放置的首地址,源码中是:0x33f80000。
2024-03-07 17:46:09
954
转载 Ubuntu安装Qt教程
执行sudo apt-get install libgl1-mesa-dev完成后,回到qtcreator界面,重新运行项目,就出现mainWindow界面了。至此,qt-opensource-linux-x64-5.11.1算是安装成功了。把下载好的qt-opensource-linux-x64-5.11.1.run放进Linux系统里。首先给qt-opensource-linux-x64-5.11.1.run运行权限,再运行。本文以安装qt-opensource-linux-x64-5.11.1为例。
2024-03-04 14:18:07
3998
转载 设置VMware共享文件夹
主机与虚拟机之间传递文件,最快捷的方法莫过于共享文件夹。此方法不需要复制文件,而且可以节省硬盘空间。查看 (注意:挂载后必须要再次进入/mnt/hgfs才能查看到共享的文件夹)用此方法添加全部需要共享的文件夹,添加完成后如下图所示,点击“确定”“名称”即虚拟机中显示的名称,点击“下一步”->“完成”点击“添加”,进入共享文件夹向导。然而,自己在虚拟机中并未找到共享的两个文件夹。注意:如果虚拟机重启,需要再次挂载共享文件夹。打开 “设置 -> 选项 -> 共享文件夹”选择需要共享的文件夹,点击确定。
2024-03-04 13:32:06
1797
2
转载 Ubuntu FFmpeg开发环境搭建
配置环境 Ubuntu 22.04.2 LTS +建议在《编译与安装》一节,都使用源码的方式编译和安装,本编译安装方式最终生成的皆为静态库。部分命令说明:git -C [git-command] 指定其它路径的仓库 执行命令 注意,-C 要在命令之前。
2024-03-04 10:09:24
1125
转载 音视频的封装格式和同步
比如:同样的陷可以做成饺子也可以做成包子。对于视频也是一个道理,同样的。External Clock Master:同步音频和视频到外部时钟。PTS(Presentation Time Stamp):即。封装则使用MP4封装格式。Audio Master:同步视频到音频。Video Master:同步音频到视频。在以我们平时所看的电影格式来讲,如下图。视频Video:使用了。音频Audio:使用了。封装格式(也叫容器)就是将。封装的格式不一样,后缀名也就不一样。,这个时间戳的意义在于。
2024-03-02 18:19:13
124
转载 音频的基础概念和知识
如果0.1kHz~1kHz范围内的声音信号的强度在被提升的阈值曲线之下,由于它被0.2kHz强音信号所掩蔽,那么此时我们人耳只能听到0.2kHz的强音信号而根本听不见其它弱信号,这些与0.2kHz强音信号同时存在的弱音信号就可视为冗余信号而不必传送。所谓冗余成分指的是音频中不能被人耳感知到的信号,它们对确定声音的音色,音调等信息没有任何的帮助。此外,根据人耳听觉的生理和心理声学现象,当一个强音信号与一个弱音信号同时存在时,弱音信号将被强音信号所掩蔽而听不见,这样弱音信号就可以视为冗余信号而不用传送。
2024-03-02 18:16:58
511
转载 视频的主要概念
通常说一个视频的25帧,指的就是这个视频帧率,即1秒中会显示25帧。帧率越高,给人的视觉就越流畅。I 帧(Intra coded frames):I帧不需要参考其他画面而生成,解码时。,分辨率也就是我们常说的640x480分辨率、1920x1080分辨率,其中。视频分辨率:ppi(标准单位),视频的分辨率是指。码率越大,说明单位时间内取样率越大,数据流精度就越高。视频码率:kb/s,是指视频文件在。,同时利用了空间和时间上的相关性。
2024-03-02 17:20:00
166
转载 视频中常见的720P、1080P、4K分辨率包含了什么
从早期的420p,到后来的720p,到现在的非1080p不看。视频的清晰度飞快提升,但是在看到色彩越来越丰富清晰度越来越高的画面时,你有关注过他们的到底是怎么做到的么?我们一起来了解一下吧。想必大家在日常生活中都会看到或听到“分辨率”这个词,比如在视频网站会有几个分辨率选项供我们选择。我们都知道选不同的分辨率会带来不同的清晰度,但是他们为什么要叫这个名字,720p、1080p 这些分辨率中到底包含了什么呢?可能有不少小伙伴不甚了解,今天我们就来一起学习下吧。
2024-03-02 17:10:30
6104
转载 如何压缩vmware虚拟磁盘空间
ssd空间常常告急, 如何如何释放vmware空间成了问题. 网上找的方法, 如从vmware界面,虚拟机设置->硬盘->压缩, 往往不起作用.docker rmi --force XXXXX # 删除无用的docker image,XXXX 是 IMAGE ID ,8. 关闭虚拟机, 从vmware界面,虚拟机设置->硬盘->压缩(本人这步,磁盘空间几乎没变化)docker rm -v xxx #删除docker容器,及其数据卷 ,删除容器数据有风险!, 这是大头, 本人有25G。
2024-03-01 11:51:35
414
转载 EdgeX Foundry(七):EdgeX中各服务的基本功能
EdgeXFoundry最开始是由Dell公司运行IOT网关上构建的系统,后来开源出来。EdgeXFoundry就像是硬件与软件之间的一个中间件,南向连接各种设备和传感器,北向连接应用程序。EdgeXFoundry框架有四个服务层和两个基础系统服务,分别是设备服务层(Device Service),核心服务层(Core Service),支持服务层(Supporting Service)还有应用服务层(Application Services);
2024-03-01 10:25:08
419
转载 EdgeX Foundry(六):EdgeX总体架构
由于EdgeX的中立的设计(Tenet1技术中立),他们将很容易把EdgeX边缘计算软件移植到不同操作系统和不同硬件平台上,然后与自己家的云服务对接,就可以给客户提供端到端的完成的物联网解决方案了。他们只需要去开发安全方面或者规则引擎方面或者数据存储方面的程序,然后把这些程序用EdgeX的相应服务封装以下,就可以在EdgeX的应用软件市场卖产品了。有了EdgeX,他们可以从EdgeX的服务市场中寻找所需的设备服务、安全服务、导出服务,然后通过简单配置就可以实现一个边缘计算项目。
2024-02-29 21:58:24
583
转载 EdgeX Foundry(五):边缘计算软件主流设计方法盘点
有趣的是,软件架构基本上与功能性需求无关。我们可以用任何软件架构实现一组用例(应用程序的功能性需求)。但是软件架构会对非功能性需求有直接的影响。因此我们在做软件的架构选型的时候,要考虑能否满足系统的非功能性需求。主要的非功能性需求有:我们来看下这些非功能性需求指标的定义。NFR-1健壮性软件可以对异常条件进行适当的反应的能力。NFR-2可扩展性软件产品适应需求变化的容易程度。NFR-3可重用性软件组件可以在许多不同应用程序中作为组件的能力。NFR-4兼容性软件的不同组件互相组合的容易程度。
2024-02-29 14:53:46
206
转载 EdgeX Foundry(四):为什么不能用平均主义设计边缘计算软件
更令人吃惊的是,当Daniels把所有学生的手尺寸平均后,平均尺寸的手型和任何一个个体的测量值不同。更吃惊的是,Daniels发现,要是只选3个身体尺寸来看,如颈维、臀围、腰围,看有多少飞行员在这三个尺寸的平均值范围内,结果只有3.5%的飞行员满足。在随后的30年中,座椅的形状和大小、座椅到操纵杆距离、挡风玻璃的高度、头盔形状,都是根据1926年那次统计的飞行员的平均值设计的。他根据4063名飞行员的测量数据,计算了10个对于飞行驾驶舱最重要的尺寸的平均值,包括身高、胸围、手臂长度等。
2024-02-29 14:48:48
77
转载 EdgeX Foundry(三):EdgeX如何应对5大需求问题
上面我们已经了解了边缘计算遇到的五大问题。在本文中,我们来看一下EdgeX Foundry是如何解决这五大问题的。
2024-02-29 14:40:58
204
转载 EdgeX Foundry(二):边缘计算框架有哪些需求
要深入理解边缘计算框架,我们首先要对物联网边缘计算所处的环境有一定的了解。下表是边缘侧与云端的环境特点的对比。
2024-02-29 14:12:17
186
转载 EdgeX Foundry(一):EdgeX边缘计算微服务框架简介
EdgeX Foundry用一句话来介绍,就是Linux基金会下的硬件和操作系统无关的开源中立的边缘计算微服务框架,用于统一工业物联网边缘计算解决方案的生态系统。边缘计算微服务框架EdgeX的吉祥物是章鱼哥。为什么吉祥物是章鱼呢?章鱼有大约300种。章鱼智力非常高,会走迷宫,还曾经成功预测世界杯冠军。章鱼有高度复杂的神经系统,其中2/3的神经元在8条腕足上,大脑仅有1/3的神经元。腕足上的神经元,哪怕在没有大脑信号控制的情况下,也可以做出各种复杂的反应动作。章鱼适应环境能力强大。
2024-02-29 13:57:54
537
原创 智能家居现状分析及未来展望
协议统一后,可继续在网关和云平台端优化升级,在安全通信和大数据领域持续改进,提供符合认证要求的智能硬件接入服务,打通智能设备之间的“信息孤岛”,降低智能家居的技术门槛,实现多个智能设备的统一连接和管理,获取更多支持;同时,也能结束企业间各自为战的状态,形成统一的合力,利用大数据的优势,进行更多智能分析和场景优化。未来的设备要实现定制化生产,抛弃各自野蛮发展的路子,以解决方案的思路来运作,不同设备的形状和视觉配色要协调统一,跟整体家装风格匹配,无论活跃还是沉稳,她们有灵魂,不仅是产品,更是艺术品的存在。
2024-02-22 18:18:09
1390
介绍飞思卡尔8位单片机sci操作方法
2011-10-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人