自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Ubuntu更新gcc版本

要在 Ubuntu 上更新 GCC 版本到 11.3,您可以按照以下步骤操作:首先,您需要添加 Ubuntu Toolchain PPA 存储库,该存储库包含了最新的 GCC 版本。使用以下命令添加该存储库:更新软件包列表安装 GCC 11.3更改默认 GCC 版本设置 GCC 11.3 为默认的 GCC 版本:检查 GCC 版本请注意,如果您在更新 GCC 之前已经安装了其他版本的 GCC,您可能需要使用 update-alternatives 命令来更新默认版本。如果系统中已经存在多个

2023-11-03 08:35:15 3361

原创 如何让chatGPT给出高质量的回答?

如:简述一篇讲解世界名画的文章,是写给小学生还是艺术系的大学生?如:“用50字以内简述”、“请按以下格式回答:步骤1,步骤2…如:将所有的评论内容,提炼出30个关键词。如:简述、解释、翻译、总结、润色。

2023-10-23 00:23:35 242

原创 移植thttpd

【代码】移植thttpd。

2023-06-25 00:49:50 226

原创 通用交叉编译

【代码】通用交叉编译。

2023-06-25 00:38:12 85

原创 调试利器GDB

GDB调试

2023-02-07 23:19:04 205 1

原创 samba使用教程

samba使用

2023-01-02 23:40:16 245

原创 C++对象模型分析(上)

