自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(125)
  • 收藏
  • 关注

原创 C++学习第二十五天(函数对象即仿函数)

函数对象在使用时,可以像普通函数那样调用,可以有参数,可以有返回值;函数对象超出普通函数的概念,函数对象可以有自己的状态;函数对象可以作为参数传递。

2023-07-21 21:28:36 133

原创 C++学习第二十四天(map容器)

map和multimap的区别:map不允许容器中有重复的key值,multimap允许。本质:map/multimap属于关联式容器,底层结构是用二叉树实现。优点:可以根据key值快速找到value值。map容器插入和删除。map容器查找和统计。

2023-07-18 18:54:05 202

原创 C++学习第二十三天(set/multiset容器)

set大小和交换:set容器没有resize接口,因为他允许有重复的元素,如果重置大小,则默认用0补齐是不成立的。本质:set/multiset容器属于关联式容器,底层结构是用二叉树实现的。区别:set不允许容器中有重复的元素;multiset允许有重复的元素。pair对组即成对出现的数据,利用对组可以返回两个数据。set容器排序:主要利用仿函数,改变排序规则。基本概念:所有元素都会在插入时自动排序。set容器排序,存放自定义类型。

2023-07-14 17:46:21 201

原创 C++学习第二十三天(stack、queue、list容器)

且有一个重要的性质,插入和删除操作都不会造成原有list迭代器失效,这在vector容器中是不成立的,因为如果插入数据太多,vector容器会找一个新的地址空间将数据存放进去。stl中的链表是一个双向循环链表(一个指针域有两个指针一个指向前一个结点的地址另一个指向后一个结点的地址,且第一个结点和最后一个结点是连通的)。list容器不支持下标访问([])和跳跃式访问(at),原因是因为list本质是链表,不是用连续线性空间存储数据,迭代器也不支持随即访问的。默认构造函数:stack stc;

2023-07-13 20:51:31 178

原创 C++学习第二十二天(deque容器及案例)

deque容器大小操作。deque容器数据存取。deque容器的删除。

2023-07-11 20:34:14 111

原创 C++学习第二十一天(vector容器)

vector容器的构造示例。

2023-07-11 15:00:08 83

原创 C++学习第二十天(初识STL之容器)

string的比较:主要用于比较两个字符串是否相等。容器、算法、迭代器件、仿函数、适配器、空间适配器。2.1 vector存放自定义数据类型。string的赋值方式:示例。string字符串拼接:示例。string字符插入和删除。string查找和替换。1.1STL六大组件。string字符存取。

2023-07-10 20:16:40 155

原创 C++学习第十九天(类模板)

hpp文件(实际就是将.cpp和.h文件和在一起)

2023-07-09 16:46:53 96

原创 C++学习第十八天(函数模板)

利用函数模板封装一个排序的函数,可以对不同数据类型进行排序(算法为选者排序)从大到小排序,分别利用char数组和int数组进行测试。总结:既然提供了函数模板,就不要提供普通函数,以免出现二重性。学习模板并不是为了写模板,而是在STL能够运用系统提供的模板。·函数模板调用时,如果利用自动类型推导,不会发生隐士类型转换。额外话:利用具体化的模板,可以解决自定义类型的通用化;·如果函数模板和普通函数都可以实现,优先调用普通函数。·如果函数模板可以产生更好的匹配,优先调用函数模板。·函数模板也可以发送重载。

2023-07-08 22:02:10 223

原创 C++学习第十六天(友元函数)

【代码】C++学习第十六天(友元函数)

2023-07-04 21:44:50 37

原创 C++学习第十五天类和对象之对象特性

C++空指针也是可以调用成员函数的,但是也要注意到有没有用到this指针;·成员属性声明时加上关键字mutable后,在常函数中就可以修改了。如果用到this指针,需要加以判断保证代码的健壮性。·成员函数后加const后我们称这个函数为常函数。2.const修饰成员函数。·常函数不可以修改成员属性。1.空指针访问成员函数。·常对象只能调用常函数。

2023-07-02 21:11:05 106

原创 ros文件架构

