自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++之操作符重载

目录静态成员友员函数操作符重载静态成员1.声明静态成员:在类中是声明静态变量,而不是定义class Person{ static int cnt;//表示cnt是属于Person类的,而不属于实例化对象的 static int getcnt(void){ return cnt; }}2.定义和初始化静态成员变量:需要在类外和main函数之外定义和初始化,在main函数之外定义是为了想要在对象实例化之前将静态成员变量定义和初始化完成.

2021-06-09 16:53:24 279 2

原创 驱动进化之路:设备树的引入及简明的教程(imx6ull)

设备树设备树只是用来给内核里的驱动程序, 指定硬件的信息。比如 LED 驱动,在内核的驱动程序里去操作寄存器,但是操作哪一个引脚?这由设备树指定。设备树的格式:/{ //根节点用什么表示呢?和内核一样 用"/"表示,根节点的表示就是“ /{}; ” cpu{ //根节点中的CPU节点表示方法 //节点里面有属性 name = val;//name可以随便取,但是val不行 /* val有三种取值方法

2021-05-31 21:07:40 999 1

原创 C++之构造函数与析构函数

构造函数所谓构造函数就是跟类名相同的函数,可以带有参数也可以不带参数。可以通过参数的不用,来区分调用哪个构造函数类的构造方法的概念和作用:构造方法负责对象初始化工作,为对象属性赋合适的初始值创建对象时,其类的构造方法确保在用户操作对象之前,系统保证初始化的进行构造方法的语法规则:构造函数名和类名一致没有返回类型方式实现主要为字段赋值demo#include <iostream>using namespace std;class Person{ char *n

2021-05-29 22:01:28 317

原创 C++基础知识

类的定义类是面向对象程序设计语言中的一个概念,是对某个对象的定义。它包含有关对象动作方式的信息,包括它的名称、方法、属性。类成员有3种不同的访问权限:1)公有( public )成员:类外访问该成员。   2)私有( private )成员:只能被该类的成员函数访问。   3)保护( protected )成员:只能被该类的成员函数或派生类的成员函数访问。利用关键字class来定义一个类:在类中,默认成员属性为private,该权限作用为防止修改程序的人添加不符合常理的数据。class pe

2021-05-25 21:52:05 145 2

原创 驱动进化之路:总线设备驱动模型