C++对象模型分析(上)回归本质class是一种特殊的struct在内存中class依旧可以看作变量的集合class与struct遵循相同的内存对齐规则class中的成员函数与成员变量是分开存放的每个对象有独立的成员变量所有对象共享类中的成员函数值得思考的问题class A{ int i; int j; char c; double d;}sizeof(A) = ?struct B{ int i; int j

2022-01-12 10:30:37 67

原创 多态的概念和意义

多态的概念和意义函数重载重写父类中被重写的函数依然会继承给子类子类中重写的函数将覆盖父类中的函数通过作用域分辨符(::)可以访问到父类中的函数Child c;Parent* p = &c;c.Parent::print();c.print();p->print();面向对象中期望的行为根据实际的对象类型判断如何调用重写函数父类指针(引用)指向父类对象则调用父类中定义的函数子类对象则调用子类中定义的重写函数面向对象中的多态的概念根据实际的对象

2022-01-10 14:10:33 77

原创 同名覆盖引发的问题

同名覆盖引发的问题父子间的赋值兼容子类对象可以当做父类对象使用(兼容性)子类对象可以直接赋值给父类对象子类对象可以直接初始化父类对象父类指针可以直接指向子类对象父类引用可以直接引用子类对象//48-1.cpp#include <iostream>#include <string>using namespace std;class Parent{public: int mi; void add(int i) {

2022-01-08 17:50:48 53

原创 父子间的冲突

父子间的冲突思考子类中是否可以定义父类中的同名成员?如果可以,如何区分?如果不可以,为什么?//47-1.cpp#include <iostream>#include <string>using namespace std;class Parent{public: int mi;};class Child : public Parent{public: int mi;};int main(){ Child c;

2022-01-08 17:49:13 51

原创 继承中的构造与析构

继承中的构造与析构思考如何初始化父类成员?父类构造函数和子类构造函数有什么关系?子类对象的构造子类中可以定义构造函数子类构造函数必须对继承而来的成员进行初始化直接通过初始化列表或者赋值的方式进行初始调用父类构造函数进行初始化父类构造函数在子类中的调用方式默认调用适用于无参构造函数和使用默认参数的构造函数显示调用通过初始化列表进行调用适用于所有父类构造函数class Child : public Parent{public: Child()

2022-01-07 23:04:13 156

原创 不同的继承方式

不同的继承方式1、被忽略的细节冒号(:)表示继承关系,Parent表示被继承的类,public的意义是什么?class Parent{ };class Child : public Parent{ };2、有趣的问题是否可以将继承语句中的public换成proteced或private?如果可以,与``public`继承有什么区别?//45-1.cpp#include<iostream>#include<string>using na

2022-01-06 22:50:54 415

原创 继承中的访问级别

继承中的访问级别1、值得思考的问题子类是否可以直接访问父类的私有成员?2、思考过程//44-1.cpp#include<iostream>#include<string>using namespace std;class Parent{private: int mv;public: Parent() { mv = 100; } int value() { return mv;

2022-01-05 23:26:55 60

原创 继承的概念和意义

继承的概念和意义1、思考类之间是否存在直接的关联关系?2、生活中的例子2.1、组合关系:整体与部分的关系//43-1.cpp#include <iostream>#include <string>using namespace std;class Memory{public: Memory() { cout << "Memory()" << endl; } ~Memory()

2022-01-04 22:26:02 124

原创 应用协议解析模块(下)

应用协议解析模块(下)1、问题如何通过socket文件描述符实时解析协议消息?2、深度思考从文件描述符是否能够获取足够的数据?数据量足够读取12字节解析消息头读取数据填充payload(length)数据量不足无法获取消息头所需数据(如何处理?解析状态如何切换?)无法获取payload完整数据(如何处理?是否追加?)3、解决方案策略:尽力获取数据,实时解析即便当前获取1字节,也可根据状态进行解析支持不同数据源多次接力解析(从内存或文件描述符交替获取数据)

2021-12-31 11:44:49 222

原创 应用协议解析模块(上)

应用协议解析模块(上)1、问题如何在代码层面封装协议细节?如何将接收缓冲区中的数据解析成为Message?1.1深度思考数据是否能够解析成为Message?数据量足够如果数据量足够,是否能够解析不止一个Messge?如何处理剩余数据(属于下一个Message)?数据量不足是否达到协议最小长度(12字节)?如何处理数据量超过最小长度,但不足以创建一个Message的情况?2、初步解决方案定义一个模块用于从字节流解析Message可从指定内存或从指定文件描述符读取并

2021-12-31 11:44:06 123

原创 应用层协议的设计与实现

应用层协议的设计与实现1、问题2、小知识发送缓冲区数据先进入发送缓冲区,之后由操作系统送往远端主机接收缓冲区远端数据被操作系统收到后放入接收缓冲区之后应用程序从接收缓冲区读取数据3、TCP应用编程中“问题”数据接收端无法知道数据的发送方式4、网络编程中期望每次发送一条完整的消息,每次接收一条完整的消息及时接收缓冲区中有多条消息,也不会出现消息粘连消息中涵盖了数据类型和数据长度等信息5、应用层协议设计什么是协议?协议是通信双方为数据交换而建立的规则

2021-12-26 12:40:04 2267

原创 TCP与UDP

TCP与UDP1、TCP/IP分层结构2、TCP/IP分层结构应用层:各个应用程序可以定义(使用)各种各样的协议传输层:确保发出的数据能够到达目标主机,完成数据传输网络层:填写数据包地址,选择数据传递路径数据链路层:融合不同连接方式的链路,屏蔽网络差异物理层:具体连接方式:有线,无线,光纤…3、TCP/IP工作方式4、TCP/IP层次结构的特点上层依赖临近下层的能力,下层只为直接邻接上层服务上层不知道下层的工作机制,下层不管上层传输的数据内容不做跨层服务,层次结构中的角色

2021-12-26 12:38:58 834

原创 基于多路复用的服务端

基于多路复用的服务端1、目前服务端的瓶颈分析2、解决方案:阻塞变轮询通过select()函数首先监听服务端server_fd,目标事件为“连接”(读)当事件发生(客户端连接)则调用sccpet()接收连接将client_fd加入监听范围,目标事件为“数据接收”循环查看各个被监听的文件描述符是否有时间发生3、实现方式4、实现逻辑5、实现关键动态调整需要监视的文件描述符当接收到客户端连接时,将客户端文件描述符加入监听变量(fd_set)中当发现客户端断开时,在监听变量(fd

2021-12-26 12:38:20 1078

原创 尝鲜select多路复用

尝鲜select多路复用问题:如何增强服务端能力,同时支持多个客户端?Linux的设计哲学一切皆文件Linux中的文件是什么?狭义:文件系统中物理意义上的文件(逻辑上关联的数据集合)广义设备,管道,内存…Linux管理的一切对象理解文件描述符(File Descriptor)文件描述符是一个非负整数值,本质上一个句柄一切对用户(程序员)透明的资源标识都可以看做句柄用户使用文件描述符(句柄)与内核交互内核通过文件描述符操作对应资源的数据结构一切皆文件的

2021-12-26 12:37:30 759

原创 深入浅出IP地址

深入浅出IP地址问题:网络编程接口中一些参数的意义是什么?socke = socket(PF_INET, SOCK_STREAM, 0);socket参数详解int socket(int domain, int type, int protocol);参数意义domain套接字中使用的协议族信息type套接字数据传输类型信息protocol设备间通信使用的协议信息socket()中domain参数(协议族)PF_INET:IPv4互联网协议族PF

2021-12-26 12:33:02 1353

原创 智能指针分析

智能指针分析1、永恒的话题内存泄漏(臭名昭著的Bug)动态申请堆空间,用完后不归还C++语言中没有垃圾回收的机制指针无法控制所指堆空间的生命周期2、示例程序#include<iostream>#include<string>using namespace std;class Test{private: int i;public: Test(int i) { this->i = i; }

2021-11-08 22:30:14 68 1

原创 经典问题解析三

经典问题解析三1、关于赋值的疑问什么时候需要重载赋值操作符?编 译器是否提供默认的赋值操作?编译器为每个类默认重载了赋值操作符默认的赋值操作符仅完成浅拷贝当需要进行深拷贝时必须重载赋值操作符赋值操作符与拷贝构造函数有相同的存在意义2、代码实例如何解决?//36-1.cpp#include<iostream>#include<string>using namespace std;class Test{ int* m_pointer;p

2021-11-07 00:06:54 381

原创 函数对象分析

函数对象分析1、客户需求编写一个函数函数可以获取斐波那契数列每项的值每调用一次返回一个值函数可根据需要重复使用for(int i = 0; i < 10; i++){ cout << fib() << endl;}//35-1.cpp#include <iostream>#include <string>using namespace std;int fib(){ static int a0

2021-11-06 22:24:23 62

原创 基于rtthread studio的STM32F407OTA升级(http篇)

基于rtthread studio的STM32F407OTA升级(http篇)0、前提0.1、已经完成联网配置STM32F407VG联网笔记(基于rtthread studio)_LangLang_2020的博客-CSDN博客0.2、已经完成ymodem_OTA升级基于rtthread studio的STM32F407OTA升级(ymodem篇)_LangLang_2020的博客-CSDN博客1、相关配置2、更改http_ota.c的文件内容将原文件中的内容替换为以下内容,具体细节可

2021-11-06 18:05:07 1414 2

原创 基于rtthread studio的STM32F407OTA升级(ymodem篇)

基于rtthread studio的STM32F407OTA升级(ymodem篇)0、部分电路图1、在线生成Bootloader官方参考地址在线生成地址提示:1M = 1024kB = 8 * 128 kB128kB = 0x20000此处,我将ROM按以下分区,大家可根据实际情况自行划分按照上面分析,分区表配置为2、烧录BootLoader2.1、擦除芯片2.2、烧录boot2.3、烧录结束串口打印3、配置工程3.1、创建工程3.2、配置cu

2021-11-05 16:35:57 1605

原创 数组操作符的重载

数组操作符的重载1、问题string类对象还具备C方式字符串的灵活性吗?还能直接访问单个字符吗?2、字符串类的兼容性string类最大限度的考虑了C字符串的兼容性可以按照使用C字符串的方式使用string对象string s = "a1b2c3d4e";int n = 0;for(int i = 0; i < s.length(); i++){ if( isdigit(s[i]) ) { n++; }}3、编程实验#include

2021-11-03 23:08:07 112

原创 STM32F407VG联网笔记(基于rtthread studio)

STM32F407VG联网笔记(基于rtthread studio)0、部分原理图1、创建工程2、配置CUBEMX2.1、配置时钟2.2、配置串口uart22.3配置ETH[对应原理图进行配置](## 0、部分原理图)2.4、保存3、修改board.h配置3.1、修改时钟为HSE3.2、打开BSP_USING_ETH4、实现PHY复位函数/* * Copyright (c) 2006-2021, RT-Thread Development Team *

2021-11-03 17:07:26 922

原创 C++中的字符串类

C++中的字符串类一、历史遗留问题C语言不支持真正意义上的字符串C语言用字符数组和一维函数实现字符串操作C语言不支持自定义类型,因此无法获得字符串类型二、解决方案从C到C++的进化过程引入了自定义类型在C++中可以通过类完成字符串类型的定义问题:C++中的原生类型系统是否包含字符串类型?三、标准库中的字符串类C++语言直接支持C语言的所有概念C++语言中没有原生的字符串类型C++标准库提供了string类型string直接支持字符串连接string直接支持字符串

2021-11-02 23:53:02 251

原创 CS模型的核心精要

CS模型的核心精要1、服务端编程初体验1.1、客户端/服务端编程模式服务端长期暴露网络,并等待客户端连接客户端发起连接动作,并等待服务端回应特点:服务端无法主动连接客户端客户端只能按照预定义的方式连接服务端1.2、服务端编程模式准备网络连接绑定端口进入端口监听状态等待连接1.3、服务端核心工作:绑定&监听&接收绑定int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen

2021-11-02 21:52:06 286

原创 网络编程核心概念与模式

网络编程核心概念与模式1、问题如何进行网络编程?2、网络编程的本质​ 使用操作系统提供的接口函数,使得应用程序具备收发网络数据的能力。网络接口在代码层面是操作系统提供的函数网络编程只是一系列系统函数的花式玩法应用程序通过网络接口使用操作系统的联网能力网络编程是特定领域的C语言程序设计3、网络编程核心概念协议:为进行数据通信而预定义的数据规则地址:网络通信中的用于标识设备的整数值端口号:设备为收发数据而指定的数值,用于标识具体连接可理解为:设备中用于网络通信的数

2021-11-02 11:41:27 288

原创 自动生成依赖关系(中)

自动生成依赖关系(中)1.makefile中的include关键字类似C语言中的include将其他文件的内容原封不动的搬入当前文件2.make对include关键字的处理方式在当前目录搜索或指定目录搜索目标文件搜索成功:将文件内容搬入当前makefile中搜索失败:产生警告以文件名作为目标查找并执行对应规则当文件名对应的规则不存在时,最终产生错误3.下面代码如何执行?.PHONY : allinclude test.txtall : @echo "th

2021-10-23 21:54:50 67

原创 自动生成依赖关系(上)

自动生成依赖关系(上)1.思考目标文件(.o)是否只依赖于源文件(.c)编译器如何编译源文件和头文件?2.编译行为带来的缺陷预处理器将头文件中的代码直接插入源文件编译器只通过预处理后的源文件产生目标文件因此,规则中以源文件为依赖,命令可能无法执行3.下面的makefile有没有问题?OBJS := func.o main.ohello.out : $(OBJS) @gcc -o $@ $^$(OBJS) : %.o : %.c func.h @gcc -o $@

2021-10-23 21:00:10 75

原创 变量与函数的综合示例

变量与函数的综合示例1、实战需求自动生成target文件夹存放可执行文件自动生成obj文件夹存放编译生成的目标文件(*.o)支持调试版本的编译选项考虑代码的扩展性2、工具原料$(wildcard _pattern)获取当前工程目录中满足_pattern的文件或目录列表$(addprefix _prefix, _names)给名字列表_names中的每一个名字增加前缀_prefix3、关键技巧自动获取当前目录下的源文件列表(函数调用)SRCS := $(wil

2021-10-23 19:38:57 119

原创 函数定义及调用

函数定义及调用1、makefile中支持函数的概念make解释器提供了一些列的函数供makefile调用在makefile中支持自定义函数实现,并调用执行通过define关键字实现自定义函数2、自定义函数的语法3、深入理解自定义函数自定义函数是一个多行变量,无法直接调用自定义函数是一种过程调用,没有任何的返回值自定义函数用于定义命令集合,并应用于规则中4、编程实验.PHONY : testdefine func1 @echo "My name is $(0)"ende

2021-10-23 16:12:09 76

原创 条件判断语句

条件判断语句1、makefile中支持条件判断语句可以根据条件的值来决定make的执行可以比较2个不同变量或者变量和常量值if xxx (arg1,arg2)#for tureelse#for falseendif2、注意事项条件判断语句只能用于控制make实际执行的语句;但,不能控制规则中命令的执行。3、条件判断语句的语法说明常用形式if xxx (arg1,arg2)其他合法形式if xxx “arg1” “arg2”if xxx ‘arg1’ ‘arg

2021-10-16 16:41:50 201

原创 变量的高级主题(续)

变量的高级主题(续)1、环境变量(全局变量)makefile中能够直接使用环境变量的值运行make时指定"-e"选项,优先使用环境变量2、为什么要在makefile中使用环境变量优势环境变量可以在所有makefile中使用劣势过多的依赖环境变量会导致异移植性降低3、变量在不同makefile之间传递方式直接在外部定义环境变量进行传递使用export定义变量进行传递(定义临时环境变量)定义make命令行变量进行传递(推荐)4、编程实验JAVA_HOME :=

2021-10-16 14:49:11 49

原创 变量的高级主题

变量的高级主题1、变量值的替换使用指定字符(串)替换变量中的后缀字符(串)语法格式:$(var:a=b)或${var:a=b}替换表达式中不能有任何的空格make中支持使用${}对变量进行取值src := a.cc b.cc c.ccobj := $(src:cc=o)test : @echo "obj => $(obj)" //编译运行$ makeobj => a.o b.o c.o2、变量的模式替换使用%保留变量值中的指定字符,替代其他字符语

2021-10-14 22:37:41 53

原创 预定义变量的使用

预定义变量的使用1、预定义变量在makefile中存在一些预定义的变量自动变量@,@,@,^,$<特殊变量(MAKE),(MAKE),(MAKE),(MAKECMDGOALS),$(MAKEFILE_LIST)(MAKEVERDION),(MAKE_VERDION),(MAKEV​ERDION),(CURDIR),$(.VARIABLES)…2、自动变量的意义$@当前规则中触发命令执行的目标$^当前规则中的所有依赖$<当前规则中的第一

2021-10-14 21:05:37 186

原创 变量和不同的赋值方式

变量和不同的赋值方式1、类比C语言变量定义makefile中支持程序设计语言中变量的概念makefile中的变量只代表文本数据(字符串)makefile中的变量名规则变量名可以包含字符,数字,下划线不能包含":","#","=“或” "变量名大小写敏感2、变量的定义和使用3、编程实验CC := gccTARGET := hello.out$(TARGET) : fun.o main.o $(CC) -o $(TARGET) fun.o main.o fun.o

2021-10-11 00:55:28 208

空空如也

空空如也

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

TA关注的人

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