- 博客(170)
- 资源 (26)
- 收藏
- 关注
原创 zmq实战-2.基本通信模式
ZeroMQ通信模式概述:ZeroMQ提供多种通信模型满足不同需求。请求-响应(REQ-REP)适合同步RPC调用,发布-订阅(PUB-SUB)适用于单向广播,推拉(PUSH-PULL)实现任务管道,Router/Dealer支持复杂路由。其他模式包括点对点(PAIR)、调查(Survey)、总线(Bus)和转发器(Forwarder)。选择模型需考虑通信模式(同步/异步)、扩展性(节点数量)、性能要求(延迟/吞吐)等关键因素,建议通过原型测试评估特定场景下的实际表现。不同模型在消息传递方式、负载均衡能力和
2025-06-19 18:31:18
514
原创 zmq入门-1.安装
本文介绍了高性能异步消息库ZeroMQ的安装与验证方法。在不同操作系统下:Linux通过源码编译安装,Windows使用Visual Studio编译,macOS通过Homebrew安装。安装完成后,通过Python编写的发布-订阅示例代码验证安装成功,并提供了常见问题解决方法。文章还包含详细的安装命令和代码片段,帮助用户快速掌握ZeroMQ的基本使用。
2025-06-19 14:27:35
642
原创 zmq入门-0.概述
ZeroMQ是一款高性能异步消息传递库,专为分布式和并发应用设计。它提供多种通信模式(请求-应答、发布-订阅、推-拉),采用无锁队列和批量处理等优化技术实现低延迟高吞吐传输。相比传统消息队列,ZeroMQ无需独立服务器,直接嵌入应用,支持跨平台(Linux/Windows/macOS)和多语言(C++/Python/Java等),在金融高频交易、微服务通信、物联网等领域有广泛应用。其轻量级架构和灵活的消息模式使其成为构建高效分布式系统的理想选择。
2025-06-19 14:16:32
947
原创 Linux内核之同步管理--3.自旋锁
自旋锁是一种高效的同步机制,通过忙等待避免线程切换开销,适用于锁持有时间极短的场景。本文介绍了自旋锁的基本概念、工作原理及与其他锁机制的区别,分析了其优缺点。重点阐述了自旋锁的实现原理,包括原子操作与内存顺序,并提供了C++代码示例。此外,还探讨了自旋锁在Linux内核中的应用场景及使用注意事项,如避免死锁和禁止睡眠等。最后提出了自适应自旋锁等优化策略,以提高性能。深入理解自旋锁有助于开发者在并发编程中选择合适的同步机制,优化系统性能。
2025-06-17 18:26:56
726
原创 Linux内核之同步管理--2.内存屏障
Linux内核中的内存屏障机制是确保多核处理器环境下数据一致性与执行顺序性的关键同步原语。内存屏障分为读屏障、写屏障和全屏障三种类型,分别用于阻止指令重排序、强制缓存同步及保证内存操作的可见性。这些屏障通过硬件指令(如x86的lfence/sfence/mfence)和编译器优化控制实现,广泛应用于生产者-消费者模型、设备驱动及自旋锁等同步场景。内存屏障能有效解决多线程编程中因乱序执行导致的数据竞争问题,是构建可靠并发系统的重要基础。
2025-06-17 11:45:56
1001
原创 Linux内核之同步管理--1.原子操作
Linux内核中的原子操作是确保多处理器环境下数据一致性的重要同步机制。原子操作具有不可分割性,在执行过程中不会被中断,且高度依赖硬件架构支持。x86架构通过LOCK指令实现总线锁定,而ARM架构采用LDREX/STREX独占访问指令。Linux提供atomic_t类型和原子操作API(如atomic_inc、atomic_dec等),广泛应用于资源引用计数、并发控制和状态标志等场景。这些机制有效避免了数据竞争,是构建高效同步原语(如自旋锁)的基础,为内核资源管理提供了安全保证。
2025-06-17 11:27:18
794
原创 Linux内核之同步管理--0.概述
Linux内核的同步机制是确保系统高效稳定运行的关键。通过同步与互斥机制,可以有效地避免多个进程并发访问同一临界资源,从而保证系统的数据一致性和正确性。而对于并发与竞态问题,我们需要充分认识其产生的原因和影响,并采取相应的措施加以解决。在实际开发中,需要根据具体的应用场景和性能需求,选择合适的同步机制和解决方法,以确保系统的稳定性和可靠性。
2025-06-16 09:36:19
178
原创 c++入门教程--知识总结
本文分享了C++学习过程中的思维导图笔记,涵盖C++主要知识点。作者认为C++作为面向对象语言相比C语法更复杂,特别是继承、多态和C++11新增特性。文章列出了13个模块的思维导图:基础语法、类与对象、内存管理、模板、IO流、继承、多态、C++11特性、异常处理、智能指针、特殊类设计、类型转换和STL库。这些导图系统梳理了C++核心概念,适合学习者参考。内容全面,结构清晰,可作为C++学习的导航框架。
2025-06-13 18:26:32
26
原创 c++入门教程--C++流行的开源框架和库超全总结
C++标准库,包括了STL容器,算法和函数等。C++通用框架和库Apache C++ Standard Library:是一系列算法,容器,迭代器和其他基本组件的集合。(http://stdcxx.apache.org/)ASL:Adobe源代码库提供了同行的评审和可移植的C++源代码库。(http://stlab.adobe.com/)Boost:大量通用C++库的集合。(https://github.com/boostorg)BDE:来自于彭博资讯实验室的开发环境。(https://github
2025-06-13 18:08:10
41
原创 ros入门教程--5.ROS2的节点
ROS2节点是系统的最小处理单元,具有模块化、独立性和通信能力的特点。它们通过话题、服务、动作和参数等机制实现高效数据交互,适用于自动驾驶、工业自动化、服务机器人等场景。节点支持生命周期管理,确保系统稳定性和灵活性。随着机器人技术的发展,ROS2节点将在更多领域推动智能系统的进步。
2025-06-11 16:29:55
103
原创 ros入门教程--4.ROS2功能包
ROS2功能包作为新一代机器人操作系统的核心组件,采用模块化设计提升开发效率和可维护性。文章系统介绍了功能包的概念、作用与结构,对比了C++和Python两种语言的功能包目录差异。详细讲解了从创建工作空间到创建编译功能包的全流程,并列举了常用管理指令。最后展示了功能包在硬件驱动、运动控制、导航建图等典型机器人应用场景中的实践案例。通过模块化封装和社区共享机制,ROS2功能包有效促进了机器人技术的协作开发和快速迭代。
2025-06-11 16:28:05
82
原创 ros入门教程--3.ROS2工作空间
在ROS机器人开发中,当我们针对机器人的某些功能进行开发时,会编写各种代码、参数、脚本等文件,这些文件需要放置在一个特定的文件夹中进行管理,这个文件夹在ROS系统中就被称为工作空间。简单来说,工作空间就是一个存放项目开发相关文件的文件夹,是开发过程中存放所有资料的大本营。ROS2工作空间的结构设计合理,各个部分分工明确,为开发者提供了一个高效、便捷的开发环境。通过合理使用工作空间,可以更好地组织和管理代码,提高开发效率,降低维护成本。
2025-06-11 16:25:29
481
原创 ros入门教程--2.ROS2常用的简单操作
通过本文的介绍,我们详细了解了ROS2的常用命令,包括工作空间与功能包管理、编译与构建、节点管理、话题管理、服务与动作、参数管理以及录制与回放等方面。这些命令是ROS2开发中不可或缺的工具,掌握它们能够帮助开发者更高效地进行机器人应用的开发、调试和部署。在实际应用中,开发者可以根据具体需求灵活运用这些命令,不断提升开发效率和质量。
2025-06-11 16:23:07
273
原创 ros入门教程--1.ROS2安装方法
ROS2作为新一代的机器人操作系统,具有许多优势,在自动驾驶、工业自动化、服务机器人等领域有广泛的应用前景。通过本文介绍的安装方法,你可以在不同的操作系统下成功安装ROS2,并进行相应的配置和验证。在安装过程中,可能会遇到一些问题,但通过本文提供的解决方法,应该能够顺利解决。希望本文能够帮助你快速上手ROS2,开启机器人开发的新旅程。
2025-06-11 16:21:37
166
原创 ros入门教程--0.ROS的发展历程:从起源到未来
当时,他们在研究机器人在人类环境中进行操作任务时,发现许多同事都受到机器人技术多样性的阻碍,优秀的软件开发人员可能没有所需的硬件知识,有人开发最先进的路径规划可能不知道如何进行所需的计算机视觉。未来,随着机器人技术的不断发展和应用需求的增加,ROS将在智能化、实时化、分布式化、多样化、可靠性和安全性等方面不断发展,为机器人技术的发展提供更强大的支持。ROS 2在ROS 1的基础上进行了一系列的改进,包括实时性、分布式系统、多语言支持等,使得ROS 2在更多的场景下可以发挥作用。
2025-06-11 16:10:44
859
原创 C语言入门教程100讲--0.C语言的历史长河
C语言作为计算机编程领域的经典语言,历经半个多世纪的发展,依然保持着强大的生命力和广泛的应用。它的起源源于对底层系统开发的迫切需求,其发展历程见证了计算机技术的飞速进步。C语言以其简洁高效的语法、丰富的数据类型、强大的指针功能和广泛的可移植性,在操作系统、嵌入式系统、编译器开发、游戏开发等众多领域发挥着不可替代的作用。在未来,随着科技的不断发展,C语言将继续在系统级编程、高性能计算、嵌入式系统等领域保持主导地位。同时,C语言也将不断适应新的技术和需求,通过标准的更新和开发工具的完善,注入新的活力。
2025-06-11 15:41:01
713
原创 colcon-初识
我们先来回答一个问题,ros2为什么用colcon?ROS(Robot Operating System)使用colcon作为构建工具,主要是因为它提供了比 ROS 传统的catkin工具更多的功能和优势。具体来说,colcon在 ROS 2 中逐渐取代了catkin,并成为构建和管理多个包的标准工具,以下是它的一些关键优势:colcon支持并行构建,可以在多个 CPU 核心上同时构建多个包,从而加快构建速度。colcon。
2024-11-26 19:37:30
1444
原创 程序员面试之操作系统
进程是资源(CPU、内存等)分配的基本单位,线程是CPU调度和分配的基本单位(程序执行的最小单位)。同一时间,如果CPU是单核,只有一个进程在执行,所谓的并发执行,也是顺序执行,只不过由于切换速度太快,你以为这些进程在同步执行而已。多核CPU可以同一时间点有多个进程在执行。你可以有很多角度,有进程上下文,有中断上下文。进程上下文。
2024-10-08 21:53:43
801
原创 程序员面试之c语言二
宏定义是预处理指令,文本替换,在编译前进行处理。没有类型检查,直接替换文本,可能导致意料之外的错误。风险缺乏类型安全:宏没有类型检查,可能导致运行时错误。调试困难:宏在预处理阶段展开,调试信息可能不清晰。副作用:宏替换时可能出现副作用,如表达式被多次计算。函数定义是编译时处理的代码块,有类型检查和更好的调试支持。性能要求:在性能敏感的代码中,宏定义避免了函数调用的开销(但现代编译器通常会对内联函数做优化)。常量表达式:对于编译时常量(如),宏定义更为合适。条件编译。
2024-09-25 14:57:11
907
原创 程序员面试之c语言一
回调函数是指一个函数作为参数传递给另一个函数,并在适当的时候由另一个函数调用。排序算法:在实现排序算法时,可以传递一个比较函数作为回调函数,以确定元素的顺序。return 0;
2024-09-25 14:40:13
733
原创 yocto实战之-systemd服务创建
在 Yocto 工程中创建服务主要是通过创建一个 systemd 服务文件,并将其集成到 Yocto 项目中。在你的配方目录下创建一个 files 目录,并将 my_service.service 和 my_script.sh 文件放入该目录。完成后,服务会自动被启用,并在系统启动时运行。将服务文件和脚本文件添加到 files 目录。添加配方到你的 Yocto 镜像中。
2024-09-19 11:22:16
271
原创 01-linux驱动之简单内核模块
Linux 可加载内核模块(Loadable Kernel Modules,简称 LKMs 或 LKM)是 Linux 内核的一个重要特性,它允许用户动态地添加或删除内核功能而不需要重新启动整个系统。这种灵活性使得内核可以根据需要加载不同的功能模块,从而节省内存资源并提高系统的安全性。
2024-09-10 09:05:20
521
原创 linux基础之运行级别
Linux系统的运行级别(Runlevel)是指系统在不同操作模式下的状态。传统的Linux系统使用了一种基于Inittab和init进程的运行级别系统来管理系统的启动和切换模式。随着Systemd的广泛采用,这种概念有所变化,但运行级别的概念依然存在,只是表现形式有所不同。
2024-09-05 17:09:29
1530
原创 linux基础之目录结构
Linux是一个基于Unix的开源操作系统,其文件系统具有层次化的目录结构,这种结构以根目录/作为起点,向下展开成一个倒置的树状结构。每个文件或目录在这个结构中都有自己独特的路径名称,便于定位和访问。Linux的目录设计遵循一定的惯例和标准,旨在使文件组织合理化并方便管理和维护。位置功能/binbin 是 binary 的缩写。这个目录沿袭了 UNIX 系统的结构,存放着使用者最经常使用的命令。例如 cp、ls、cat等。/boot这里存放的是启动 Linux 时使用的一些核心文件/dev。
2024-09-05 16:41:51
840
原创 设计模式专题之C语言-观察者模式
观察者模式(Observer Pattern)是一种行为型设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式在很多场景下都非常有用,比如在GUI应用中,用户界面组件通常需要响应数据模型中的变化。
2024-08-29 10:20:31
695
原创 设计模式专题之C语言-访问者模式
访问者模式是一种行为型设计模式,它允许我们向现有类结构添加新的行为,而无需修改这些类。这种模式使用了一个访问者类,该类定义了一组访问方法,每个方法对应于结构中的某个类。这样,我们可以轻松地在不改变原有结构的情况下,通过创建不同的访问者来为整个结构添加新功能。适用场景当你需要对一个对象结构中的对象进行很多不同的并且不相关的操作时。当对象结构中的对象有共同的操作集合时。当需要对这些操作进行参数化时。
2024-08-29 10:19:43
523
原创 设计模式专题之C语言-解释器模式
解释器模式是一种行为型设计模式,它允许为简单的文法定义一个语言,并且可以解析这个语言中的句子。这种模式常用于编译器、数据库查询引擎等领域,用于处理特定的领域语言(DSL, Domain Specific Language)。本文将介绍如何使用C语言实现一个简单的解释器模式示例。
2024-08-29 09:09:55
514
原创 设计模式专题之C语言-备忘录模式
备忘录模式是一种行为设计模式,它允许在不破坏封装性的前提下捕获一个对象的内部状态,并且可以在以后将对象恢复到该状态。这种模式通常用于实现撤销功能、或者保存游戏进度等场景。备忘录模式的基本结构Originator(发起人):维护一个备忘录对象,用以存储当前的状态。Memento(备忘录):负责存储发起人的内部状态,并防止发起人以外的对象访问这些状态。Caretaker(管理者):负责保存和提供备忘录对象,但不能对备忘录的内容进行操作。
2024-08-29 09:09:12
554
原创 设计模式专题之C语言-中介者模式
中介者模式是一种行为设计模式,它定义了一个对象来封装一系列对象交互的方式。中介者模式减少了对象间的显式依赖关系,使得它们不需要相互引用就可以相互作用。这种模式简化了系统的维护和扩展。
2024-08-29 09:08:17
470
原创 设计模式专题之C语言-迭代器模式
迭代器模式是一种行为设计模式,它允许你顺序地遍历集合中的元素,而不需要暴露其底层的表示。在C语言中,由于没有类和对象的概念,实现迭代器模式需要使用函数指针、结构体等手段。使用场景当需要提供一种方法来访问一个容器对象的各个元素时,而又不想暴露该对象的内部细节。在遍历过程中可能需要执行额外的操作(如过滤条件)。
2024-08-29 09:06:51
466
原创 设计模式专题之C语言-职责链模式
职责链(Chain of Responsibility)模式是一种行为设计模式,它允许请求沿着处理者链传递,直到其中一个处理者处理它。这种模式避免了请求发送者与接收者之间的耦合关系,让多个对象都有机会处理请求。使用场景当有多个对象可以处理同一个请求,但是具体由哪个对象处理该请求在运行时刻自动确定。在需要动态指定一组对象处理一个请求的时候。避免请求发送者和接收者之间的耦合。
2024-08-29 09:05:40
817
原创 设计模式专题之C语言-命令模式
命令模式(Command Pattern)是一种行为型设计模式,它将请求封装为一个对象,从而使你能够参数化方法调用。这种模式允许我们解耦发送者和接收者,使得系统更加灵活,易于扩展。解耦: 发送者(遥控器)不需要知道接收者(电视)的实现细节。可扩展性: 可以轻松添加新的命令或修改现有命令的行为,而无需更改发送者或接收者的代码。灵活性: 支持撤销/重做等高级功能,只需稍作修改即可实现。
2024-08-29 09:04:20
956
原创 设计模式专题之C语言-策略模式
在软件工程中,设计模式是一种通用的解决方案,用于解决常见的问题。其中一种非常实用的设计模式是策略模式。策略模式定义了一系列算法,并将每一个算法封装起来,使它们可以互相替换。这样做的好处是算法的变化不会影响到使用算法的客户。
2024-08-29 09:03:10
457
原创 设计模式专题之C语言-状态模式
在软件工程中,状态模式是一种行为设计模式,它允许一个对象在其内部状态改变时改变它的行为。状态模式可以使得状态的变化更加明确和易于管理。本文将通过一个简单的交通信号灯示例来解释状态模式,并用C语言实现。状态模式简介状态模式的核心在于将不同的状态抽象成类,并且允许这些状态类管理它们自己的行为。当外部条件发生变化时,可以通过切换不同的状态类来改变对象的行为。这样做的好处是将行为和状态紧密地耦合在一起,使得系统更易于扩展和维护。状态模式通过将对象的行为与其内部状态分离,使得代码更加清晰和易于维护。
2024-08-29 09:00:19
486
1
原创 设计模式专题之C语言-模板方法模式
模板方法模式是一种行为型设计模式,它定义了一个算法的骨架,并允许子类为某些步骤提供具体的实现。该模式的核心思想是定义一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下重新定义算法的某些步骤。目的定义算法骨架:定义算法的步骤顺序,确保算法的一致性和完整性。封装变化:将不变的部分与可能变化的部分分离,以便于维护和扩展。重用代码:允许子类重用父类中的通用逻辑,减少重复代码。如何工作定义模板方法:在基类中定义一个模板方法,它包含算法的步骤顺序。抽象操作。
2024-08-29 08:59:36
649
原创 设计模式专题之C语言-抽象工厂模式
抽象工厂模式是一种创建型设计模式,它提供了一个接口用于创建一系列相关或相互依赖的对象,而无需指定它们具体的类。在抽象工厂模式中,我们创建对象集合,这些对象通常属于同一“系列”或者有着共同的主题,而不需要知道具体是哪些类生成了这些对象。抽象工厂模式的应用场景当系统需要独立于它的产品创建、组合和表示时。当系统要由多个产品系列中的一个来配置时。当添加新的产品系列时,整个系统不会受到影响。抽象工厂:提供一个接口,用于创建一组相关或相互依赖的对象,而不需要指定这些对象所属的具体类。具体工厂。
2024-08-29 08:48:34
1101
原创 设计模式专题之C语言-外观模式
在软件工程中,设计模式是一种被广泛采用的解决特定问题的方法。其中,“外观模式”(Facade Pattern)是一种结构型设计模式,它的主要目的是提供一个统一的接口来访问一系列复杂的子系统。这使得客户端与子系统的内部细节解耦,并简化了客户端的使用。外观模式通过提供一个高层次的接口,让子系统更容易使用。它不改变子系统的功能,而是为它们提供了一个简单明了的界面。当一个系统过于复杂,需要一个简化的接口。当用户只需要使用一个子系统的一个小部分功能。当你需要降低子系统与其他组件之间的耦合度。优点。
2024-08-29 08:47:10
843
原创 设计模式专题之C语言-装饰者模式
装饰者模式(Decorator Pattern)是一种结构型设计模式,它允许向对象动态地添加新的功能。这种模式通过创建一个装饰类来包装原有的类,可以在不修改原类的基础上给类添加新的职责。适用场景当需要扩展一个类的功能或者给一个类添加附加职责时,装饰者模式提供了一种比继承更加灵活的方式。当不能采用生成子类的方法进行扩充时,一种情况是系统中存在大量的独立扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长。
2024-08-29 08:45:20
425
Arduino_电子积木基础套装中文教程.pdf
2019-09-16
理解Unix进程 扫描中文版.pdf
2019-02-20
spi-tools-1.0.2
2024-09-13
麦可网提供的linux驱动开发视频
2024-09-13
使用Yocto项目为任何嵌入式设备创建自定义嵌入式Linux发行版.pdf
2024-07-09
手机综合维修工具箱.exe
2020-02-13
HP优盘格式化工具HPUSBFW.rar
2020-02-14
U盘保护工具MyUSBHelper.rar
2020-02-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人