自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(278)
  • 资源 (11)
  • 收藏
  • 关注

原创 Linux环境变量设置(PATH/LIBRARY_PATH/LD_LIBRARY_PATH)

参看链接:https://baike.baidu.com/item/LD_LIBRARY_PATH/9391538?fr=aladdin

2021-06-06 16:55:47 6 2

原创 修改linux root@后面的别名

修改@后面的主机名1. vim /etc/hostname2. reboot重启

2021-06-06 12:57:58 9

原创 ubuntu下使用notepad

需要注意一个细节,本文说的是安装Notepad++,而不是Notepadqq,这是两个不同的软件,虽然有些同学或说Notepadqq是类Notepad++的编辑器软件。Notepad++官方只有Win系统的版本,因此要在Linux系统中运行,还需要wine运行环境。...

2021-06-04 11:06:35 7

原创 Ubuntu下alias命令的使用

1. alias命令的作用当我们经常需要在命令窗键入复杂冗长的命令时,alias就派上用场啦。alias允许用户为命令创建简单的名称或缩写,哪怕这个缩写只有一个字符。即为指令设置别名。

2021-06-03 19:05:19 8

原创 Linux下使用C++解析json文件

1. 背景工作需要,下班回来自己造轮子,记录以后查阅。JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,和xml类似,本文主要Linux下使用Jsoncpp解析json的方法做一下记录。2. 关于jsoncpp库的使用简介使用jsoncpp有两种方法方法一:使用Jsoncpp生成的lib文件 解压上面下载的Jsoncpp文件,在jsoncpp默认生成静态链接库。 在工程中引用,只需要包含include/json下的头文件及生成的....

2021-06-02 00:21:40 61 2

原创 【C++】 --- 虚析构和纯虚析构

1. 为什么需要虚析构函数多态使用时,如果子类中有属性开辟到堆区,那么父类指针在释放时无法调用到子类的析构代码code示例:#include <iostream>#include <stdlib.h>#include <string>using namespace std;class Animal {public: Animal() { cout << "Animal 构造函数调用!" << endl; }

2021-05-31 00:00:56 3

原创 【C++多态】 --- 多态实现原理简析

1. 多态分类多态分为两类 静态多态: 函数重载 和 运算符重载属于静态多态,复用函数名 动态多态: 派生类和虚函数实现运行时多态 静态多态和动态多态区别: 静态多态的函数地址早绑定 - 编译阶段确定函数地址 动态多态的函数地址晚绑定 - 运行阶段确定函数地址 2. 动态多态的满足条件1. 有继承关系2. 子类重写父类中的虚函数动态多态使用条件父类指针或引用指向子类对象3. 多态实现的前提赋值兼容规则是指在需要父类对象的地方可以使用子类对象

2021-05-30 23:32:23 6 1

原创 【C++多态】 --- 多态问题抛出与virtual关键字

1. C++中多态的概念C++中所谓的多态(polymorphism)是指,由继承而产生的相关的不同的类,其对象对同一消息会作出不同的响应。2. C++多态问题抛出下面看一个具体的例子:#include <iostream>#include <stdlib.h>using namespace std;class Animal{public: void speak(void) { cout << "动物在说话" << en

2021-05-30 23:07:20 17 1

原创 C++提高 --- 构造函数与析构函数

我们用构造函数去初始化一个对象的时候,会分配一段空间,构造函数的作用是对这段空间进行初始化的操作,并不是创建了这段空间在调用析构函数的时候,并不是去释放

2021-05-29 23:06:56 4

原创 Linux下利用c/c++使用sqlite

1. 安装sqlite下载连接:https://www.sqlite.org/snapshot/sqlite-snapshot-202105251610.tar.gz1> 解压

2021-05-27 23:40:25 8

原创 sqlite3使用

/*@brief 本程序测试sqlite数据库的增删改查@date 2012-09-03*/// SQLiteTest.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include "sqlite3.h"#include <iostream>using namespace std;sqlite3 * pDB = NULL;//增加用户bool ...

2021-05-27 22:47:07 10

原创 Linux查找命令

