嵌入式数据结构C++工具链
文章平均质量分 80
嵌入式数据结构C++工具链
Hali_Botebie
这个作者很懒,什么都没留下…
展开
-
【C++学习(29)】C++中使用Boost库来注册和调用回调函数的一个例子
在C++中,使用Boost库,来和,特别是在多线程环境中。这是一些零碎的笔记,仅供参考。原创 2024-09-06 16:16:52 · 838 阅读 · 0 评论 -
【C++学习(28)】通俗一点讲解:std::bind 回调技术
std::bind允许你预先设置函数的某些参数,从而得到一个新的函数(或可调用对象),这个新的函数只需要你提供剩下的参数。这在回调函数和异步编程中特别有用,因为你可能希望预先决定某些参数的值,而让其他参数在稍后的某个时间点被提供。原创 2024-09-06 16:13:55 · 223 阅读 · 0 评论 -
【cmake开发(15)】交叉编译时如何设置CMAKE_SYSROOT和CMAKE_FIND_ROOT_PATH
在交叉编译场景中,正确设置和以确保 CMake 能够正确地找到 ARM 架构的库、头文件和其他系统文件。应该设置为你的 ARM 文件系统根目录,即。这个变量会告诉编译器和链接器在查找标准库和系统文件时使用这个目录作为根目录。用于为 CMake 的find_系列命令(如find_path等)添加额外的搜索路径前缀。如果你有一些特定的库或头文件不在 ARM 文件系统的标准位置,或者你想要在除了之外的额外目录中搜索,你可以将那些目录添加到中。原创 2024-08-22 11:09:09 · 1115 阅读 · 0 评论 -
【QT开发(19)】2023-QT 5.14.2实现Android开发,使用新版SDK,试图支持 emulator -avd 虚拟机
SDK 工具版本说明用 sdk manager 命令行版本(command line) 获取SDK。截至2023年10月,sdk有Ui界面的是过时信息,过时的sdk的虚拟机是32位的,因此无法使用,需要安装最新版本sdk tools。去android官网下载从QT的官方信息来看,用sdk manager安装 SDKlatest"To use thev4"原创 2024-07-18 14:08:01 · 1050 阅读 · 0 评论 -
opencv 打开图片后,cv::mat存入共享内存的代码,实现消费者与生产者模型。XSI信号量和POSIX 信号量
有名信号量其实是一个文件,它的名字由类似 " sem.[信号量名字] " 这样的字符串组成,注意看文件名前面有" sem. ", 它是一个特殊的信号量文件,在创建成功之后,系统会将其放置在 /dev/shm 路径下,不同的进程间只要约定好一个相同的信号量文件名字,就可以访问到对应的有名信号量,并且借助信号量来进行同步或者互斥操作,需要注意的是,有名信号量是一个文件,在进程退出之后它们并不会自动消失,而需要手动删除并释放资源。通常一个信号量的计数值用于对应有效的资源数, 表示剩下的可被占用的互斥资源数。原创 2024-06-20 19:04:35 · 1129 阅读 · 0 评论 -
opencv 打开图片后,cv::mat存入共享内存的代码,如何设置队列?
这个循环的缓冲器好像也能实现我们的需求。原创 2024-06-20 19:03:56 · 640 阅读 · 0 评论 -
把STL容器放入共享内存,重用STL allocator,传入模板参数Allocator,可以实现
基于共享内存的STL Allocator,shared_allocator.hh 是一个STL Allocator的实现,SharedAllocator 是一个模板类。而 Pool 类完成共享内存的分配与回收。原创 2024-06-20 19:03:07 · 792 阅读 · 0 评论 -
opencv 打开图片后,cv::mat存入共享内存的代码,以及如何设置共享内存的大小?图片的3840x2160 pixels
opencv 打开图片后,cv::mat存入共享内存的代码,以及如何设置共享内存的大小?图片的3840x2160 pixels。在OpenCV中,将cv::Mat对象存入共享内存需要几个步骤。首先,你需要创建一个共享内存区域,然后将cv::Mat的数据复制到该区域。注意:上述代码仅作为示例,可能需要根据你的具体需求进行调整。共享内存的使用需要谨慎处理同步和互斥问题,以避免数据竞争和不一致。你可能需要使用锁或其他同步机制来确保多个进程安全地访问共享内存。原创 2024-06-18 17:32:29 · 966 阅读 · 0 评论 -
多进程之间、使用共享内存、实现图片的数据通信:包括POSIX共享内存(shm_open 和 mmap虚拟内存)、系统调用(shmat物理存储器)、内存映射文件等方法
共享内存是进程间通信(IPC)的重要方式之一,可以让多个进程访问相同的内存区域,从而实现数据共享。原创 2024-06-18 16:15:35 · 885 阅读 · 0 评论 -
【QT开发(18)】QT for android,安卓手机蓝牙遥控器,用来控制遥控车
因为云端配置了QT for android,没有其他开发安卓的IDE,本着简单事情简单办的原则,在QT 上开发,还可以跨平台部署,很好啊。界面划分为三个 QWidget,伸展因子 (Stretch Factor)比例分别是3:2:6.例如左边的标度盘是15,右边刻度盘是50,串口发送。发送左右两个标度盘的数值(范围:10-99),在。发送前进、后退、暂停等串口指令分别发送。2、蓝牙QT for android。3、公众号:果果小师弟出品,蓝牙小车。接受其他蓝牙发送过来的串口信息。蓝牙打开、搜索和连接。原创 2024-04-18 09:24:28 · 936 阅读 · 2 评论 -
【C++学习(27)】一个c++类的实例“多线程“运行的例子
一个类本身并不直接“用于多线程运行”。但是,类的实例(即对象)可以在多线程环境中被使用,并且类的设计可以影响它在多线程环境中的表现和易用性。在多线程编程中,重要的是要理解线程安全和并发控制的概念。线程安全意味着类的实例可以在多个线程中同时访问而不会导致数据不一致或其他问题。要设计一个线程安全的类,通常需要考虑如何同步对共享资源的访问,以避免竞态条件(race conditions)和其他并发问题。此外,一些设计模式(如单例模式、观察者模式等)在多线程环境中使用时需要特别注意线程安全性。原创 2024-04-01 15:51:35 · 338 阅读 · 0 评论 -
【C++学习(26)】RAII + 接口模式对生产者消费者模型进行封装
本次课程学习了 RAII 接口模式下的生产者消费者多 batch 实现。把前面学的知识全都串起来了,首先通过 create_infer 创建 infer 资源并对模型进行加载,这是 RAII 体现,其次该函数返回的是接口类的智能指针,因此用户只能看到 forward 这一个接口,这是接口模式的应用。转载 2024-03-29 17:11:28 · 43 阅读 · 0 评论 -
【C++学习(25)】RAII+接口模式对代码进行有效封装
这次课程我们学习了 RAII + 接口模式对代码进行封装,我们模拟了一个非常常见的推理类,首先我们分析了其存在的问题,那就是实例化 Infer 类,去调用 load_model、forward 等函数时,需要在函数去写异常逻辑处理,非常让人头疼。我们首先通过 RAII 将资源在构造函数中就进行初始化,避免了外部获取资源后还要调用相关函数去做初始化,其次我们采取了接口模式,将接口纯虚类与具体实现类分离开,让使用者只考虑具体的接口,而不必关心具体的实现。转载 2024-03-29 17:09:33 · 33 阅读 · 0 评论 -
【C++学习(24)】生产者消费者模式 future、promise、condition_variable,线程间通信
本次课程我们学习了生产者和消费者模式,这在我们模型推理过程中非常常见,生产者线程负责读取图片,拿到推理结果进行画框可视化,消费者线程负责模型推理,将结果返回到生产者线程。我们在学习生产者和消费者模式过程中,解决了三个问题:首先是共享资源访问问题。转载 2024-03-28 15:01:46 · 175 阅读 · 0 评论 -
【C++学习(23)】thread的join、joinable、detach以及promise、future线程知识,以及深度学习类成员函数作为线程启动函数的使用:使用类成员函数的指针
本次课程我们学习了线程的一些基本知识,包括创建线程、启动线程、线程启动函数参数传递以及类成员函数作为线程启动函数。线程启动后可以 join 也可以 detach,线程未启动则不能 join,join 会等待子线程执行完成,而 detach 会分离主线程和子线程,这时子线程成为了野线程,主线程没法 join 等待野线程,该线程会交给系统管理。转载 2024-03-26 19:13:00 · 35 阅读 · 0 评论 -
【cmake开发(14)】CMAKE 编写 FindXXX.cmake
可以将项目中经常使用的变量和函数定义在一个单独的xxx.cmake文件中,便于在其他CMake脚本文件中引用,提高代码的重用性和可维护性。# 定义项目名称# 定义编译器和编译选项# 定义一个函数,用于打印版本信息在使用第三方库时,通常需要指定编译选项和链接选项,可以将其定义在一个单独的xxx.cmake文件中,便于在其他CMake脚本文件中引用。# 定义第三方库的编译选项# 定义第三方库的链接选项12345。转载 2023-11-17 10:03:31 · 345 阅读 · 0 评论 -
【cmake开发(13)】使用Cmake-arm交叉编译的一个模板示例,以及说明 undefined reference to `expf@GLIBC_2.27‘问题的说明
opencv3.4.16/platforms/linux 路径下,linux文件夹下是一些.cmake文件,对应不同的移植对象,本人需要在NVIDIA的Xavier部署模型,所以选择aarch64-gnu.toolchain.cmake 工具链。实际上,我没有使用下列命令,替换为合适的交叉编译工具就可以了,理论上下列命令有效。在该地址可以找到对opencv的一个helloworld的交叉编译的演示。在编译和链接程序时,需要指定正确的库路径。这个脚本还是很好用的,如果理解里面的知识点的话!原创 2023-11-13 14:27:36 · 772 阅读 · 0 评论 -
【C++学习(22)】同步(Synchronous)和异步(Asynchronous)
消息通信机制*转载 2023-11-06 15:02:41 · 250 阅读 · 0 评论 -
【C++学习(21)】基于 C++ STL 和 pthread 实现一个多线程并发访问的队列
pthread_create 创建线程:https://www.runoob.com/cplusplus/cpp-multithreading.htmlpthread_exit 终止线程:https://www.runoob.com/cplusplus/cpp-multithreading.html连接和分离线程当创建一个线程时,它的某个属性会定义它是否是可连接的(joinable)或可分离的(detached)。只有创建时定义为可连接的线程才可以被连接。原创 2023-11-06 11:29:06 · 325 阅读 · 0 评论 -
【QT开发(16)】基于Qt的Android应用程序C/C++开发方法与实践
为在(1)和(2)之间, 即基于Qt的“纯”C/C++类源代码和不对第三方开放的Android平台之间, 需以JNI(Java Native Interface)为桥梁来实现两者的协同工作. 当Qt调用Android系统中的部分已有功能时, 就可借助JNI访问它们. 同时, Qt作为专注于跨平台的C++开发框架, 也不可能全部实现Android的所有功能. 某种程度上, JNI成为Android APP和C++程序之间相互调用的唯一通道.(5) 阅读、编辑、保存或另存修改后的核心程序代码.转载 2023-10-27 10:42:47 · 4060 阅读 · 0 评论 -
【QT开发(17)】2023-QT 5.14.2实现Android开发,NDKr21e,,SDK24.4.1,不支持虚拟机
在编译程序以支持安卓平台时,主要涉及到使用 Android NDK(Native Development Kit)进行交叉编译。通俗来说是实现Qt For Android开发环境。开发环境有三个包JAVA SDK (jdk 有apt install 安装)原创 2023-10-27 10:41:27 · 1791 阅读 · 0 评论 -
【QT开发(2)】ubuntu QT 5.14.2实现Win10的开发:Cross Compile Qt – MinGW Windows Applications on a Linux Host
这将会编译一个名为hello.exe的Windows可执行文件,它可以在64位Windows系统上运行。转载 2023-10-26 15:15:40 · 179 阅读 · 0 评论 -
【QT开发(15)】QT在没有桌面的系统中可以使用
在没有桌面的系统中,可以使用QT库。QT库可以在没有图形用户界面(GUI)的环境中运行,例如在服务器或命令行终端中。原创 2023-10-25 17:04:28 · 1139 阅读 · 2 评论 -
【QT开发(14)】QT P2P chat 聊天
在的第一阶段:集中式P2P 模式最简单的路由方式就是集中式,即存在一个中心节点保存了其他所有节点的索引信息,索引信息一般包括节点 IP 地址、端口、节点资源等。集中式路由的优点就是结构简单、实现容易。但缺点也很明显,由于中心节点需要存储所有节点的路由信息,当节点规模扩展时,就很容易出现性能瓶颈;而且也存在单点故障问题。一般是有一个服务器,和一群客户端。各个客户端可以两两相互发送消息。各个客户端用IP地址和TCP/IP监听端口号进行标识。客户端,可执行注册和聊天过程;原创 2023-10-25 16:39:21 · 646 阅读 · 0 评论 -
【QT开发(13)】QT发布到其他ubuntu用户
在ubuntu下打包QT程序及相关的依赖库到一个无QT环境的干净容器中运行,这将这过程分为7步;转载 2023-10-25 09:18:00 · 248 阅读 · 0 评论 -
【QT开发(11)】QT 线程QThread
这使得可以从分利用多处理器机器,有效解决不冻结一份应用程序用户界面的情况下,处理一个耗时操作的问题。原创 2023-10-23 17:19:23 · 260 阅读 · 0 评论 -
static修饰的局部变量:作用和全局变量一样了;static 静态全局变量仅对当前文件可见,其他文件不可访问,其他文件可以定义与其同名的变量,两者互不影响。
static用法详解变量。转载 2023-10-23 15:45:33 · 255 阅读 · 0 评论 -
【QT开发(12)】QT信号与槽的基本知识点
在这段时间qt的学习中,能感受到qt与其他工具相比,有很多独特和方便的地方。但如果说最能显示出区别的地方,应该是信号与槽,这也是qt语言核心机制。但是书上(《Qt Creator 快速入门第三版》)对这一块讲的不多,只有两页,为了更好的理解信号与槽,我搜集整理了信号与槽的一些基本知识点。转载 2023-10-23 14:15:46 · 122 阅读 · 0 评论 -
【QT开发(10)】QT 进程
使用类 QProcess,允许将一个进程堪称一个顺序IO设备。在Qt中,QProcess类是用于启动外部进程的类。它可以启动任何可执行文件,包括命令行工具和图形用户界面(GUI)应用程序。启动一个线程分4步1、在 窗口 类中添加一个私有成员类2、在 ui 中添加一个 button 按钮,然后添加信号槽。3、信号槽中增加启动进程。原创 2023-10-20 16:19:48 · 582 阅读 · 0 评论 -
【QT开发(9)】QT 中使用CUDA 代码
在之前的文章写了CUDA相关的知识。最近也在研究 并行异构的课程,在QT里面加入相关的cuda 代码试一下!首先需要 在camke 中开启cuda,参考之前的文章。原创 2023-10-18 10:35:07 · 1045 阅读 · 0 评论 -
【QT开发(4)】Qt Creator编译器修改,应用程序二进制接口(ABI)的版本;API、ABI、系统调用是什么?版本的选择(ABI和CPU版本)
编译器就是将“高级语言”翻译为“机器语言(低级语言)”的程序,在之前的博客3月25日 编译的四个过程不明白的可以看看。几个常见的编译器:(1)GCC(GNU Compiler Collection) 是一个针对于Linux和OS X的编译器。(2)MinGW(Minimalist GNU for Windows)是一个GCC和GNU Binutils的原生软件端口,用于在Windows上开发原生的Microsoft Windows应用程序。原创 2023-10-17 14:55:14 · 1005 阅读 · 0 评论 -
【QT开发(3)】QT for ROS2
【代码】【QT开发(3)】QT for ROS2。转载 2023-10-17 14:28:45 · 208 阅读 · 0 评论 -
【QT开发(1)】基于c++17的代码项目模板:QT build with Cmake
如何基于QT库进行一个helloworld?QT 库是一个可以写界面的库,如果将其引入 cmake 项目中?原创 2023-10-17 14:22:02 · 409 阅读 · 0 评论 -
【QT开发(7)】在arm平台上安装qt
prefix /usr/local/qt 参数指定 Qt 的安装路径,-opensource 参数指定使用开源版本,-confirm-license 参数指定确认许可证。Qt 依赖于一些库文件和工具,需要先安装这些依赖项,否则 Qt 编译和运行过程中会出现问题。在编译过程中,可能会遇到一些依赖问题,需要根据实际情况进行解决。使用 make 命令编译 Qt,在 ARM 平台上编译可能比较耗时。将文件放置到文件夹下,解压(例如解压到/usr/local/qt)至此,qt相关库在arm平台已经安装完成。转载 2023-10-17 14:09:30 · 1152 阅读 · 0 评论 -
【QT开发(8)】QT 中使用tensorrt
在之前的文章说明了tensorRT 的使用流程。今天尝试将其并入QT 项目中。原创 2023-10-17 13:56:07 · 801 阅读 · 0 评论 -
【C++学习(10)】将一个类作为另一个类的成员: 类对象和类指针; std::unique_ptr 智能管理类指针
直接定义即可。比如已有一个类class A, 再定义一个类class B,这样在B的定义中,就可以有一个A*类型的成员变量。比如class BA * a;这里的B::a就是一个A*类型的指针。需要注意的是,要使用这种形式的定义,要么A的定义在B的上方,要么在B定义前加一个A类的声明。如class A;原创 2023-10-16 19:09:44 · 2013 阅读 · 0 评论 -
【C++学习(9)】C++中String类对象的初始化和基本用法
链接:https://blog.csdn.net/Enoch_klb/article/details/105152211。转载 2023-10-16 18:27:01 · 152 阅读 · 0 评论 -
【C++学习(8)】类对象作为成员变量;以及类A中有指针变量,那么其作为类B的成员时,无法分配存储单元
一个类的成员变量如果是另一个类的对象,就称之为“成员对象”。包含成员对象的类叫封闭类(enclosed class)。转载 2023-10-16 18:26:44 · 290 阅读 · 0 评论 -
【cmake开发(12)】Cmake同时编译cpp文件和cu文件
如果CMake的版本小于3.10,可以在CMakeLists.txt文件中使用find_package来导入CUDA包,然后就可以使用cuda_add_executable()或者cuda_add_library()来编译CUDA可执行文件或者库文件了。其中变量CUDA_VERSION_STRING表示CUDA的版本号,CUDA_INCLUDE_DIRS表示CUDA头文件存放的目录,CUDA_LIBRARIES表示CUDA的库文件。可以通过CheckLanuage判断CUDA是否可用。转载 2023-09-27 11:00:32 · 1308 阅读 · 0 评论 -
【QT开发(6)】0926-QT 中加入 fastDDS 通信库的程序使用说明
在智能驾驶中,DDS有可能被广泛使用,因此推出这篇说明教程。原创 2023-09-26 12:42:00 · 1794 阅读 · 0 评论