自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++学习笔记15 - struct、class、const、mutable

1、class的前置声明就是class的声明,安慰编译器的类的声明中直接写函数体,则此函数会被编译器inline化处理类的声明中正常处理,而成员函数的实现中加inlineinline的成员函数应该放在hpp中,而不是cpp中,这个一定要注意,因为inline是在编译时替换的// 访问权限 public :// 属性 mutable string name;// 名字 bool male;// 性别,男为true,女为false person() {};...

2022-08-11 19:31:05 731 1

原创 C++学习笔记14 -访问权限问题

c++访问权限问题

2022-08-11 19:07:03 1013

原创 C++学习笔记13 - 浅拷贝和深拷贝

c++的浅拷贝与深拷贝

2022-08-10 19:58:43 676

原创 C++学习笔记12 - 构造函数和析构函数

1、元素2、实战中,一般一个cpp和一个hpp文件配对,描述一个class,class的名字和文件名相同。3、面向对象式编程总结4、C++学习的三重境界1、什么是构造函数2、构造和析构一般用法3、为什么需要构造函数和析构函数1、析构函数的使用2、在class中使用动态内存变量3、用valgrind工具查看内存泄漏1、构造函数一大功能就是初始化成员变量2、C++的成员初始化列表3、构造函数使用参数默认值...

2022-08-09 19:43:17 495

原创 opus编解码

opus编解码下载opus官方源码解压文件编译opus对16k 单声道 pcm文件进行16k opus编码对opus文件进行pcm解码wav转opus(转换后的opus无法播放,不带ogg封装)notes:opus-1.3.1 编解码不带ogg封装opus-tools-0.2 带ogg封装......

2022-07-05 18:47:55 1340

原创 gdb调试C程序

源码:#include <stdio.h>#include <string.h>#include <stdlib.h>void test1(){ printf("-----------test 1111111---------\n"); printf("-----------test 2222222---------\n");}void test2(){ int i = 9; int *p = 0; *p = i; //解引用空

2022-04-19 16:11:54 195

原创 C++学习笔记11 - C++的内存管理

一、为什么要研究内存管理程序就是数据加算法写程序是为了解决某个问题,生活中的问题最终被计算机抽象为控制或运算CPU中的主要构件就是运算器和控制器,本质上是一堆组合逻辑电路,表现为机器指令集一个问题对应一个程序,一个程序分为多个函数,一个函数分为多个机器指令存储机器指令需要内存,机器指令的执行过程需要内存参与,这是内存的2大作用算法对应机器指令(ROM内存),数据对应RAM内存,CPU对应工作机器越是偏底层的语言,越对内存管理具体化,效率也越高,同时对编程者要求也越高计算机中如何管理内存

2022-04-15 21:17:30 155

原创 C++学习笔记10 - 异常处理机制

何为异常处理异常exception,即运行时错误C中没有异常机制,所以运行时遇到错误只能终止程序C++中新增了异常处理机制,允许程序在运行时拦截错误并处理,这样程序就不用终止异常机制的一个典型案例就是:由用户输入2个数字然后相除中的除0异常try , catch , throw异常处理机制为什么优于出错条件判断:https://www.cnblogs.com/wkfvawl/p/10816156.html异常和函数throw 一个异常后,如果没有 catch,会层层向外传递,直到被 c

2022-04-11 17:59:59 929

原创 C++学习笔记9 - 类与面向对象中的关键字

一、C++类与面向对象struct 和 classstruct 是C 中用户自定义类型,主要功能是对功能相关数据的封装struct 不能直接封装函数,但可以通过封装函数指针来间接封装函数struct 就是 class 的初级阶段,class 在 struct 基础上做了很多扩展,便有了面向对象访问权限类是对数据(成员变量)和方法(成员函数)的封装封装的一个重要特征就是访问权限管控,本质是为了隐藏实现细节,避免意外篡改C++ 支持三个访问管控级别:private、protected、pu

2022-04-11 17:09:28 1367

原创 C++学习笔记8 - static_cast、reintepret_cast、const_cast、dynamic_cast、auto、decltype