1.findfind主要基于文件名去查找,其语法为:【find默认是递归的,不需要加-R参数也会自动去子目录查找】find path -option [ -print ] [ -exec -ok command ] {} \;比喻现在在一个工程中想找1.c这个文件find ./* -name 1.c其他具体的后面还可以跟很多参数,具体参看man手册。2. grepgrep主要是基于文件内容检索。其语法为:【grep默认不是递归的,需要加-R参数

2021-05-25 22:04:37 5

原创 code规范 --- 驼峰命名法

1. 命名方法1.1 驼峰命名法指混合使用大小写字母来构成变量和函数的名字。当变量名或函数名是由一个或多个单词连结在一起构成的唯一识别字时,第一个单词以小写字母开始,从第二个单词开始以后的每个单词的首字母都采用大写字母,例如:myName、myAge,这样的变量名看上去就像骆驼峰一样此起彼伏,因此被称为驼峰命名法。int *treeBase;int elemNum;int treeSize;1.2 帕斯卡(Pascal)命名法也叫大驼峰法,与驼峰命名法类似,不过骆驼命名法是首字母.

2021-05-24 23:50:48 15

原创 Ubuntu下安装类似QQ截图的工具 flameshot

1. flameshot介绍flameshot是最近一个非常热门及好用的Linux下的截图软件,使用方式和QQ截图差不多。Ubuntu中apt安装方式提供的版本是0.5.0的,这个版本是没有在截图中插入文字的功能的,但是最近更新的0.6.0版本添加了这个功能,所以只能手动安装了。2. 安装方法方法一:apt-get install flameshot我们发现apt提供的版本是0.5.1的,0.6.0以下的版本是没有插入文字的功能的,如果你出现上面这种情况的话就只能手动安装了,转到下面

2021-05-24 22:34:39 5

原创 java基础 --- 装箱和拆箱

1. Java数据类型在Java中,数据类型可以分为两大种,Primitive Type(基本类型)和Reference Type(引用类型)。基本类型的数值不是对象,不能调用对象的toString()、hashCode()、getClass()、equals()等方法,所以Java提供了针对每种基本类型的包装类型。如下: INDEX 基本类型 大小 数值范围 默认值 包装..

2021-05-17 22:52:59 28 2

原创 java基础 --- super关键字

1. super关键字的作用如果一个类从另一个类继承,我们new这个子类的示例对象的时候,这个子类对象类里面会有一个父类对象,怎么去引用这个父类对象呢?java中使用super来引用,super是当前对象里面的父对象的引用。2. super的用法super在java中有两种用法,下面分别阐述。2.1 使用super关键字访问父类的成员2.2 使用super关键字访问父类的构造方法参考链接:https://blog.csdn.net/qq_44357792/a...

2021-05-17 22:42:15 5

原创 java基础 --- 构造器

1. 什么是构造器1.1 构造器的概念构造器通常也叫构造方法或者构造函数。简单点说,就是C++中的构造函数,但是在java中是没有析构函数的,java提供了垃圾回收器,对于不再使用的资源会自动释放,这点比C++简单。那我们来重新梳理下构造函数需要care的点。1.2 构造器的作用构造器是用来初始化成员属性和成员方法的,在创建对象的时候会被自动调用。2. 构造方法和实例方法的区别构造方法和实例方法主要区别于三个方面:修饰符、返回值、命名修饰符 ...

2021-05-17 22:38:53 11

原创 java基础 --- IDEA中添加javap

安装过jdk之后,细心的同学都会发现bin目录下自带了一个工具软件javap,如果你想查看文件的字节码信息,有没有简便的方式呢,还是一望无际的使用命令行呢,答案是当然有,下面详细讲解使用设置Idea来查看字节码信息。1. 点击File->setting->Tools->External tools, 并点击+2. 在弹出的窗口中需要设置Name/Program/Arguments/Working directory四个参数Name可以输入名字,随便写,这里就输入ja

2021-05-14 00:01:49 29

转载 java基础 --- Java异常处理

异常

2021-05-13 23:02:36 5

原创 java基础 --- java包(package)

1. 概述1.1 为什么需要包这个概念package可以简单理解为创建文件夹,windows中不能存储同类型同名称的文件,java也是。为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间。1.2 包的作用把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用。 如同文件夹一样,包也采用了树形目录的存储方式。同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别。因此,包可以避免名字冲突。 包也限定

2021-05-13 23:00:29 3

原创 java基础 --- java中的equals和==

1. equals()用法Java中所有的类都是继承自Object这个基类的,在Object类中定义了一个equals方法,这个方法的初始行为是比较对象的内存地址,但在一些类库中已经重写了这个方法(一般都是用来比较对象的成员变量值是否相等),比喻:String,Integer,Data等类中,所以它们不再是比较类在堆中的地址了。Object类中源码:public boolean equals(Object var1) { return this == var1;}String类中重写e

2021-05-12 23:08:51 11

原创 java基础 --- Java String类

1.

2021-05-12 23:08:09 45 4

原创 java基础 --- Java内存结构

1. 概述C编译器在划分内存区域的时候经常将管理的区域划分为数据段和代码段,数据段包括堆、栈以及静态数据区。那么在Java语言当中,内存又是如何划分的呢?由于Java程序是交由JVM执行的,所以我们在谈Java内存区域划分的时候事实上是指JVM内存区域划分。在讨论JVM内存区域划分之前,先来看一下Java程序具体执行的过程:如上图所示,首先Java源代码文件(.java后缀)会被Java编译器编译为字节码文件(.class后缀),然后由JVM中的类加载器加载各个类的字节码文件,加载完毕之后,

2021-05-11 22:53:50 4

原创 java基础 --- static关键字

1. statci关键字概念我们可以一句话来概括:方便在没有创建对象的情况下来进行调用。很显然,被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问。2. static关键字用法下面从四中用法对static关键字进行讲解。static修饰类、static修饰方法、static变量、static修饰代码块2.1 static修饰类普通类是不能被允许申明为静态的,但是有一种特殊用法就是用static修饰内部类。这样的好处就是可以直接通

2021-05-11 22:53:33 5

原创 java基础 --- 内部类

1. 内部类的概念将类写在其它类的外部(可以在其它类的成员位置和局部位置),这时写在其它类内部的类就称为内部类,其它类称为外部类。在描述事物时,若一个事物内部还包含其它可能包含的事物,比喻在描述汽车时,汽车中还包含发动机,这时发动机就可以用内部类来描述class 汽车 { //外部类 class 发动机 { //内部类 }}2. 内部类的特点内部类提供了更好的封装,只有外部类可以 访问内部类 内部类可以独立继承一个接口,不受外部类是否继承接口影响 内部类可以直接访

2021-05-11 20:19:48 40 1

原创 java基础 --- Java修饰符总结与应用

1. Java修饰符分类Java语言提供了很多修饰符,主要分为以下两类:访问修饰符 非访问修饰符1.1 访问控制修饰符Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java 支持 4 种不同的访问权限。 default(即默认,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。 private: 在同一类内可见。使用对象:变量、方法。注意:不能修饰类(外部类) public: 对所有类可见。使用对象:类...

2021-05-11 20:16:03 8

原创 java基础 --- 浅谈Java SE、Java EE、Java ME三者的区别

从C/C++转到Java,老是看到Java SE,Java EE,Java ME这几个名词,今天简单总结下这三者的区别。Java SE(Java Platform,Standard Edition),这个是标准版本Java EE (Java Platform,Enterprise Edition),java 的企业版本Java ME(Java Platform,Micro Edition),java的微型版本。1. Java SE(Java Platform,Standard Editio.

2021-05-10 21:22:08 6

原创 硬盘容量和宽带的计算

简单的小科普1. 硬盘容量是怎么算的(为什么厂家标明500G的移动硬盘在电脑上显示却只有465G)原因在于厂家和操作系统的计算方式不一样厂家: 1GB=1000MB=1 000 000KB=1 000 000 000B操作系统:1GB=1024MB=1024 * 1024KB=1024 * 1024 * 1024B据此换算一下:500G=500 000 000 000B打开计算器500 000000 000 /(1024*1024*1024)= 465.661...

2021-05-10 14:36:03 1070 3

原创 java基础 --- java概述

1. Java发展史略2. Java跨平台平台指的是操作系统,包括Windows、MAC、Linux,Java可以保证在任意平台上运行。Java程序并非是直接运行的,Java编译器将Java源程序编译成与平台无关的字节码文件(class文件),然后由Java虚 拟机(JVM)对字节码文件解释执行。所以在不同的操作系统下,只需安装不同的Java虚拟机即可实现java程序的 跨平台。 3. JRE和JDK3.1 JRE(Java Runtime Environment)JRE是j

2021-05-03 12:36:09 59 1

原创 正则表达式(一) --- 理论

1. 正则表达式的概念正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。构造正则表达式的方法和创建数学表达式的方法一样。也就是用多种元字符与运算符可以将小的表达式结合在一起来创建更大的表达式。正则表达式的组件可以是单个的字符、字符集合、字符范围、字符间的选择或者所有这些组件的任意组合。正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为"元字符".

2021-04-29 21:55:29 16

转载 Linux网络编程 --- UDP广播特性

1. 广播的特点广播的 UDP 的特性之一,通过广播可以向子网中多台计算机发送消息,并且子网中所有的计算机都可以接收到发送方发送的消息,每个广播消息都包含一个特殊的 IP 地址,这个 IP 中子网内主机标志部分的二进制全部为 1 (即点分十进制 IP 的最后一部分是 255)。点分十进制的 IP 地址每一部分是 1 字节,最大值为 255,比如:192.168.1.100前两部分 192.168 表示当前网络是局域网 第三部分 1 表示局域网中的某一个网段,最大值为 255 第四部分 100 用

2021-04-22 23:15:59 11

转载 Linux系统应用编程 --- 基于UDP的套接字通信

0. UDP通信特点udp 是一个面向无连接的,不安全的,报式传输层协议,udp 的通信过程默认也是阻塞的。UDP通信不需要建立连接 ,因此不需要进行 connect () 操作 UDP通信过程中,每次都需要指定数据接收端的IP和端口,和发快递差不多 UDP不对收到的数据进行排序,在UDP报文的首部中并没有关于数据顺序的信息 UDP对接收到的数据报不回复确认信息,发送端不知道数据是否被正确接收,也不会重发数据。 如果发生了数据丢失,不存在丢一半的情况,如果丢当前这个数据包就全部丢失了1.

2021-04-22 23:15:34 9

转载 Linux网络编程 --- 服务器并发

1. 单线程/进程在 TCP 通信过程中,服务器端启动之后可以同时和多个客户端建立连接,并进行网络通信,但是在介绍 TCP 通信流程的时候,提供的服务器代码却不能完成这样的需求,先简单的看一下之前的服务器代码的处理思路,再来分析代码中的弊端:// server.c#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include &lt.

2021-04-22 22:11:15 12

转载 Linux网络编程 --- socket套接字基本概念

1. 网络相关的基本概念1.1 局域网和广域网局域网:局域网将一定区域内的各种计算机、外部设备和数据库连接起来形成计算机通信的私有网络。广域网:又称广域网、外网、公网。是连接不同地区局域网或城域网计算机通信的远程公共网络。1.2 IP(Internet Protocol)IP本质是一个整形数,用于表示计算机在网络中的地址。IP 协议版本有两个:IPv4 和 IPv6IPv4(Internet Protocol version4):使用一个 32 位的整形数描述一个 IP 地址,4

2021-04-22 21:27:13 26

转载 Linux系统应用编程 --- 多线程同步之信号量

1. 信号量函数信号量用在多线程多任务同步的,一个线程完成了某一个动作就通过信号量告诉别的线程,别的线程再进行某些动作。信号量不一定是锁定某一个资源,而是流程上的概念,比如:有 A,B 两个线程,B 线程要等 A 线程完成某一任务以后再进行自己下面的步骤,这个任务并不一定是锁定某一资源,还可以是进行一些计算或者数据处理之类。信号量(信号灯)与互斥锁和条件变量的主要不同在于” 灯” 的概念,灯亮则意味着资源可用,灯灭则意味着不可用。信号量主要阻塞线程,不能完全保证线程安全,如果要保证线程安全,需要信

2021-04-18 16:27:46 29

转载 Linux系统应用编程 --- 多线程同步之条件变量

1.条件变量函数严格意义上来说,条件变量的主要作用不是处理线程同步,而是进行线程的阻塞。如果在多线程程序中只使用条件变量无法实现线程的同步,必须要配合互斥锁来使用。虽然条件变量和互斥锁都能阻塞线程,但是二者的效果是不一样的,二者的区别如下:1)假设有 A-Z 26 个线程,这 26 个线程共同访问同一把互斥锁,如果线程 A 加锁成功,那么其余 B-Z 线程访问互斥锁都阻塞,所有的线程只能顺序访问临界区2)条件变量只有在满足指定条件下才会阻塞线程,如果条件不满足,多个线程可以同时进入临界区,同时..

2021-04-18 16:18:00 14

转载 Linux系统应用编程 --- 多线程同步之读写锁【rwlock】

1. 读写锁函数1.1 读写锁概念介绍读写锁是互斥锁的升级版,在做读操作的时候可以提高程序的执行效率,如果所有的线程都是做读操作, 那么读是并行的,但是使用互斥锁,读操作也是串行的。读写锁是一把锁,锁的类型为 pthread_rwlock_t,有了类型之后就可以创建一把互斥锁了:pthread_rwlock_t rwlock;之所以称其为读写锁,是因为这把锁既可以锁定读操作,也可以锁定写操作。为了方便理解,可以大致认为在这把锁中记录了这些信息:锁的状态:锁定 / 打开 锁定的是什

2021-04-18 16:11:36 9

转载 Linux系统应用编程 --- 多线程同步之互斥锁【mutex】

1. 互斥锁函数互斥锁是线程同步最常用的一种方式,通过互斥锁可以锁定一个代码块,被锁定的这个代码块,所有的线程只能顺序执行 (不能并行处理),这样多线程访问共享资源数据混乱的问题就可以被解决了,需要付出的代价就是执行效率的降低,因为默认临界区多个线程是可以并行处理的,现在只能串行处理。在 Linux 中互斥锁的类型为 pthread_mutex_t,创建一个这种类型的变量就得到了一把互斥锁:pthread_mutex_t mutex;在创建的锁对象中保存了当前这把锁的状态信息:锁定还是打

2021-04-18 15:17:09 19

转载 Linux系统应用编程 --- 线程同步

转载链接:作者: 苏丙榅链接: https://subingwen.cn/linux/thread-sync/#1-2-%E5%90%8C%E6%AD%A5%E6%96%B9%E5%BC%8F为什么需要线程同步,笼统的说,有下面三个原因:1.共享资源,多个线程都可对共享资源操作2.线程操作共享资源的先后顺序不确定3.处理器对存储器的操作一般不是原子操作假设有 4 个线程 A、B、C、D,当前一个线程 A 对内存中的共享资源进行访问的时候,其他线程 B, C, D 都不可以对这块内存.

2021-04-18 15:04:37 13 1

原创 Linux系统应用编程 --- 线程原语

1. pthread_create#include <pthread.h>int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);pthread_t *thread:传递一个pthread_t变量地址进来,用于保存新线程的tid(线程ID)const pthread_attr_t *attr:线程属性设置,如使用默

2021-04-18 13:31:41 13

大彩串口屏-正点原子STM32DEMO

广州大彩屏,STM32程序,用正点原子的例程移植的,他们自带的例程是Keil4的,改了很多地方。

2018-06-21

F1正点原子开发板移植CanOpen源码

硬件是正点原子开发板,移植CanFestival源码,可以直接发CAN报文,亲测可用

2018-10-04

CanFestival3.10源码

从CanFestival官网下载的最新的源码,可以自己移植到工控机或者单片机

2018-10-04

STM32 L298N代码

STM32控制L298N驱动电机,通过按键实现控制,是调节PWM脉宽以及正反转

2018-10-04

C语言中如何使用全局变量示例

C语言中如何使用全局变量简单示例,多文件.c中如何使用全局变量

2018-11-20

STM驱动有刷电机源码

STM32驱动25GA370电机,PWM驱动,可以直接改引脚去用到自己的项目

2018-10-04

LD3320语音模块STM32

硬件基于正点原子F1开发板,控制LD3320模块,用于语音控制,程序只是给出了控制LED示范。

2018-10-04

根文件系统

参考朱有鹏老师嵌入式视屏课程,自己制作的根文件,跟视屏里面一样的操作

2018-09-25

龙邱SYN7318非特定语音识别模块程序

SYN7318语音模块,代码已经移植到正点原子F1开发板,只需要简单的实验下,就可以移植到自己的项目

2018-10-28

PCB封装库---经过很多次画板检验

常见的各种接口封装包括DB9、USB内存等等、芯片封装(常见的sTM32、DSP、以及常见电源芯片)、元器件封装(0603、SOT23等等)

2018-09-27

GNU_Makecn.rar

GNU_make ,用makefile管理工程的时候,很好的参考文档,比一起学makefile更具体

2019-08-14

空空如也

空空如也

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

TA关注的人 TA的粉丝

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