自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(63)
  • 资源 (3)
  • 问答 (1)
  • 收藏
  • 关注

转载 ssh 配置免密码和别名登录

免密登录首先,说明一下我们要做的是,serverA 服务器的 usera 用户免密码登录 serverB 服务器的 userb用户。我们先使用usera 登录 serverA 服务器[root@serverA ~]# su - usera[usera@serverA ~]$ pwd/home/usera然后在serverA上生成密钥对[usera@serverA ~]$ ssh-keygen -t rsaGenerating public/private rsa key pair.Ent

2020-12-31 00:10:03 31

原创 C++ 谓词函数

待补充

2020-12-27 23:04:59 36

原创 C++ 仿函数or函数对象

文章目录1、概念2、实际应用1、概念重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象,也叫仿函数(functor),其实就是重载“()”操作符,使得类对象可以像函数那样调用。注意:1.函数对象(仿函数)是一个类,不是一个函数。2.函数对象(仿函数)重载了”() ”操作符使得它可以像函数一样调用。假定某个类有一个重载的 operator(),而且重载的 operator()要求获取一个参数,我们就将这个类称为“一元仿函数”(unary

2020-12-27 22:31:09 47

原创 java.lang.*不用我们导入,编译器会自动给我们导入的,这个包是默认导入的。

java.lang.*不用我们导入,编译器会自动给我们导入的,,,这个包是默认导入的。所以我们可以直接使用String。

2020-12-27 19:09:20 168

原创 IDEA环境gradle项目目录结构介绍

.gradlegradle执行信息.idea存放项目的配置信息。这个文件夹是自动生成,版本控制信息等,包括历史记录build项目输出路径,包括编译后的.class文件(classes文件夹下),资源文件(resourcer文件夹下)src项目源码,包含程序源码和测试源码build.gradle当前module的gradle配置文件.settings.gradle针对module的全局配置,它的作用域所包含的所有module是通过settings.gradle来配置...

2020-12-27 14:38:21 204

原创 C++ 保护继承的用途

待写

2020-12-27 11:57:20 38

原创 C++ 纯虚析构函数见过吗

effective c++这本书告诫我们,使用多态时,务必要把父类的析构函数声明为虚函数。换句话就是,只要父类中有一个虚函数,那么父类的析构函数就必须声明为虚函数。原因很简单,当析构指向子类对象的父类指针或者引用时,才能正确地调用到子类的析构函数,而非父类的析构函数。这个很好理解,不要把析构函数看得很特殊,它也是普通函数。那么什么是纯虚析构函数呢?大家可能有个误区,纯虚函数不能有实现,因为我们没看过纯虚函数有过函数体。事实上,纯虚函数可以有默认实现。普通的成员函数,如果声明为纯虚函数,那么该类就无法

2020-12-27 11:53:31 42

原创 UAVCAN教程(9)实现节点间时间同步

时间同步从机:#include <iostream>#include <cstdio>#include <unistd.h>#include <uavcan/uavcan.hpp>/* * Implementations for the standard application-level functions are located in uavcan/protocol/. * The same path also contains the s

2020-12-21 00:32:53 661

原创 UAVCAN教程(8)定时器使用

#include <iostream>#include <unistd.h>#include <uavcan/uavcan.hpp>extern uavcan::ICanDriver& getCanDriver();extern uavcan::ISystemClock& getSystemClock();constexpr unsigned NodeMemoryPoolSize = 16384;typedef uavcan::Node&l

2020-12-21 00:11:11 666

原创 UAVCAN教程(7)uavcan定义的扩展数据类型

uavcan定义了许多扩展数据类型,比如一些国际单位的物理量和一些应用程序常用的类型(时间戳、数组类型、Node节点相关数据类型、文件等)。这里我们只挑几个常用的来介绍,具体的查看官网。1、国际单位物理量国际单位物理量如温度、压力等,都定义在uavcan.si.unit命名空间下,下面的温度以国际单位开尔文作为单位,而非我们日常使用的摄氏度。以国际单位作为单位制的好处在于实现各平台的统一,如果我们要使用物理量,最好使用uavcan提供的标准数据类型,没有提供才自己去定义。2、时间戳类型3、数组类

2020-12-20 21:56:26 731

原创 UAVCAN教程(6)写一个简单的服务/响应程序

server#include <cstdio>#include <iostream>#include <unistd.h>#include <uavcan/uavcan.hpp>/* * This example uses the service type uavcan.protocol.file.BeginFirmwareUpdate. */#include <uavcan/protocol/file/BeginFirmwareUpd

2020-12-20 15:32:00 651 1

原创 python 3.8.1 百度网盘下载

官网的下载速度太慢了,所以给大家提供一个百度网盘下载地址:链接:https://pan.baidu.com/s/17r7r2Gq1hnTD74Bywdyg-w提取码:jjc1

2020-12-20 12:39:01 280 3

原创 UAVCAN教程(5)定义自己的数据类型

前面的例子使用了libuavcan自带的数据类型,这一节介绍如何定义自己的数据类型。libuavcan采用DSDL(数据结构化描述语言)来描述通信数据格式。接触过DSDL的同学应该很容易上手,首先我们得写一个协议格式描述文件,通常以.uavcan作为后缀名,示例如下:## This service accepts nothing and returns the current time on the server node.## All DSDL definitions should contai

2020-12-20 10:37:45 731 1

原创 UAVCAN教程(4)发布订阅实现

讲一下libuavcan如何通过发布订阅模式实现进程通信。发布者对应uavcan::Publisher类,这是一个模板类,模板参数指定要发布的数据类型。发布者广播消息,在这里例子里消息类型是uavcan.protocol.debug.KeyValue。发布者进程:#include <iostream>#include <cstdlib>#include <unistd.h>#include <uavcan/uavcan.hpp>/* * W

2020-12-19 21:32:39 794 2

原创 UAVCAN教程(3)最基本的程序框架--单线程示例

关于Node的内存管理请参见前面文章。整个库跑在一个线程内,循环主体的实现:for (;;){ const int error = node.spin(uavcan::MonotonicDuration::fromMSec(100)); if (error < 0) { std::cerr << "Transient error: " << error << std::endl; // Handle the transi

2020-12-19 20:02:19 709 2

原创 UAVCAN教程(2)uavcan::Node节点的内存管理

节点uavcan::Node是所有API的基础,它是一个模板类。文章目录内存管理1、动态内存1.1 内存总量计算1.2 内存获取1.3 定制内存分配器2、栈内存内存管理1、动态内存libuavcan不直接使用堆分配内存,而是一次性分配一片内存作为内存池来使用,需要我们在创建Node对象时,传入一个表示内存池大小的模板参数,libuavcan会自己基于这片内存池维护内存块的分配和释放。如果我们没有指定模板参数,则要给Node节点的构造函数传入一个我们自定义的分配器的引用,这将在后面讨论。1.1 内存

2020-12-19 19:29:16 730 1

原创 UAVCAN教程(1)UAVCAN介绍

开源轻量级,为太空宇宙飞船或者是机器人设计的通信框架。特性:对等网络,不需要bus master支持发布/订阅、请求/响应两种数据交换方式支持高精度的网络范围的时间同步可以使用不同的传输协议目前有三种语言的实现:Libuavcan...

2020-12-18 23:30:21 1062 1

原创 C++ primer里提到的顶层const和底层const

文章目录1、区分顶层const和底层const2、 区分顶层const和底层const的作用1、区分顶层const和底层const个人觉得引入这个概念使得理解变得晦涩和复杂,C里头没有这个概念。可以简单的认为,声明或者定义的对象(指针也是对象),如果对象本身是const的,那么就是顶层const;而底层const表示指针或者引用所指的对象是一个常量。在C语言里的叫法分别是指针常量和常量指针。(1) const int i=1;//i本身是const,顶层(2) const int* p=&amp

2020-12-18 00:53:48 40

原创 C++11中为什么auto类型说明符会忽略顶层const

假如某个函数返回类型 const T,形如:const T SomeFunction();你很可能希望有一个可变的变量接收这个值:auto t = SomeFunction();t.Modify();反过来,你也有时会希望把一个可变的值变成const引用vector<T> container;for (const auto& t : container)…所以最顶层那个const经常会根据需要变化。如果没有这个feature会不那么方便。...

2020-12-18 00:28:05 6498

原创 ssh登录或者scp传文件给远程主机起别名

在$HOME/.ssh目录下创建一个config文件(如果文件存在,则直接编辑)[root@frankie .ssh]# vi config加入内容Host testHostname 192.168.70.131重启network服务[root@frankie .ssh]# service networking restart

2020-12-17 16:20:58 6226

原创 C++编译错误收集

文章目录1、`error: ‘shared_ptr’ in namespace ‘std’ does not name a type`1、error: ‘shared_ptr’ in namespace ‘std’ does not name a type用G++编译项目的时候发生标题上的错误,原因是,这是c++ 11标准的。在给g++传递命令行的时候加上–std=c++11就行了。还需要在源码中#include<memory>我的cmakelists里面要这样改:set(CMAKE_

2020-12-16 18:49:40 475

原创 yamlcpp嵌套对象解析实例

对于对象的解析,网上的例子非常多,但对于嵌套对象的解析,则几乎没有。非嵌套对象:MESSGAE1: priority: 0 loop_time_ms: 2000MESSGAE2: priority: 100 loop_time_ms: 2000嵌套对象的文件实例如下:STATE: MESSGAE1: priority: 10 loop_time_ms: 2000 MESSGAE2: priority: 100 loop_time_ms:

2020-12-13 22:17:29 107 1

原创 最新版本虚拟机用起来VMware Workstation16 pro

下载地址:https://www.vmware.com/cn/products/workstation-pro/workstation-pro-evaluation.html

2020-12-12 21:32:24 740

转载 shell expect脚本使用ssh遍历配置文件进行远程登录执行命令

参数说明:set:可以设置超时,也可以设置变量timeout:expect超时等待时间,默认10Sspawn:执行一个命令expect “”:匹配输出的内容exp_continue:继续执行下面匹配\r:可以理解为回车$argc:统计位置参数数量[lindex argv0]:脚本后第一个参数,类似于shell中argv0]:脚本后第一个参数,类似于shell中1,以此类推puts:打印字符串,类似于echoawk -v I="$ip":赋值变量expect{…}:输入多行记录其他

2020-12-12 14:44:30 80

原创 Gerrit资料收集,备忘

关于code review工具 Gerrit 介绍与安装:https://www.cnblogs.com/chenpingzhao/p/9337117.html关于gerrit在linux上的安装最新步骤:https://gerrit-review.googlesource.com/Documentation/linux-quickstart.html

2020-12-12 00:12:03 39

原创 git 面向工作Tips1:基本代码提交流程以及合并冲突解决

git平常开发总体流程git pull origin master 更新本地代码git checkout -b change_site 创建工作分支,接下来开发就在这个分支写代码git add .git commit -m “fix bug” 这两句提交代码到工作分支git checkout master 切回主分支git merge 合并工作分支代码,可

2020-12-11 11:35:00 37

原创 C++11 多线程-条件变量(std::condition_variable)

ffaf

2020-12-10 19:07:53 38

原创 git面向工作Tips3:repo管理下的基本代码提交流程

1、开始一个新的工作分支,topic_name是自己指定的分支名,表示本次开发需要解决什么bug或者开发什么需求。repo start topic_name2、写代码3、git add .添加当前目录下的仓库下的所有改动到暂存区4、git commit -m “提交日志”提交修改到本地仓库5、git commit --amend修改上次的提交日志。或者有代码遗漏了没有提交,则:git add .git commit --amend6、repo upload .上传当前目录下的仓库

2020-12-09 23:29:44 41

转载 git面向工作Tips 2:commit之后,想撤销commit

写完代码后,我们一般这样git add . //添加所有文件git commit -m "本功能全部完成"执行完commit后,想撤回commit,怎么办?这样凉拌:git reset --soft HEAD^这样就成功的撤销了你的commit注意,仅仅是撤回commit操作,您写的代码仍然保留。说一下个人理解:HEAD^的意思是上一个版本,也可以写成HEAD~1如果你进行了2次commit,想都撤回,可以使用HEAD~2至于这几个参数:–mixed意思是:不删除工作空间改动代码

2020-12-08 23:17:33 54

原创 利用git rebase解决冲突备忘

repo sync . -dgit checkout -b xxxgit checkout support_beepergit rebase xxx

2020-12-08 20:54:16 31

转载 C++ 命名空间,也有叫名称空间

在C++中,名称(name)可以是符号常量、变量、宏、函数、结构、枚举、类和对象等等。为了避免在大规模程序设计中,以及在程序员使用各种各样的C++库时,这些标识符的命名发生冲突,标准C++引入了关键字namespace(命名空间/名字空间/名称空间/名域),可以更好地控制标识符的作用域。std是c++标准命名空间,c++标准程序库中的所有标识符都被定义在std中,比如标准库中的类iostream、vector等都定义在该命名空间中,使用时要加上using声明(using namespace std)

2020-12-06 23:10:29 6205 1

转载 C++ 文件读写操作文件流

到目前为止,我们已经使用了 iostream 标准库,它提供了 cin 和 cout 方法分别用于从标准输入读取流和向标准输出写入流。本教程介绍如何从文件读取流和向文件写入流。这就需要用到 C++ 中另一个标准库 fstream,它定义了三个新的数据类型:数据类型描述ofstream该数据类型表示输出文件流,用于创建文件并向文件写入信息。ifstream该数据类型表示输入文件流,用于从文件读取信息。fstream该数据类型通常表示文件流,且同时具有 ofstream

2020-12-06 21:55:33 217

原创 C++ 多种定义的getline函数使用

getline()函数是一个比较常见的函数。根据名字直接望文生义,就知道这个函数是来完成读入一行数据。下面就对C++ – getline()函数的用法说明,以及getline()函数作为while条件的问题,总结一下:在C++中本质上有两种getline函数:第一种:在头文件中,是iostream类的成员函数。第二种:在头文件中,是普通函数。///////////////////////////////////////////////////////////////////////////////

2020-12-06 21:50:09 6199

原创 C++ 类静态成员函数

。。。

2020-12-06 18:25:14 6732

原创 C++ 类的静态成员变量

有些时候,我们需要一些类成员与类本身直接相关。而不是与类的各个对象保持关联。我们每创建一个类对象,类成员变量就会多出一份,各个对象间的成员变量不能共享,是各自独立的变量。但是,我们有些时候需要定义一个成员变量,使其在各个类对象之间关联起来。当这个变量发生改变时,所有对象中都能使用新值。思路:能在所有对象中共用的,也就是声明周期是整个程序运行期,存放在静态存储区的。那么能实现功能的就只有:全局变量和静态成员变量了。从安全性的角度来看,静态成员变量会更加适用。规则静态成员变量属于整个类所有因为

2020-12-06 18:23:43 6291

原创 C++11 override关键字防止未重写虚函数或者未正确重写

。。

2020-12-06 17:51:21 6503

转载 C++ 论公有继承时纯虚函数、虚函数、普通函数的行为表现及虚函数的重写(深度好文)

文章目录1 公有继承时三种类型的函数行为1.1 纯虚函数 (pure virtual)1.2 普通虚函数**1.2.1 方法一****1.2.2 方法二**1.3 非虚函数2 重写 (override)小结1 公有继承时三种类型的函数行为公有继承包含两部分:一是 “函数接口” (interface),二是 “函数实现” (implementation)。为何这里只谈公有继承,因为私有继承没办法被继承啊,而保护继承虽然说可以,但是类外无法访问啊,所以只有公有继承可以实现接口继承。如 Shape 类中,

2020-12-06 17:02:52 6416

原创 C++11 std::mutex使用以及std::lock_guard自动解锁避免忘记解锁

std::mutex头文件是<mutex>,mutex是用来保证线程同步的,防止不同的线程同时操作同一个共享数据。使用比较简单,定义之后,调用加锁解锁函数即可。std::mutex m;m.lock();//被保护的操作m_unlock();int cnt = 20;mutex m;void t1(){ while (cnt > 0) { m.lock(); if (cnt > 0)

2020-12-06 15:53:17 7112

原创 C++11 std::thread的使用注意事项

文章目录A. `std::thread`不可复制B. `std::thread`在栈内创建后,需要在同一个作用域内调用`join()` 或者 `detach()`, 否则退出作用域后,程序会异常退出, 具体原因如下:C. 调用new 创建的std::thread, 禁止直接使用delete, 需要在调用delete之前,调用 join()或者 detach()A. std::thread不可复制比如以下代码:void task1(); //具体实现这里忽略int main(int argc, cha

2020-12-06 15:13:09 6153

原创 C++11 move移动语义

。。

2020-12-06 14:11:33 65

HI3519AV100最新SDK smaple

海思最新SDK 程序 版本V2.0.1.0 最新

2019-03-29

v4l2读取摄像头

v4l2读取摄像头,能在linux下编译,生成yuv文件,可以指定文件帧数

2018-01-30

RTP协议在嵌入式网络摄像机中的设计及实现.pdf

rtp,网络摄像头开发,描述了rtp推流,h264编码,v4l2视频流获取

2018-04-27

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除