一、static_cast源生类型之间的隐式类型转换,可以用 static_cast 来明确告知编译器,避免警告,转换后可能丢失精度。正确性需要程序员自己保证。用来将(void *p)转为具体的指针类型,取回原有的指针类型用于类层次结构中父类和子类之间指针和引用的转换。其中上行转换是安全的,下行转换是不安全的。总结:static_cast<>()是编译时静态类型检查,使用 static_cast 可以尽量发挥编译器的静态类型检查功能,但是并不能保证代码一定“正确”(譬如可能会丢失精度导

2022-04-07 21:10:47 1192

原创 C++学习笔记7 - alignof、alignas、typeid

一、C++内存对齐C语言中内存对齐关键点#pragma 和__attribute__((aligned(n)))#pragma 用于向下对齐,也就是向小对齐。(char和int,向char对齐,在我的Ubuntu64位系统内存中占5字节)而__attribute__((aligned(n))) 用于向上对齐,也就是向大对齐。(char和int,向int对齐,在我的Ubuntu64位系统内存中占8字节)C++中内存对齐新增关键字C++11起,新增 alignof 和 alignasal

2022-04-06 21:16:29 1245

原创 C++学习笔记6 - nullptr空指针、静态断言

一、C++11 引入的nullptrC语言中的NULLNULL用来标记空指针NULL在C和C++中的定义不同,因为C++不允许(void*)隐式转为(int*)等指针类型C++中也可以继续用NULL,但是因为函数重载的引入,NULL传参会带来歧义。比如2个重载函数:void func(int* a); 和 void func(char* c);C语言中NULL就是 (void*)0; C++语言中NULL就是0NULL和nullptr的区别NULL是个宏定义,而nullptr

2022-04-06 20:42:14 935

原创 C++学习笔记5 - enum枚举、union共用体、inline内联

一、enum枚举C++继承C的枚举用法典型枚举类型定义,枚举变量定义和使用。枚举类型中的枚举值常量不能和其他外部常量名称冲突。enum day {MON, THU, WEN}; // C和C++98等老版本里的写法enum day d1; // 定义了一个day类型的变量,变量名是d1//实际上,C中习惯用typedef来重命名类型以避免每次类型使用都加enumtypedef enum {MON, THU, WEN} day;C++11 中扩展的枚举enum class day

2022-04-02 20:28:21 1213

原创 C++学习笔记4 - extern “C“

一、为什么需要混合编程1、C有很多优秀成熟项目和库,C++程序里要调用,没必要重新2、庞大项目划分后,一部分适合用C,一部分适合用C++二、为什么不同语言可以混合编程1、程序编译过程:源文件 -> 目标文件 -> 可执行文件 -> 镜像文件2、任何编程语言执行时都必须是可执行程序,所以都必须先被编译成目标文件3、混合编程的 “混合” 操作发生在链接这一步三、C++和C混合编程的困难1、C++和C都是编译型语言,互相混合相对容易2、难点:C++支持函数名重载,而C不支持,因

2022-04-01 20:25:51 733

原创 C++学习笔记3 - 引用&

一、引用介绍1、定义: int a ; int &b = a;2、引用定义和识别的关键:&符号。注意这里和取地址没有任何关系。3、引用符号在定义时必须同时初始化,以后不能再另外赋值,只能使用。二、引用和指针的对比1、指针在C和C++中都有,且使用方法和实现本质完全相同,引用只有C++可用。2、引用可以理解为功能弱化、安全性增强的低配版指针。3、引用能做的事情,指针都能做。但指针能做的事情,引用不一定能做。4、引用是它指向变量的“别名”,这个是从引用的使用效果角度

2022-04-01 17:51:26 498

原创 tftp的使用

1、tfrp官方下载地址 https://bitbucket.org/phjounin/tftpd64/downloads/2、设置Windows为tftp服务器,Linux设备从该服务器上拉取文件。当前目录选择tftp.exe所在的目录,并将Linux要拉取的文件放置在这个目录下。同时保证Linux设备与Windows主机在同一局域网内。3、用串口进入设备,若当前为只读文件系统,执行重挂载命令:mount -o remount,rw /4、从tftp服务器拉取文件,执行 tftp -r file

2021-12-10 18:36:51 7922

原创 C++学习笔记2 - iostream库

1、C++标准库介绍1.1 C++是C的超集一个典型的C程序(后缀名.c)可以完全被视为C++程序来编译(用g++编译)C程序可以通过__cplusplus符号是否预定义来判断当前是gcc还是g++编译,__cplusplus的值是long int类型的,值表示当前编译程序的C++编译器的版本号。#include <stdio.h>int main(void){ printf("%ld\n",__cplusplus); return 0;}编译:g++ test

2021-11-29 20:30:06 1943

原创 C++学习笔记1 - namespace命名空间

1、命名空间的引入命名空间namespace,是C++引入的一种解决全局变量和函数名冲突的机制。C语言没有namespace,但是C++及之后的Java、Python等语言都有。namespace的关键点有2个:一是如何解决名称冲突,二是如何合法访问变量。2、C语言如何解决名称冲突大项目中会有很多C文件,全局变量和函数都是extern链接属性,因此名称冲突是客观存在的。一个项目是一个单体程序,项目中的全局变量和函数理应能互相访问,因此名称冲突是客观存在的。C语言中解决名称冲突的办法是:第一,

2021-11-19 20:42:40 881

原创 白盒测试与黑盒测试

白盒测试与黑盒测试二者最大的区别就是测试对象不一样。白盒测试主要针对的是程序代码逻辑;黑盒测试主要针对的是程序所展现给用户的功能。简单的说就是前者测试后台程序,后者测试前台展示的功能。白盒测试:是通过程序的源代码进行测试而不使用用户界面。这种类型的测试需要从代码逻辑发现内部代码在算法、溢出、路径、条件等等中的缺点或者错误,进而加以优化。黑盒测试:是通过使用整个软件或某种软件功能来严格地测试,而并没有通过检查程序的源代码或者很清楚地了解该软件的源代码程序具体是怎样设计的。测试人员通过输入他们的数据然后看输

2021-11-08 20:21:20 545

原创 C语言操作文件 —— 筛选出文件中带有空格的数据行

代码思路:打开文件把指针指到文件开头处遍历每一行数据遍历这一行数据,判断空格,写文件关闭文件#include <stdio.h>#include <string.h>#include <stdlib.h>int main(){ int len,i; char tmpBuf[128]; FILE *fp; FILE *fp2; fp = fopen("input.txt","r"); fp2 = fopen("output.tx

2021-11-04 15:30:39 1085

原创 交叉编译Linux SDK —— Makefile

CC = /home/aston/flp/dicpen_rk3326_linux/buildroot/output/rockchip_rk3326_64/host/bin/aarch64-linux-gccCXX = /home/aston/flp/dicpen_rk3326_linux/buildroot/output/rockchip_rk3326_64/host/bin/aarch64-linux-g++TLINCLUDE += -I ./includetarget = testobje

2021-09-10 16:20:27 319

原创 该虚拟机似乎正在使用中。 如果该虚拟机未在使用,请按“获取所有权(t)”按钮获取它的所有权。否则,请按“取消(c)”按钮以防损坏。 配置文件: d:\software\astonubuntu16040

虚拟机非正常关闭后,再一次打开,报错 【该虚拟机似乎正在使用中。 如果该虚拟机未在使用,请按“获取所有权(t)”按钮获取它的所有权。否则,请按“取消©”按钮以防损坏。 配置文件: d:\software\astonubuntu160403-64\ubuntu160403x64.vmx。】解决方法:将 d:\software\astonubuntu160403-64 目录下的所有 .lck文件夹 删除,然后再重新打开 d:\software\astonubuntu160403-64\ubuntu16040

2021-05-21 11:10:55 486

原创 SDK 和 API 的区别

SDKSDK一般指软件开发工具包软件开发工具包一般都是一些软件工程师为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件时的开发工具的集合。软件开发工具广义上指辅助开发某一类软件的相关文档、范例和工具的集合。譬如做单片机软件开发,st公司提供软件开发工具包(包含数据手册、开发手册、STM32CubeMX、MDK和范例等)。软件开发工具包是一些被软件工程师用于为特定的软件包、软件框架、硬件平台、操作系统等创建应用软件时的开发工具的集合,一般而言SDK即开发Windows平台下的应用程序所使用的S

2021-04-13 15:30:27 1264

原创 Linux学习笔记4——Linux磁盘与文件系统管理

1、基本上Linux的正统文件系统为Ext2/Ext3/Ext4,该文件系统内的信息主要有:superblock:记录此filesystem的整体信息,包括inode/block的总量、使用量、剩余量,以及文件系统的格式与相关信息等;inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的block号码;block:实际记录文件的内容,若文件太大时,会占用多个block。2、Ext文件系统的数据存取为索引式文件系统(indexed allocation)3、需要碎片整

2021-03-17 17:12:03 123

原创 Linux学习笔记3——Linux文件与目录管理

权限与指令间的关系权限对于使用者账号来说是非常重要的,因为它可以限制使用者能不能读取/建立/删除/修改文件或目录。一、让用户能进入某目录成为【可工作目录】的基本权限为何:可使用的指令:例如cd等变换工作目录的指令目录所需权限:用户对这个目录至少需要具有 x 的权限额外需求:如果用户想要在这个目录内利用ls查阅文件名,则用户对此目录还需要 r 的权限。二、用户在某个目录内读取一个文件的基本权限为何:可使用的指令:例如本章谈到的cat,more,less等等目录所需权限:用户对这个目录至少

2021-03-15 15:53:33 223

原创 uboot概述

1、为什么要有uboot1.计算机系统的主要部件计算机系统就是有CPU来做核心进行运行的系统。典型的计算机系统有:PC机(台式机+笔记本)、嵌入式设备(手机、平板电脑、游戏机)、单片机(家用电器像电饭锅、空调)计算机系统的组成部件非常多,不同的计算机系统组成部件也不同。但是所有的计算机系统运行时需要的主要核心部件都是3个东西:CPU+外部存储器(flash/硬盘)+内部存储区(DDR SDRAM/SRAM)2.PC机的启动过程典型的PC机的部署:BIOS程序部署在PC机主板上(随主板出厂时已

2021-03-11 17:12:56 1415

原创 Linux学习笔记0——Linux命令

1、当前主流操作系统及其特点当前主流的操作系统:Windows、Android、IOS、Symbian(塞班,用于诺基亚)、Linux/Unix。Windows:傻瓜式、好学习。Linux:Linux认为每一个用户都是专业人士,操作麻烦,学习困难。优点:免费、开源,性能好,可移植性好,设计理念优秀。Android:移动操作系统,基于Linux,主要用于移动设备,如手机、平板等。IOS:另辟蹊径,很优秀,创造性,走钢丝。嵌入式操作系统:Linux + WinCE当前:消费电子用Android,工

2021-03-08 22:42:17 280

原创 Linux学习笔记2——磁盘分区

这一章在规划的重点是为了要安装Linux,那Linux系统是安装在计算机组件的哪个部分呢?就是磁盘啦!所有先来认识一下磁盘。我们知道一块磁盘是可以被分割成多个分割槽的(partition),以旧有的Windows观点来看,你可能会有一颗磁盘并且将它分割成为C: , D: , E: 槽!那个C,D,E就是分割槽。但是Linux的设备都是以文件的形态存在,那分割槽的文件名又是什么?如何进行磁盘分区,磁盘分区有哪些限制?磁盘的组成主要有磁盘盘、机械手臂、磁盘读取头与主轴马达所组成,而数据的写入其实是在磁盘盘上面

2021-03-05 11:42:59 451 2

原创 Linux学习笔记1——Linux概述

操作系统主要在管理与驱动硬件,因此必须要能够管理内存、管理设备、负责任务管理以及提供应用程序开发接口等等。要使用硬件时,就得需要透过应用软件或者是壳软件(shell)的功能,来呼叫操作系统操纵硬件工作。因此,目前称为操作系统的,除了上述功能外,通常已经包含了日常工作所需要的应用软件在内了。每种操作系统都有自己的核心与核心工具,故不同操作系统其操作硬件的方式也不同。操作系统对下驱动硬件,对上提供应用程序开发接口。Q1、你在你的主机上面安装了一张网卡,但是开机之后,系统却无法使用,你确定网卡是好的,那么

2021-03-04 11:01:21 155 1

原创 读取STM32芯片的唯一ID和MAC地址

每个STM32微控制器都自带一个96位的唯一ID,这个ID在任何情况下都是唯一且不允许修改的,这96位的ID可以以字节(8位)为单位读取,也可以以半字(16位)或全字(32位)读取。不同型号的STM32芯片首地址不同,UID首地址也不同。F1系列UID首地址——0x1ffff7e8F2和F4系列 ——0x1fff7a10F3和F0系列 ——0x1ffff7acF7系列 ——0x1ff0f420L0和L1系列 ——0x1ff80050L4系列

2021-02-19 10:01:52 6390

原创 STM32F4开发指南笔记49——MDK的编译过程及文件类型全解

1、编译过程1.1 编译过程简介首先简单了解下MDK的编译过程,它与其它编译器的工作过程是类似的,该过程见下图:编译过程生成的不同文件将在后面的小节详细说明,此处先抓住主要流程来理解。编译,MDK软件使用的编译器是armcc和armasm,它们根据每个c/c++和汇编源文件编译成对应的以“.o”为后缀名的对象文件(Object Code,也称目标文件),其主要内容是从源文件编译得到的机器码,包含了代码、数据以及调试使用的信息;链接,链接器armlink把各个.o文件及库文件链接成一个映像文件“

2021-02-18 08:24:05 1859

原创 MQTT协议

1.MQTT协议简介简介:MQTT是一个客户端-服务端架构的发布/订阅模式的消息传输协议。它的设计思想是轻巧、开放、简单、规范,因此易于实现。这些特点使得它对很多场景来说都是很好的选择,包括受限的环境如机器与机器的通信(M2M)以及物联网环境(IOT),这些场景要求很小的代码封装或者网络带宽非常昂贵。本协议运行在TCP/IP,或其他提供了有序、可靠、双向连接的网络连接上。它有一下特点:使用发布/订阅消息模式,提供了一对多的消息分发和应用之间的解耦。消息传输不需要知道负载内容。提供三种等级的服务质

2021-01-28 15:54:51 340 1

原创 PID控制算法

PID控制算是应用非常广泛的控制算法了。小到控制一个元件的温度,大到控制无人机的飞行姿态和飞行速度,智能车的电机舵机输出等。一、案例偏差 = 目标值 - 真实值。假如,我现在开始对加热器进行加热,我的目标温度是100度,但是此时从温度传感器传回来的实际温度值是20度,此时的偏差就是80度。如何通过控制算法来解决这个问题呢?往下看。二、位式控制算法 在传统的位式控制算法中,输出信号只有2种...

2021-01-06 13:48:57 3016 1

原创 Python练习题23:数字的鲁棒输入

#complex()和complex(eval())之间的比较将能够排除非数字类型的输入num = input()try: if complex(num) == complex(eval(num)): print(eval(num) ** 2)except: print("输入有误")

2020-11-25 14:48:48 933

原创 基于socket通信的C/S通信

socket是通信系统双方建立的一个标准约定,即“接头暗号”,其内部封装有各种网络通信所需要的功能函数。系统中的应用层功能的实现是需要通过传输层进行服务中转的,分布式的系统决定了网络系统中同一时间内应用程序可能是多个的,但是传输层只能有一个,此时传输层就需要同时为多个应用程序进程提供并发服务。socket接口能够为不同的应用程序进程和网络连接创建各自的身份标识,规范应用程序与TCP/IP协议之间的数据交互。1、socket通信原理应用程序进程间的网络通信和连接的身份主要通过目标IP地址、传输层协议和端口

2020-11-20 17:39:12 1442

原创 Python练习题22:文件字符分布

f = open("latex.log")s = 0 #总字符数d = {} #字典类型for i in range(26): #字典键入,0-25对应a-z,赋值为0 d[chr(ord('a')+i)] = 0for line in f: #逐行遍历文件 for i in line: #遍历一行 d[i] = d.get(i,0) + 1 s += 1 #累积总字符数print("共{}字符".format(s),end="") #不换行打印for i in range(.

2020-11-17 11:41:15 3074

原创 Python练习题21:CSV格式清洗与转换

f = open("data.csv")ls = f.readlines()ls = ls[::-1] #按行进行倒序排列lt = []for line in ls: line = line.strip("\n") #去掉line两端的换行符 line = line.replace(" ","") #去掉空格 lt = line.split(',') lt = lt[::-1] #每行数据倒序排列 print(";".join(lt))...

2020-11-17 11:17:18 925

原创 Python练习题20:文本的平均列数

f = open("latex.log")l = 0 #总行数s = 0 #总列数for line in f: #获取的line包含每行最后的换行符\n,所以去掉再统计 line = line.strip("\n") #去掉line两端的换行符 if len(line)== 0: #去掉空行 continue l += 1 s += len(line)print(round(s/l)) #round四舍五入函数...

2020-11-17 11:09:46 2505

原创 Python练习题19:《沉默的羔羊》之最多单词

import jiebatxt = open("E:\\LX\\沉默的羔羊.txt", encoding='utf-8').read()words = jieba.lcut(txt) #精确模式分词,返回一个列表类型d = {} #建立一个空字典,用来存放键值对数据for word in words: d[word] = d.get(word, 0) + 1 #如果这个词语(键)在字典中,其值+1,不在则赋以0maxc = 0maxw = ""for key in d: if.

2020-11-09 10:32:04 7531 3

原创 Python练习题18:《三国演义》人物出场统计

import jieba #中文分词第三方库,使用之前要额外安装(cmd ——> pip install jieba)txt = open("E:\\LX\\threekingdoms.txt",'r',encoding = 'utf-8').read() #打开三国演义文件并读出来excludes = {"将军","却说","荆州","二人","不可","不能","如此","商议","如何",\ "主公","军士","左右","军马","引兵","次日","大喜","天下","东

2020-11-09 10:04:42 4952 2

空空如也

空空如也

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

TA关注的人

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