总线设备驱动模型总线设备驱动模型是基于驱动设计思想分离而实现的。其主要包括了三个部分:总线(bus)、设备(dev)、驱动(drv); 主要功能就是将dev与drv分离开来。设备(dev)在dev部分中会注册一个platform_device(设备平台)。可以在platform_device结构体里面定义使用哪个引脚也可以用来表示所有设备的资源。struct platform_device { const char *name; int id; bool id_auto; struct

2021-05-19 17:50:00 582

原创 03-git的基本命令

1.文件的四种状态版本控制就是对文件的版本控制,要对文件进行修改、提交等操作,首先要知道文件当前在什么状态,不然可能会提交了现在还不想提交的文件,或者要提交的文件没提交上。Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged.Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改,而变为Modified. 如果使用git rm移出版本库,

2021-04-30 17:15:14 99 1

原创 02-git的安装以及配置

git的安装1.在ubuntu上安装:输入命令:sudo apt-get install git2.在window是上安装打开 [git官网] https://git-scm.com/,下载git对应操作系统的版本。官网下载太慢,我们可以使用淘宝镜像下载:http://npm.taobao.org/mirrors/git-for-windows/git的配置安装完成后,在桌面上鼠标右击会出现“git bush here”,你点击这个选项就会跳出一个界面输入命令git config -l

2021-04-30 16:37:09 131 1

原创 01-git与svn

1.Git与svn对比1 SvnSVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就郁闷了。下图就是标准的集中式版本控制工具管理方式:集中管理方式在一定程度上看到其他开发人员在干什么,而管理员也可以很轻松掌握每个人的开发权限。但是相较于其优点而言,集中

2021-04-30 16:15:51 97 1

原创 Makefile的编写规则

Makefile的好处:修改源文件或者头文件,只需要重新编译牵涉的文件,就可以重新生成APPMakefile文件编写规则目标(target)...:依赖(prerequiries)<tab>命令(command)目标通常是要生成的文件的名称,可以是可执行文件或OBJ文件,也是一个执行动作的名称,如“clean”。依赖是用来产生目标的材料(比如源文件),一个目标经常有几个依赖。命令是生成目标执行时的动作,一个规则可以含几个命令,每个命令占一行。注意:每个命令行前面必须是一个tab

2021-04-19 20:39:21 885

原创 Java之内部类

内部类之成员内部类内部类的概念:所谓内部类就是将一个类定义在另一个类的内部。内部的类称为内部类内部类的主要特点:内部类可以很好的实现隐藏,可以使用protected private修饰符内部类可以直接访问外部类的所有成员,包括私有的成员外部类不能直接访问内部类的成员,必须首先建立内部类的对象才能访问成员内部类及应用:成员内部类属于外部类的实例成员,成员内部类可以有public private default protected权限修饰符。在成员内部类中访问外部类成员的方法和属性,要

2021-03-21 21:05:48 72

原创 Java之接口及使用

接口的概念和作用接口语法interface 接口名{ //共有静态常量、抽象方法}接口的特点接口中只能存放静态常量和抽象方法Java接口是对功能的拓展通过实现接口,Java类可以实现多实现一个类可以同时继承(extends)一个父类并且实现(implements)多个接口 接口与接口之间可以使用extends实现继承接口与抽象类的区别抽象类和具体实现之间是一个继承关系,也就是如果采用抽象类的方式,则父类和子类在概念上应该是相同的is-a接口实现类在概念上不要要求相同,接

2021-03-21 21:03:08 182

原创 Java之抽象方法和抽象类

抽象类:Java中可以定义没有方法体的方法,该方法由子类来具体实现。没有方法体的方法我们称之为抽象方法,含有抽象方法的类我们称之为抽象类。抽象方法的特点:只有方法头没有方法体的方法称为抽象方法抽象方法用abstract来修饰抽象方法代表一种不确定的操作或者行为抽象方法不能被调用抽象类的特点:定义中含有抽象方法的类叫做抽象类抽象类用abstract来修饰抽象类代表一种抽象的对象类型抽象类不能够实例化抽象类可以有具体方法,可以没有抽象方法(但是无意义)abstract class

2021-03-21 21:01:33 168

原创 Java之继承

1.继承的概念继承背后的思想就是基于已存在的类来构建新类当从已存在类继承是,就重用了它的方法和属性,还可以添加新的方法和属性来定制新类以应对需求约定:从其他类导出的类叫做子类被导出的类叫做父类在Java中,除了object类之外,所有类都是子类,只有唯一的父类package jicheng.zhaohaip;class Person{//父类 int age; String name; void eat(){ System.out.println("人吃饭"

2021-03-21 20:59:49 83

原创 Java之面向对象之封装

将数据和方法包装进类中,加上具体实现的隐藏(访问修饰符),共同被称作封装,其结果是一个同时带有特征和行为的数据类型。定义类,定义其属性,方法的过程称为封装类封装类demo:class Student{//相当于c的结构体;定义类 int age;//定义属性 String name;//java中没有指针字符串 double score; void myPinrtf(){//定义方法 //不用传参,可以直接调用上面的变量,因为面向对象 System.out.println("age=

2021-03-21 20:55:04 166

原创 Java的输入类

import java.util.Scanner;public class Scanf { public static void main(String[] args) { Scanner sc = new Scanner(System.in);//需要ctrl+shit+o导出有关scanner的包。设置为输入模式 int a; String str; //Java中字符串定义为String System.out.println("Please input a int n

2021-03-21 20:44:13 883

原创 Java的方法就是c的函数

public class Function { static void myPrintf()//如果要调用函数,则需要在函数名前加上static,否则不能够调用 { System.out.println("hello world"); } static void myAprintf(int a) { System.out.println("Input a number:"+a); } public static void main(String[] args) {//mai

2021-03-21 20:43:32 184

原创 Java数组与c语言稍微有点不同

public class Test { public static void main(String[] args) { int a[] = {1,2,4};//定义数组[]中括号里面不能有数字 System.out.println(a[0]); System.out.println(a[1]); System.out.println(a[2]); //int[] array = new int[3] ;//定义一个空数组,括号尽量放前面 标准化一点 int array[]

2021-03-21 20:42:18 196

原创 Java之helloworld

建立java工程:首先file->new->java project然后打开你建立文件夹,右键src,new->class.这样就建立完成啦public class Test { public static void main(String[] args) {//Java的main函数 System.out.println("hello World");//java的打印函数,与c语音的printf作用一样 }}...

2021-03-21 20:40:03 99 2

原创 基于树莓派(C语音)实现人脸识别(翔云平台)

1.树莓派中安装摄像头并测试摄像头1.1、安装mjpg-streamer在CRT中依次输入一下指令sudo apt-get update #更新软件列表sudo apt-get upgrade #更新软件sudo apt-get install subversion #Subversion是一个自由开源的版本控制系统sudo apt-get install libjpeg8-dev #JPEG支持库sudo apt-get install imagemagicksudo apt-

2021-03-16 17:42:51 830 1

原创 树莓派编译有关openssl库的例程代码报错解决方法

gcc democar.c -I ./curl-7.71.1/_install/include/ -L ./curl-7.71.1/_install/lib/ -lcurl当我们使用上面的指令编译会报错./curl-7.71.1/_install/lib//libcurl.so: undefined reference to `SSL_CTX_set_keylog_callback@OPENSSL_1_1_1'./curl-7.71.1/_install/lib//libcurl.so: undef

2021-03-16 15:52:02 619 2

原创 树莓派3B扩大内存

当按tab键自动填充时,会出现报错cd h-bash: cannot create temp file for here-document: No space left on device -bash: cd: h: No such file or directory原因是因为磁盘内存满了。使用命令df -h可查看磁盘情况从图中可以看出,/dev/root里的内存已经用完了。在网上找到的解决方法都是使用命令du -sh *去查看那个目录下用到的内存最多,然后就把他删了。但是我搜索到的是/usr

2021-03-15 21:50:15 2874

原创 Wemos串口通信的相关API

开启串口Serial.begin() //描述:开启串口,通常至于setup()函数中。原型 Serial.begin(speed) Serial.begin(speed,config) 常数speed:波特率,一般取值9600,115200等config:设置数据位,校验位和停止位,默认SERIAL_8N1表示八个数据位,无校验位,1个停止位。返回值:无串口输出数据Serial.println() //串口输出数据并换行原型Serial.println(val)

2021-03-09 22:39:01 150

原创 软链接和硬链接的生成

软链接概念软链接文件有类似于Windows的快捷方式。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。你选定的位置上生成一个文件的镜像,不会占用磁盘空间ln -s libwiringPi.so.2.50 libwiringPi.so //指令 参数 要被链接的文件 软链接文件名字硬链接概念硬链接就是一个文件的一个或多个文件名。再说白点,所谓链接无非是把文件名和计算机文件系统使用的节点号链接起来。因此我们可以用多个文件名与同一个文件进行链接,这些文件名可以

2021-03-07 22:34:34 166

原创 Linux之带wiringPi库的交叉编译

正常我们需要先交叉编译wiringPi库,编译出的库适合树莓派,这时候交叉编译可执行程序的时候,链接库的格式也是正确的。如果我们直接编译,会出现报错/arm-linux-gnueabihf/bin/ld: cannot find -lwiringPicollect2: error: ld returned 1 exit status解决方法:把树莓派的wiringPi库拿上来用在CRT中登入树莓派,输入cd /usr/lib/就可以查看到wiringPi库里的东西。而libwiringPi.s

2021-03-07 22:26:11 422

原创 Linux之交叉编译

交叉编译:在一个平台上生成另一个平台的可执行代码。编译:是在一个平台上生成该平台的可执行程序为什么要交叉编译:有的平台上不允许或者不能够安装我们所需要的编译器比如C51。因为目的平台上的资源匮乏,无法运行我们所需要的编译器。树莓派是不是就不需要交叉编译?错。也要,树莓派有时又是因为目的平台还没建立,连操作系统都没有,根本谈不上什么编译器。操作系统也要代码,也要编译。平台运行至少需要两样东西:bootloader(启动引导代码)以及操作系统核心宿主机(host)(电脑) :编辑和编译程序的平台,

2021-03-07 22:10:20 854

原创 socket,tcp,http三个区别

http属于应用层,socket在会话层,tcp/ip在传输层tcp/ip协议是准确的点对点连接,其连接需要经过“三次握手”:第一次握手(连接请求SYN=1,ACK=0):客户端主动发起连接,会将SYN(syn=j)包发给服务器。第二次握手(请求确认SYN=1,ACK= 1):当服务器接收到客户端的连接请求时,会将SYN(syn=i)包和ACK包(syn=j+1)发给客户端。第三次握手(连接确认SYN=0,ACK=1):客户端接收到服务器的连接确认时,会将SYN(syn=i+1)包和ACK包(syn

2021-03-07 16:38:53 377

原创 静态库与动态库的制作

静态库:静态库函数是在执行程序前(编译)就加入到目标程序中去了。优点:运行快缺点:程序大动态库:动态库函数是在执行动态(临时)由目标程序去调用。缺点:运行慢优点:小静态库的制作静态库的制作:格式xxxx.agcc calcufuncs.c -c 生成xxx.o文件ar rcs libcalcufunc.a calcufuncs.o xxx.o文件生成xxx.a静态库文件静态库的使用: gcc calculatorT.c -lcalcufunc -L ./ -o mainProSt

2021-03-06 21:01:46 88

原创 libcurl等第三方库的通用编译方法

1.下载libcurl库安装包https://github.com/curl/curl/releases/tag/curl-7_71_12.拖进虚拟机中解压tar xvf curl-7.71.1.tar.gz 3.进入该目录cd curl-7.71.1/4.安装库4.1如果只在虚拟机中跑程序,则输入下列命令./configure --prefig=$PWD/_install4.2如果只在树莓派中跑程序,则输入下列命令./configure --prefig=$PWD/_ins

2021-03-05 12:14:26 1234

原创 C语言之链表

链表的建立 #include <stdio.h> 2 3 struct test 4 { 5 int dat; 6 struct test *next; 7 }; 8 9 void printlink(struct test *head) 10 { 11 while(head != NULL){ 12 printf("%d",head->dat); 13 head = head->n

2021-02-22 18:00:30 65

原创 树莓派SSH登录失败:connection time out解决方法

树莓派SSH登录失败:connection time out解决方法首先查看树莓派连接的网络是否与电脑连接的网络一致sudo nano /etc/wpa_supplicant/wpa_supplicant.conf如果不一致的话,则需要设置成一致。然后查看是否固定树莓派ip地址sudo nano /etc/rc.local如果没有,则需要添加进去,ip地址通过输入命令ifconfig获得打开ssh功能sudo raspi-config选择第五个选项选择SSH若上面步

2021-02-19 17:52:59 8596 2

原创 wiringpi驱动代码的编译和测试

在树莓派中添加pin4驱动的步骤注:以下步骤在虚拟机中进行1.因为引脚驱动为字符设备,所以需要将引脚驱动文件放进以下目录:/home/zhaohaip/SYSTEM/linux-rpi-4.14.y/drivers/char并将驱动代码拷贝进入该文件夹: cp /mnt/hgfs/1.kernol/pin4driver.c .2.在该目录下修改Makfilevi Makefile 以模块(module)方式编译,所以类型为:obj-mobj-m

2021-02-19 17:23:43 304

原创 Linux查看结构体所在的.h文件

1.当你知道库函数所在目录时:/usr/include$ grep "struct sockaddr_in {" * -nir// n表示行号,i表示不区分大小写,r是本目录回车后会出现:linux/in.h:184:struct sockaddr_in {// linux/in.h就是我们所需要的.h文件,184是在该.h文件中的行数。2.当你不晓得结构体在那个目录时:可直接在根目录中输入:grep "struct file_operations {" * -nir

2020-12-30 10:31:41 970

原创 进程通信之信号通信

信号通信信号通信其实就是内核向用户空间进程发送信号,只有内核才能发信号,用户空间进程不能发送信号。信号在内核中已经存在,并且在内核中有很多信号。信号通信的框架l 信号的发送(发送信号进程):kill raise alarml 信号的接收(接收信号进程) : pause() sleep while(1)l 信号的处理(接收信号进程) : signal用命令kill -l 查看内核中有多少信号CLC@Embed_Learn:~$ kill -l 1) SIGHUP 2) SIGIN

2020-11-22 22:37:37 563

原创 有名管道

有名管道即文件系统中存在这个一样文件节点,每一个文件节点都有一个inode号。而且其是一个特殊的文件类型:p管道类型创建这个有名管道,不可以通过open 函数,open 函数只能创建普通文件,不能创建特殊文件。函数mkfifo()mkfifo 用来创建管道文件的节点,没有在内核中创建管道。只有通过open 函数打开这个文件时才会在内核空间创建管道。函数形式:int mkfifo(const char * filename,mode_t mode);功能:创建管道文件参数:管道文件文件名(要包

2020-11-15 11:41:38 245

原创 无名管道

无名管道在文件系统中无文件名称在文件IO中创建一个文件或打开一个文件是由open函数来实现的,它不能创建管道文件。只能用pipe函数来创建无名管道。函数形式:int pipe(int fd[2])功能:创建无名管道参数:两个文件描述符。返回值:成功是0,出错是-1;注意:Ø 管道中的东西,读完了就删除了;队列Ø 如果管道中没有东西可读,则会读阻塞(进程睡眠)。pipe函数的使用例子:#include <unistd.h>#include <stdio.h>

2020-11-15 11:25:48 178

原创 open和close函数

open函数:打开或创建文件系统调用open可以用来打开普通文件、块设备文件、字符设备文件、链接文件和管道文件,但只能用来创建普通文件,创建特殊文件需要使用特定的函数。头文件:#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>函数原型:int open(const char *pathname,int flages);int open(const char *pathname,int

2020-10-25 12:08:30 1907

空空如也

空空如也

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

TA关注的人

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