WorkSpace --- 自定义的工作空间 |--- build:编译空间,用于存放CMake和catkin的缓存信息、配置信息和其他中间文件。 |--- devel:开发空间,用于存放编译后生成的目标文件,包括头文件、动态&静态链接库、可执行文件等。 |--- src: 源码 |-- package:功能包(ROS基本单元)包含多个节点、库与配置文件,包名所有字母小写,只能由字母、数字与下划线组成 |-- CMakeLi.

2021-12-16 16:37:41 316

原创 在运行ros的Python文件时报找不到路径

1.第一行解释器声明,可以使用绝对路径定位到 python3 的安装路径 #! /usr/bin/python3,但是不建议2.建议使用 #!/usr/bin/env python 但是会抛出异常 : /usr/bin/env: “python”: 没有那个文件或目录3.解决1: #!/usr/bin/env python3 直接使用 python3 但存在问题: 不兼容之前的 ROS 相关 python 实现4.解决2: 创建一个链接符号到 python 命令:sudo ln -s /usr/bin

2021-12-16 16:14:39 1262

原创 px4无人机常识介绍(固件,px4等)

新手入门专业名词解释aircraft:任何可以飞或者可以携带物品还是搭载旅客的飞行器统称为飞机(航空器).uav:无人驾驶飞机vehicle:飞行器airplane/plane/aero-plane :有机翼和一个或多个引擎的飞行器统称为飞机Drone:无人航空器,典型的有四旋翼,六旋翼,飞机模型,固定翼,垂起,直升机模型aerial:空中的,从飞机上的.四旋翼(Quadcopter) :无人驾驶飞行器,一般带有四个螺旋桨和一个电子稳定系统多旋翼:无人驾驶飞行器,带有一个电子稳定系统和螺旋

2021-10-28 20:08:14 2493

原创 ros之服务通信

服务通信简介:服务通信也是ROS中一种极其常用的通信模式,服务通信是基于请求响应模式的,是一种应答机制。也即: 一个节点A向另一个节点B发送请求,B接收处理请求并产生响应结果返回给A。比如如下场景:机器人巡逻过程中,控制系统分析传感器数据发现可疑物体或人… 此时需要拍摄照片并留存。在上述场景中,就使用到了服务通信。一个节点需要向相机节点发送拍照请求,相机节点处理请求,并返回处理结果与上述应用类似的,服务通信更适用于对时时性有要求、具有一定逻辑处理的应用场景。一、服务通信理论模型服务通信较之于话

2021-10-23 14:34:10 501

原创 ros之话题通信

1.简单的发布方框架#include "ros/ros.h"#include "std_msgs/String.h"/* 发布方实现 1.包含头文件 ros中的文本类型对应---->"std_msgs/string.h" 2.初始化ros节点(创建二狗子对象) 3.创建节点句柄 4.创建发布者对象 5.编写发布逻辑并发布数据*/int main(int argc, char *ar

2021-10-23 13:59:45 420

原创 ubuntu20.04安装arduino IDE(亲测可用)

步骤一:在官网下载arduino安装包选择相应的版本下载链接步骤二:解压下载的安装包在相应的目录下执行下面语句tar -xvf 安装包名步骤三:将解压后的安装包移动到/opt目录下sudo mv 解压过后的包名 /opt步骤四:进入/opt/arduino…包下给安装脚本赋予可执行权限suao chmod +x install.sh步骤五:执行安装脚本sudo ./install.sh到此安装完毕,可以打开终端输入arduino执行arduino IDE....

2021-10-12 14:55:58 2493 2

原创 C++学习第十四天(类和对象,对象模型和this指针)

1.成员变量和成员函数分开存储#include <iostream>using namespace std;//成员变量和成员函数是分开存储的class Person{ int m_a;//非静态成员变量 属于类的的对象 static int m_b;//静态成员变量(类内定义类外声明) 不属于类对象上 void func() {}//非静态成员函数,不属于类对象上 static void func2() {}//静态成员函数,不属于类的对象上};int Person::

2021-10-08 22:55:34 99

原创 C++学习第十三天(类和对象,对象的初始化和清理)

