- 博客(85)
- 资源 (8)
- 收藏
- 关注
原创 Kmalloc Vmalloc 与malloc 的区别
总的来说kmalloc和vmalloc是分配内核的内存,malloc分配的是用户空间的内存。 kmalloc 保证分配的内存在物理上是连续的,vmalloc保证的是在虚拟地址空间上的连续,malloc申请的内存不一定连续(用户空间存储以空间链表的方式组织(地址递增),每一个链表块包含一个长度、一个指向下一个链表块的指针以及一个指向自身的存储空间指针。) kmalloc能分配的大小有限,vmalloc与malloc能分配的空间大小相对较大。 内存只有在要被DMA访问的时候才需要物理上连续。 vma
2022-03-23 15:58:43
2931
原创 C++ vector的用法(整理)
vector 是向量类型,它可以容纳许多类型的数据,如若干个整数,所以称其为容器。vector 是C++ STL的一个重要成员,使用它时需要包含头文件:#include<vector>;一、vector 的初始化:可以有五种方式,举例说明如下: (1) vector<int> a(10); //定义了10个整型元素的向量(尖括号中为元素类型名,它可以是任何合法的数据类型),但没有给出初值,其值是不确定的。 (2)vector<int> a(10
2021-09-16 21:13:18
834
原创 c++ std::nothrow 对new 的处理
我们都知道,使用 malloc/calloc 等分配内存的函数时,一定要检查其返回值是否为“空指针”(亦即检查分配内存的操作是否成功),这是良好的编程习惯,也是编写可靠程序所必需的。但是,如果你简单地把这一招应用到 new 上,那可就不一定正确了。我经常看到类似这样的代码:int* p = new int[SIZE];if ( p == NULL ) // 检查 p 是否空指针 return -1;// 其它代码 其实,这里的 if ( p == NULL ) 完全是没啥意义的。...
2021-07-16 16:36:35
966
原创 进程间通信(IPC)介绍
一.为什么需要进程间通信1).数据传输一个进程需要将它的数据发送给另一个进程。2).资源共享多个进程之间共享同样的资源。3).通知事件一个进程需要向另一个或一组进程发送消息,通知它们发生了某种事件。4).进程控制有些进程希望完全控制另一个进程的执行(如Debug进程),该控制进程希望能够拦截另一个进程的所有操作,并能够及时知道它的状态改变。二.什么是进程间通信首先了解几个名词:1. 进程隔离 进程隔离是为保护操作系统中进程互不干扰而设计的一组不同硬...
2021-05-21 11:26:28
15636
5
原创 同一系统不同进程间的同步与互斥
1.函数原型:// 初始化互斥对象属性int pthread_mutexattr_init(pthread_mutexattr_t *attr);// 设置互斥锁范围int pthread_mutexattr_setpshared(pthread_mutexattr_t *mattr, int pshared);//获取互斥锁范围int pthread_mutexattr_getpshared(pthread_mutexattr_t *mattr, int *pshared);...
2021-05-14 14:57:41
385
转载 Android 底层的进程间同步机制
进程间通信的经典实现进程间通信(Inter-process communication,IPC)指运行在不同进程中的若干线程间的数据交换,可发生在一台机器上,也可通过网络跨机器实现。共享内存、管道、UNIX Domain Socket 和 RPC 因高效稳定的优点几乎被应用在所有操作系统中。共享内存共享内存是一种常用的进程间通信机制,不同进程可以直接共享访问同一块内存区域,避免了数据拷贝,速度较快。实现步骤如下:1. 创建内存共享区Linux 通过 shmget 方法创建与特定.
2021-04-27 16:16:45
538
原创 C++中map的用法
map的特性是,所有元素都会根据元素的减值自动被排序。map的所有元素都是pair,同时拥有实值(value)和键值(key)。pair的第一个元素会被视为键值,第二个元素会被视为实值。map不允许两个元素拥有相同的键值。下面看一下<stl_pair.h>中的pair定义:template <class T1, class T2>struct pair{ typedef T1 first_type; typedef T2 second_type; ...
2021-04-13 20:39:10
10598
原创 Opencv 下createTrackbar函数
在opencv膨胀的代码案例中,使用到了createTrackbar这个函数,先看一下API接口定义:CV_EXPORTS int createTrackbar(const string& trackbarname, const string& winname, int* value, int count, TrackbarCallback onChange = 0,
2021-04-09 21:38:24
951
1
原创 Win10 下利用VScode+MinGW+Opencv+Cmake构建C++的开发环境
在VScode上开发python是一件非常完美的事情,加上Win10的Powershell的终端环境,让你有一种在linux下开发的感觉,后面想开发一个C++的开发环境,在网上看了很多的教程,终于实现了,具体的操作过程这里不做过多的描述,看网上的教程就可以了,这里只备注一些要走注意的事项。1. MinGW的选择,不要直接下载,要选择posix-seh的版本下载,不要问为什么,编译opencv的时候你就知道了,直接下载的会报一系列错误。2. opencv的编译,使用以下方式最后选择编译成lib
2021-04-09 15:39:53
1191
原创 非管理员账号设置 Windows 10 环境变量
1. 运行命令 2. 在用户账号界面配置 3. 使用 SETX 命令这里主要说的是非管理员账号,如何设置自己的环境变量。在公司使用的电脑是没有管理员权限的,而作为一个开发人员难免有时候需要手动配置环境变量。经过实践大概有以下几种方式可行:1. 运行命令这种方式忘记以前是在哪看到的。即按 Win + R,打开运行,输入rundll32.exe sysdm.cpl,EditEnvironmentVariables,回车。便会弹出配置用户环境变量的界面。2. 在用户账号界面配置.
2021-04-08 21:06:46
8953
原创 python+opencv打开摄像头,保存视频、拍照功能的实现
python+opencv打开摄像头,保存视频、拍照功能的实现本节主要学习的是通过.VideoCapture()调用摄像头读取图像数据,以及使用cap.set( propId , value )cap.get( propId )获取或者更改视频属性。其中,propId 的值为 0 - 18,19个值并不是每个都可以进行修改,每个值对应的属性以及功能如下如下:参数 值 功能/意义 CV_CAP_PROP_POS_MSEC 0 视频文件的当前位..
2021-03-26 18:08:26
732
1
转载 python将txt文件转为excel格式
因业务需要,将txt文件转换为excel文件,代码考虑了健壮性,分享一下,代码如下:使用方法:sh txt2excel.sh file.txt[cl@master txt2excel]$ cat file.txtaaaabbbbccccddddeeee[cl@master txt2excel]$ cat txt2excel.sh#!/bin/bash sourceFile=$1 if [ -z $1 ]then echo "use: sh txt2excel
2021-03-25 09:27:52
2961
原创 V4L2摄像头驱动demo
// extra_camera.h#ifndef __ExtraCamera_H__#define __ExtraCamera_H__ #define CAMERA_WIDTH (1280)#define CAMERA_HEIGH (720)#undef TAG#define TAG "ExtraCamera debug ---"#define DEBUG_TAG "ExtraCamera debug --- "#define DEBUGPRINT(fmt, args..
2021-03-22 16:59:07
490
转载 40个姿态估计优秀开源项目汇总
来源丨AIRX社区编辑丨极市平台1、AlphaPose实时全身多人姿势估计与跟踪系统。它是第一个开源系统,在COCO数据集上达到70+ mAP(75 mAP),在MPII数据集上达到80+ mAP(82.1 mAP)。为了在帧中匹配与同一个人相对应的姿势,还提供了一种称为Pose Flow的高效在线姿势跟踪器。它是第一个在PoseTrack Challenge数据集上达到60+ mAP(66.5 mAP)和50+ MOTA(58.3 MOTA)的开源在线姿势跟踪器。AlphaPose支持Li
2021-03-20 14:23:00
2741
原创 V4L2驱动USB摄像头
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <assert.h>#include <getopt.h> #include <fcntl.h> #include <unistd.h>#include <errno.h>#include <malloc.h>.
2021-02-19 10:52:50
627
转载 图形几何变换
第一节 用户坐标到屏幕坐标变换1. 窗口到视口的变换2. 实型值到整型值的变换3. y坐标值方向变换4. 长宽比例变换第二节 二维几何变换一、 基本变换1、比例变换2. 对称变换3. 错切变换4. 旋转变换5. 平移变换二、复合变换1. 复合平移2. 复合比例3. 复合旋转4. 相对点(xo,yo)的比例变换5. 相对点(xo,yo)的旋转变换 从这一...
2020-08-18 14:28:41
2848
转载 OpenCV Mat结构的图片 旋转顺时针90度 180度 270度 逆时针90度
Mat matRotateClockWise90(Mat src){ if (src.empty()) { qDebug()<<"RorateMat src is empty!"; } // 矩阵转置 transpose(src, src); //0: 沿X轴翻转; >0: 沿Y轴翻转; <0: 沿X轴和Y轴翻转 flip(src, src, 1);// 翻转模式,flipCode == 0垂直翻转(沿X轴翻转),flipCode>0水平翻转(沿Y轴翻转).
2020-07-02 10:12:06
1790
原创 Linux IIC核心、总线与设备驱动
总线仅仅使用SCL、SDA这两根信号线就实现了设备之间的数据交互,极大地简化了对硬件资源和PCB版布线空间的占用。因此,总线非常广泛的使用在EEPROM、实时钟、小型LCD等与CPU的接口中。Linux系统定义了驱动体系结构。在Linux系统中,驱动由 3部分组成,即IIC核心、总线和设备驱动。这3部分相互协作,形成了非常通用、可适应性很强的框架。一、Linux 体系结构Linux的体系...
2020-04-15 09:23:53
410
原创 Linux网络设备驱动专题
网络设备驱动是完成用户数据包在网络媒介上发送和接收的设备,他将上层协议传递下来的数据包已特定的媒介访问控制方式发送,并将接收到的数据包传递给上层协议。Linux系统对网络设备驱动定义了4个层次,分别为:网络协议接口层、网络设备接口层、提供实际功能的设备驱动层和网络设备与媒介层。1)网络协议接口层 向网络层协议提供统一的数据包收发接口,不论上层协议是ARP,还是IP,都通过dev_queue...
2020-04-13 16:31:16
1029
转载 把当前ubuntu系统做成镜像
Systemback是一个Ubuntu系统中用于发布自定义系统镜像和系统备份的软件。有时候我们对自己的Ubuntu做了很多设置,比如各种软件包,各种自定义的配置。我们想要在另一台电脑上也安装一个和我们一模一样的系统,这个时候就会用到这种方法了。这个方法不仅可以用于发布系统,也可以用来作为系统备份使用。下面就具体介绍一下这个软件的安装和使用方法安装 sudo add-apt-...
2020-03-28 16:53:20
2475
原创 Linux 下 platform 设备驱动
在Linux2.6 以后的设备驱动模型中,需要关心总线、设备和驱动3个实体,总线将设备和驱动绑定。在系统每注册一个设备的时候,会寻找与之匹配的驱动;相反 ,在系统每注册一个驱动的时候,会寻找与之匹配的设备,而匹配由总线完成。一个现实的Linux 设备和驱动通常都需要挂接在一种总线上,对于本身依附于PCI、USB、I2C、SPI等的设备而言,这自然不是问题,但是在嵌入式系统里面,在SoC系统中...
2020-03-20 09:14:36
455
原创 Linux中断处理程序框架
设备的中断会打断内核进程的正常调度和运行,系统对更高吞吐率的追求势必要求中断服务程序尽量短小精悍。但是,这个良好的愿望往往与现实不吻合。在多数真实的系统中,当中断到来时,要完成的工作往往并不是短小的,它可能要进行大量的耗时处理。为了在中断执行时间尽量短和中断处理需完成的工作尽量大之间找到一个平衡点,Linux将中断处理程序分解为两个部分:顶半部(Top Half) 和底半部(Botton Half...
2020-03-16 13:11:50
538
原创 设备驱动中的异步通知与异步I/O
在设备驱动中使用异步通知可以使得再进行对设备的访问时,由驱动主动通知用户程序进行访问。这样,使用非阻塞I/O的应用程序无需轮询机制查询设备是否可访问,而阻塞访问也可以被类似“中断”的异步通知所取代。除了异步通知以为,应用还可以在发起I/O请求后,立即返回。之后,在查询I/O完成情况,或者I/O完成后被返回。这个过程为异步I/O。阻塞与非阻塞访问、poll函数提供了较好的解决设备访问机制,但是如...
2020-03-12 17:56:09
325
原创 设备驱动中的阻塞与非阻塞IO
阻塞和非阻塞I/O是设备访问的两种不同的模式,驱动程序可以灵活地支持这两种用户空间对设备的访问方式。在Linux设备驱动下,可以使用等待队列或轮询操作实现对I/O的阻塞和非阻塞访问。阻塞操作是指在执行设备操作时,若不能获取资源,则挂起进程直到满足克操作的条件后在进行操作。被挂起的进程进入睡眠状态,被从调度器的运行队列移走,直到等待条件满足。而非阻塞操作的进程不能进行设备操作时,并不挂起,它要么...
2020-03-10 16:45:43
715
原创 linux设备驱动中的并发控制
并发指的是多个执行单元同时、并行被执行,而并发的执行单元对共享资源(硬件资源和软件上的全局变量,静态变量等)的访问很容易导致竞态。在linux内核中,竞态发生主要有以下几种情况:对称多处理器(SMP)的多个CPU之间 单CPU内核进程与抢占他的进程 中断(硬中断、软终端、Tasklet、底半部)与进程之间解决竞态问题的途径是保证对共享资源的互斥访问,所谓互斥访问是指一个执行单元在访问共享...
2020-03-09 15:34:27
208
原创 简单字符设备程序
Linux下的驱动有字符设备驱动,块设备驱动和网络设备驱动。无论哪一种设备驱动,为了减少内核的体积和易于内核的管理,驱动多以模块的形式出现。对于内核模块的编程,前面一节已经提到过,主要包括内核的加载函数和卸载函数,模块的作者和GPL协议。对于简单的字符设备驱动而言,其实编写流程很简单,只要记住这个流程,就可以快速的写一个简单的字符设备驱动玩了。其流程主要有:内核模块的加载和卸载 添加并实...
2020-03-06 14:45:40
242
转载 ROS笔记之Gazebo插件
在Gazebo仿真中常需要在URDF文件中添加相关标签来来仿真机器人的传感器、执行器的特性。现将常用插件总结如下(使用时根据自己情况对参数进行修改):1.运动控制1.1.差速驱动插件<gazebo> <plugin name="differential_drive_controller" filename="libgazebo_ros_diff_drive...
2020-01-08 23:31:42
1299
原创 机器人的惯性、视觉、碰撞特征计算与表示
在URDF中,机器人模型由连接件(link)和连接件的关节(joint)、传感器(sensor)传动件(transmission)等部件组成。1.连接件在urdf支持连接件的标签为link,link标签用于描述具有惯性和视觉特征的刚体,也即机器人的物理部件。link标签通过name属性描述连接件的名称。link标签可包含inertial(惯性特征),visual(视觉特征),collisio...
2020-01-07 23:00:18
1676
原创 teb_local_planner配置解析
话题发表的话题〜<名称> / global_plan(nav_msgs / Path)本地计划者当前正在尝试的全局计划。主要用于可视化目的。〜<名称> / local_plan(nav_msgs / Path)teb_local_planner优化并遵循的本地计划或轨迹。主要用于可视化目的。〜<名称> / teb_poses(geometry...
2020-01-03 14:19:47
4501
原创 位置式、增量式PID算法C语言实现
概述PID 算法是一种工控领域常见的控制算法,用于闭环反馈控制。有以下两种分类: 增量式 每次周期性计算出的 PID 为增量值,是在上一次控制量的基础上进行的调整。 位置式 每次周期性计算出的 PID 为绝对的数值,是执行机构实际的位置。 我们使用高级语言的思想去实现两种 PID ,做到对于用户来说,调用相同的接口,内部实现不同的 PID 算法。代码pid....
2019-12-26 20:56:22
686
原创 简单内核模块编译
一般而言,驱动开发者会在内核源代码的drivers 目录内的相应子目录中增加新设备驱动 的源代码或者在arch/arm/mach-xxx 下新增加板级支持的代码,同时增加或修改Kconfig 配置 脚本和 Makefile 脚本,那么如何添加了?在前面搭建了arm虚拟开发板,使用的内核是3.16的版本。内核代码的编写都有一般的固定格式,基本包括模块加载,卸载和GPL协议等,下面是一个简单的内核...
2019-12-19 17:23:36
376
原创 ROS 下使用python自定义变量msg
这里,假设我们的包名叫做stdr_nav.我们写自己的msg文件在该包的msg文件夹下。header.msgint8 datatalker.py文件如下:#!/usr/bin/env pythonimport rospy#from后边是自己的包.msg,也就是自己包的msg文件夹下,test是我的msg文件名test.msgfrom stdr_nav.msg impor...
2019-12-16 17:11:48
1400
2
MinGW_opencv+opencv_contrib_3.4.1.zip
2021-04-12
Win10_Vscode_Cmake_MinGW_OPencv.zip
2021-04-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人