1.对象的初始化(构造函数)和清理(析构函数)(1)构造函数:主要作用用于创建对象时为对象的成员属性赋值,构造函数由编译器自动调用。(2)析构函数:主要作用在于对对象销毁前系统自动调用,执行一些清理工作。注意:对象的初始化和清理工作是编译器强制我们要做的事情,因此如果我们不提供这两个函数,编译器会提供编译器的这两个函数是空实现。2.这两个函数的用法(1)构造函数语法:类名(){}a.构造函数没有返回值也不写voidb.函数名与类名相同c.构造函数可以有参数,因此可以发生重载d.程序在调用对

2021-09-18 21:26:04 100

原创 工厂模式的案例

1.设计模式概念的引入设计模式2.c语言结构体的大多数用法#include <stdio.h>#include <stdlib.h>struct animal{ char name[128]; int age; int sex; void (*eat)(); void (*beat)();};void dogEat(){ printf("狗吃是\n");}void

2021-09-15 13:53:32 105

原创 树莓派引脚驱动编写(2)

1.续上篇文章的代码测试过后这节真正来验证是否驱动成功(1)首先改写驱动代码(在linux源码树目录的/driver/char下)注意:在编译之前可以先备份以下#include <linux/fs.h> //file_operations声明#include <linux/module.h> //module_init module_exit声明#include <linux/init.h> //

2021-09-13 22:42:59 143

原创 树莓派Linux源码配置和编译

树莓派等芯片带操作系统的启动过程 C51,STM32(裸机)》》》》》》C直接操控底层寄存器实现相关业务。 业务流程型的裸机代码 遥控灯: while(1) 垃圾桶:WemosD1 LOOP 恩智浦智能车: stm32 X86,Intel windows 启动过程: 电源 -》 BIOS -》windows内核-》C,D盘-》 程序启动(QQ) 嵌入式产品: 树莓派,mini2440, mini6410,nanopi,海思,RK(瑞芯微)----..

2021-09-12 22:54:09 405

原创 树莓派驱动pin4引脚驱动的编写(1)

1.Linux一切皆文件(鼠标、键盘、led、屏幕、网卡等这些设备都是以文件的形式存在/dev下面)2.如何查找驱动(1.通过文件名,2.通过设备号(主设备号和次设备号))3.驱动链表:管理所有设备的驱动(添加和调用),编写完驱动程序加载到内核,调用驱动程序用户空间去open,驱动插入链表的顺序由设备号检索。4.驱动代码编写步骤...

2021-09-12 22:41:16 406

原创 linux静态库与动态库

Linux库概念及相关编程(面试重点)1.分文件编程案例好处:分模块的编程思想网络 a超声波b电机ca.功能责任划分b.方便调试c.主程序简洁2.库https://www.cnblogs.com/sunsky303/p/7731911.htmlhttps://blog.csdn.net/wk_bjut_edu_cn/article/details/81735956a)静态库静态函数库,是在程序执行前(编译)就加入到目标程序中去了 ;优点: 运行快发布程序无需提供静态库,因为已

2021-09-10 17:31:42 74

原创 socket网络编程

1.linux网络编程框架1网络是分层的(1)oSI7层模型32(2)网络为什么要分层(3)网络分层的具体表现1.1TCP / IP 协议引入(1) TCP / IP 协议是用的最多的网络协议实现(2) TCP / IP 分为4层,对应 OSI 的7层(3)我们编程时最关注应用层,了解传输层,网际互联层和网络接入层不用管1.2BS 和 Cs(1) cs 架构介绍( broswer(2 Cs 架构介绍( broSwer )2.关于 TCP 理解的重点(1)TCP 协议工作在传输层,对上

2021-09-08 23:18:41 136

原创 c语言之贪吃蛇(ncurse库)

1.关于ncurse库(1)如果没有ncurse这个库先安装ncurse库sudo apt install libncurses5-dev(2)在编译时后面加上 -lcurses(3)测试代码#include <curses.h>int main(){ char c; initscr();//ncurse界面的初始化函数 printw("this is curses window.\n");//在ncurse模式下的printf

2021-09-07 22:24:53 498

原创 学习C++的第十二天(封装)

1.什么是封装封装是C++面向对象三大特征之一2.封装的意义将属性和行为作为一个整体,表现生活中的事物将属性和行为加以权限控制3.封装的语法class 类名(访问权限:属性 / 行为)4.示例设计一个园类,求元的周长#include <iostream>using namespace std;//圆周率const double PI = 3.14;//设计一个圆类,球员的周长class Circle{ //访问权限 //公共权限public: //属性(

2021-09-03 00:47:57 91

原创 linux网络通信基础知识

1.网络通信的层次(1)硬件部分:网卡(2)操作系统底层:网卡驱动(3)操作系统API:socket接口(4)应用层:低级(基于socket接口编程)(5)应用层:高级(基于网络通信应用框架库)(6)应用层:更高级(http、网络控件等)2.学习关键(1)掌握网络通信的架构层次和基本原理(2)掌握socket及其相关函数的使用(3)掌握服务器和客户端程序通信的方法3.网络通信基础知识之网络通信发展历程(1)单机阶段(2)局域网阶段(3)广域网internet阶段(4)移动互联网

2021-09-02 23:42:10 242

原创 线程的介绍及同步线程的使用

1.用父子进程来同时读取键盘和鼠标#include <stdio.h>#include <string.h>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>int main(void){ int fd = -1; int pid = -1; char buf[2

2021-09-01 21:52:54 106

原创 linux非阻塞IO与阻塞IO的应用

1.为什么有阻塞IO(1)常见的阻塞:wait、pause、sleep等函数,read和write某些特殊文件时(2)阻塞式的好处,在阻塞等待的进程不消耗CPU运行,提高性能。2.如何实现非阻塞IO访问(1)O_NONBLOCK和fcntl3.阻塞式IO的困境(1)程序中读取键盘#include <stdio.h>#include <string.h>#include <unistd.h>int main(void){ char b

2021-08-31 19:01:41 3338

原创 信号的介绍及使用

1.什么是信号(1)信号是内容受限制的一种异步通信机制(2)信号的目的是用来通信(3)信号是异步的(对比硬件中断)(4)信号本质上是int型数字编号(事先定义好的)2.信号由谁发出(1)用户在终端按下按键(2)硬件异常后由操作系统内核发出信号(3)用户使用kill命令向其他进程发送信号(4)某种软件条件满足后也会发出信号,如alarm闹钟时间到会产生SIGALARM信号,向一个读端已经关闭的管道write时会产生SIGPIPE信号3.信号由谁处理、如何处理(1)忽略信号(2)捕捉信号

2021-08-31 00:37:50 1313 4

原创 linux进程间的通信

1.进程间为什么要通信(1)进程间通信(IPC)指的是两个任意进程之间的通信。(2)同一个进程在一个地址空间中,所以同一个进程的不同模块(不同函数、不同文件)之间都是很简单的(很多时候都是全局变量、也可也通过函数形参实参传递)(3)2个不同的进程处于不同的地址空间,因此要互相通信很难。2.什么样的程序设计需要进程间通信(1)只有很少的程序需要进程间通信,大部分程序都是单进程的(可以多线程)(2)复杂、大型的程序,因为设计的需要就必须设计为多进程程序(我们整个程序需要多个进程同时工作来完成),常见

2021-08-29 17:42:12 87

原创 守护进程的介绍与使用

1.进程查看命令ps(1)ps -ajx:偏向显示各种有关的ID(2)ps -aux:偏向显示进程的各种占用资源2.向进程发送信号命令kill(1)kill -信号编号 进程ID,向一个进程发送一个信号(2)kill -9 xxx,向xxx这个进程发生9号信号,也就是结束这个进程3.何为守护进程(1)daemon(2)长期运行(一般是开机运行直到关机)(3)与控制台脱离(关闭终端不会结束该进程,这个问题还在与会话)(4)服务器(server)服务器就是一个一直在运行的程序,可以提供我们某

2021-08-29 15:26:21 917 1

原创 进程状态和关系及system函数

1.进程的五种状态(1)就绪态:这个进程当前所有运行条件都就绪,只要得到CPU时间就能直接运行。(2)运行态:就绪态得到CPU开始运行。(3)僵尸态:子进程已经结束,父进程还没来得及回收(4)等待态:(浅度睡眠&深度睡眠),进程在等待某种条件,条件成熟后进入就绪太。浅度睡眠可以被(信号)唤醒,而深度睡眠不能被唤醒只能等待条件才能被唤醒。(5)暂停态:暂停并不是进程终止,只是被信号暂停了,还可以恢复的。2.system函数的简介int system(const char *command

2021-08-29 10:40:47 156

原创 学习C++的第十一天(引用)

1.引用的作用:给变量名起别名2.语法:数据类型 &别名 = 原名#include <iostream>using namespace std;int main(){ int a = 10; int &b = a; cout << "a=" << a << endl; //10 cout << "b=" << b << endl; //10 b = 100; cout <&lt

2021-08-28 16:59:02 50

原创 exec族函数的介绍与使用

1.为什么需要exec函数(1)fork子进程是为了执行新的程序(2)可以直接在子进程的if中写入新程序的代码,但是不够灵活,因为只能将子进程程序的源代码贴过来执行(必须知道源码,而且源码太长不好控制)比如要执行 ls -la命令就不行。(3)使用exec运行新的可执行程序(可以把一个编译好的的可执行程序直接家在运行)(4)我们有了exec族函数后,我们典型的父子进程就是这样的:子进程需要运行的程序被单独编写、单独编译成一个可执行文件(叫hello),项目是一个多进程项目,主程序叫父进程,fork创

2021-08-28 15:43:03 676

原创 waitpid函数的介绍

1.wait和waitpid的差别(1)基本功能是一样的,都是用来回收子进程的(2)waitpid可以回收指定PID的子进程(3)waitpid可以阻塞式和非阻塞式两种工作模式2.waitpid原型介绍pid_t waitpid(pid_t pid, int *wstatus, int options);(1)参数1:要回收子进程的PID号,参数2:和wait的参数一样,参数三:选择阻塞和非阻塞两种工作模式(0阻塞,WNOHANG 非阻塞)(2)返回值:返回回收的子进程的PID3.代码实现

2021-08-28 11:37:13 1284

原创 进程的诞生和消亡及wait函数的使用

1.进程的诞生(1)进程0(内核态)和进程1(init进程)(2)fork(3)vfork2.进程的消亡(1)正常终止和异常终止(2)进程在运行时需要消耗系统资源(内存、IO),进程终止时理应完全释放这些资源(如果进程消亡后任没有释放相应的资源则这些资源就丢失了)(3)linux设计规定;每个进程退出时,操作系统会自动回收这个进程涉及到的所有资源(譬如malloc申请的内存没有free时,当进程结束会释放这个内存),但操作系统只是回收了这个进程工作时消耗的内存和IO,而且没有回收这个进程本身占

2021-08-28 10:56:29 173

原创 stm32跑马灯实验(位操作)

1.建立工程文件2.编写led初始化头文件#ifndef __LED_H#define __LED_H#include "sys.h"#define LED_0 PFout(9) //后期通过LED_0直接进行位操作#define LED_1 PFout(10)void LED_Init(void);#endif3.编写led.c初始化函数#include "led.h"#include "stm32f4xx.h"void LED_Init(void){ GP

2021-08-27 12:33:00 354

原创 学习C++的第10天(程序的内存模型-内存四区)

1.内存分区模型(1)代码区:存放函数体的二进制代码,由操作系统进行管理代码区是共享的,共享的目的是对于频繁被执行的程序,只需要在内存中有一份即可,代码区是只读的。(2)全局区:存放全局变量静态变量以及常量这个区域的数据在程序介绍后被系统释放#include <iostream>using namespace std;int g_a = 10;int g_b = 20;const int g_c = 30;const char g_arr[] = "asdj12";in

2021-08-27 00:33:46 53 2

空空如也

空空如也

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

TA关注的人

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