自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 c++中的__declspec(dllexport) 和 __declspec(dllimport)

是Microsoft Visual C++特有的修饰符,用于声明在动态链接库(DLL)中定义的函数和变量,以便在另一个模块中使用。它告诉编译器该函数或变量是从 DLL 中导入的,而不是在当前模块中定义的。当你在一个项目中使用 DLL 时,你需要告诉编译器这些函数和变量是从 DLL 中导入的。这样,编译器就会在链接时查找相应的函数和变量的定义,并将其地址替换为导入的 DLL 中的地址。举个例子,假设你有一个名为MyDLL的 DLL,其中有一个函数。在你的项目中使用这个 DLL 时,你需要在项目中使用。

2024-04-23 09:03:06 506

原创 c++中的复制(深拷贝/浅拷贝/拷贝构造函数/拷贝赋值运算符/移动语义)

移动构造函数的形式为。

2024-04-22 16:24:20 1157

原创 cpp中的右值引用(&&)及其相关拓展知识

在早期的 C++ 中,如果一个函数需要将它所接收到的参数传递给另一个函数,你可能需要手动编写多个重载版本,以适应各种可能的参数类型和数量。使用完美转发,你可以编写一个通用的函数模板,它接收任意类型和数量的参数,并将它们转发给另一个函数,保持原始参数的类型和值不变。完美转发(perfect forwarding)是 C++11 引入的一个重要特性,它允许函数将它所接收到的参数(包括其类型和值)转发给其它函数,同时保持原始参数的类型和值不变。是一个模板函数,它将一个左值转换为对应的右值引用。

2024-04-21 11:12:04 700

原创 设计模式之创建型模式详解

简单工厂模式(Simple Factory Pattern):又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。工厂方法模式(Factory Method Pattern)又称为工厂模式,也叫虚拟构造器(Virtual Constructor)模式或者多态工厂(Polymorphic Factory)模式,它属于类创建型模式。

2024-04-20 09:13:21 1256

原创 c++中什么叫做窄式转换(narrowing conversions)以及窄式转换解决方案

窄化转换(narrowing conversion)是指将一个值转换为另一种类型,但转换过程中丢失了信息或超出了目标类型的表示范围的情况。在C++中,窄化转换是一种可能导致数据丢失或不确定行为的类型转换,因此在某些情况下是不允许的。例如,将一个浮点数转换为整数类型时可能发生窄化转换。如果浮点数的值大于整数类型的最大值或小于最小值,则会丢失小数部分的信息,这可能导致不正确的结果。

2024-04-19 16:11:48 181

原创 c++中智能指针的介绍与基本使用

在C++中,智能指针是一种用于管理动态分配的内存资源的对象。它们可以自动地在不再需要时释放内存,从而帮助避免内存泄漏和悬挂指针等问题。管理的对象,但不会增加引用计数。因此,它不会影响所管理对象的生命周期。管理内存时,可能会导致内存泄漏,因为引用计数永远不会达到零。循环引用(循环依赖)的问题。当两个对象相互引用并且使用。来打破循环引用,可以避免这个问题。的补充,用于解决循环引用的问题。是一种弱引用智能指针,它指向由。另外,C++11还引入了。

2024-04-18 14:52:30 655

原创 c++中类型转换运算符详细说明

类型转换运算符是 C++ 中用于执行类型转换的一组特殊运算符,用于在不同类型之间进行转换。

2024-04-18 08:59:37 168

原创 c++中各种运算符

【代码】c++中各种运算符。

2024-04-17 22:02:14 422

原创 c++中mutable关键词解释以及详细用法

成员函数被设计为不修改对象的状态。然而,在某些情况下,我们可能希望在。成员函数中修改某些状态,比如缓存值的更新。关键字直接放在类的成员变量声明前面,表示该成员变量可以在。成员函数中修改某些状态的情况很有用。关键字用于修饰类的成员变量,它允许被。

2024-04-17 19:44:01 148

原创 c++中const的最全详细说明和使用(最全)

在C++中,const是一个非常重要的关键字,用于声明常量、修饰变量、参数和成员函数。下面是关于const。

2024-04-17 17:52:42 431

原创 c++中字符串string常用API

在C++中,std::string是标准库中用于处理字符串的一个类。

2024-04-17 16:10:57 211

原创 c++中虚函数、纯虚函数以及虚函数的实现原理

虚函数(Virtual Functions)和纯虚函数(Pure Virtual Functions)是 C++ 中用于实现多态性的重要概念。

2024-04-17 12:56:29 548

原创 c++中的静态(内容包含类外、类内以及局部的静态)

在 C++ 中,你可以在任何作用域(例如文件作用域或函数作用域)内声明静态变量。这些变量不会与任何特定的类相关联,它们只是在声明它们的作用域内可见。静态变量是在程序运行期间保持其值的变量,但其作用域受限于声明它的区域。静态变量在函数内部声明时,生命周期与程序的执行周期相同,但作用域仅限于声明它的函数内部。静态变量在函数外部声明时,生命周期也与程序执行周期相同,但作用域为文件作用域。在上面的例子中,是在全局作用域内声明的静态变量,而是在函数作用域内声明的静态变量。

2024-04-17 12:47:19 328

原创 c++中类(class)和结构体(struct)的对比

当你在C++中定义一个类(class)或结构体(struct)时,你实际上在创建一个自定义的数据类型,用于组织和操作数据。

2024-04-16 15:28:14 348

原创 c++中公有继承和私有继承的区别

在C++中,公有继承(public inheritance)和私有继承(private inheritance)是两种不同的继承方式,它们在访问权限和派生类与基类之间的关系上有所不同。

2024-04-16 15:25:28 300

原创 c++中的单继承、多继承和虚拟继承

在C++中,继承是面向对象编程的重要特性之一,允许一个类(称为派生类)从另一个类(称为基类)继承成员和方法。单继承、多继承和虚拟继承是三种不同的继承方式,它们有不同的特点和用途。

2024-04-16 15:19:55 320

原创 c++中的菱形继承问题详细说明

菱形继承问题是指在多重继承中出现的一种特定情况,其中一个派生类同时从两个不同的基类继承,而这两个基类又都继承自同一个共同的基类。这种情况形成了一个菱形的继承结构,因此被称为菱形继承问题。

2024-04-16 15:17:15 324

原创 c++中ranges::min()说明和使用

在C++中,函数是C++20引入的一个标准库函数,用于在一个范围内找到最小值。

2024-04-16 13:53:25 343

原创 c++ lambda表达式的使用方法

C++11引入了lambda表达式,它是一种轻量级的匿名函数,允许我们在需要函数的地方直接定义函数,而无需专门声明函数。lambda表达式的语法简洁,并且非常灵活,可以捕获外部变量,具有与普通函数相似的功能。

2024-04-16 11:16:30 210

原创 c++指针和引用的详细介绍和使用

指针是一个变量,其存储的是另一个变量的。指针变量本身有自己的内存地址和数值,指向另一个变量的地址。指针使用来声明和访问,使用解引用操作符来访问指针所指向的值。指针可以被重新赋值来指向不同的内存地址,也可以是空指针(nullptr或NULL),即指向空地址。指针需要手动分配和释放内存,使用和操作符。指针通常用于动态内存分配、数组、函数指针等情况,以及需要在运行时改变目标的情况。引用是一个别名,它给现有变量起了一个,使得可以通过该别名来访问原始变量。引用不是一个对象,而是现有变量的别名。引用使用来声明和访问,不

2024-04-16 10:06:09 1313

原创 c++中pair的使用方式以及一些常见的操作

在很多算法中都很有用,例如在排序算法中,可能想要保持每个元素与其索引的关联,可以使用。是一个标准库模板,用于将两个值作为一个单元进行存储。:这是一种方便的方法,它接受两个参数并返回一个初始化好的。中的元素就被排序了,但是索引信息仍然与值关联着。有时候函数需要返回多个值,此时可以使用。成员变量访问,第二个元素可以通过。:通过提供两个值来直接初始化。来将两个值组合成一个有序对。对象的第一个元素可以通过。可以使用多种方式创建。

2024-04-15 13:15:52 665

原创 c++容器说明和基本使用方法(最全/全部内容)

vectordequelistarraystringvector和array是C++11新增类型。与内置数组相比,array更安全易用。没有size操作。

2024-04-15 10:41:46 964

原创 【嵌入式学习-STM32CubeMX篇】点亮LED灯的GPIO配置和使用

你可以通过控制引脚的电平状态,即将其设置为高电平(高电压)或低电平(低电压),来控制连接的外部设备的行为。一个表示低电压 一个表示高电压。在输出模式下,你可以将引脚设置为高电平(输出高电压)或低电平(输出低电压),以控制连接的外部设备的行为。其中GPIO Pull-up(上拉电阻)和Pull-down(下拉电阻)是与GPIO输入模式相关的选项,用于确定当引脚处于未连接或不被驱动时的默认电平状态。因此,在设置GPIO引脚为输出模式时,你只需关注编程或代码中设置引脚的电平状态,而不需要考虑上拉或下拉电阻选项。

2023-10-26 16:15:55 1201

原创 【嵌入式学习-STM32CubeMX篇】定时器的配置和使用

定时器中断处理:通过使能TIM1的更新中断,您可以编写和配置TIM1的中断服务程序(ISR)。需要注意的是,在勾选"Enabled"选项后,还需要正确配置中断优先级和编写相应的中断服务程序来处理TIM1的更新中断。通过定时器的硬件定时功能和中断机制,可以避免在软件中轮询定时器状态,从而降低了处理器的负载并提高了系统的响应性。更新中断是TIM1定时器溢出时触发的中断事件,它允许您在每个定时周期结束时执行相应的中断服务程序(ISR)。通过调整预分频系数和计数周期的值,您可以设置定时器的定时时间。

2023-10-25 21:46:01 2375

原创 【嵌入式学习-STM32CubeMX篇】配置HAL库串口并重定向printf和getchar函数

通过重定向这两个函数,可以实现对printf和getchar等高级函数的重定向,并且可以在更底层的级别上控制字符的输入和输出。同样,可以使用其他标准库函数,如fgets、fscanf等,它们依赖于getchar函数的输入。这样,可以通过重定向这两个函数,同时重定向其他使用fputc和fgetc的函数,如puts、fgets等,实现整个输入/输出流的重定向。需要注意的是,启用中断会增加代码复杂性和处理器负担,因此在使用中断之前,您需要仔细考虑系统的需求和性能要求,确保正确配置和处理中断,以充分利用其优势。

2023-10-25 19:27:20 1742

原创 【嵌入式学习-Keil篇】Keil MDK点击跳转变量或函数名定义或声明,提示“no browse info for symbol in this context”

查阅资料发现是因为项目太老了用v5的编译器写的,而现在安装的Keil MDK都是不安装v5编译器的,所以我们打开我们的Target显示是。安装配置网之后,我们再Rebuild一下项目,这时候我们就可以发现能跳转定义和声明啦!在MDK里面想看看这个变量在哪儿定义的,但是在编译器左下角提示。发现问题我们只需要下载一个v5编译器并配置即可即可。

2023-10-24 10:58:47 462

原创 【嵌入式学习-Keil篇】Keil uVision5 添加 Compiler Version 5教程

完成了安装我们已经成功一大半了,现在只需要配置一下即可。可以使用Compiler Version 5啦!如果嫌麻烦,直接在百度云下载即可。根据你电脑系统下载对应的压缩包。文件夹选择我们刚刚创建并安装的。点击确定就大功告成了!

2023-10-24 10:54:35 1004 1

原创 【嵌入式学习-Keil篇】已解决- 使用Keil报错 :Can‘t load driver ‘D:\Software\MDK\ARM\Segger\JL3CM3.dll‘

在设置J-LINK时弹出的框,将use中调成 J-LINK/J-TRACE Cortex,并且点击Settings。根据网上搜索 查询到了三种方法解决,依次递进。前两种方法我使用了没用,第三种方法成功解决此问题。我们要在这个文件夹中替换掉驱动文件,换上老的驱动文件即可,具体为这三个驱动文件。下载这个安装包文件并替换segger文件夹下的三个文件即可。之后点击确定就完成了,之后重新打开你的项目即可。因为身边没有别的电脑所以没有尝试。找到你的ARM\Segger文件夹。

2023-10-23 19:48:05 344 1

原创 【嵌入式学习-STM32CubeMX学习】RCC时钟源配置及说明

RCC(Reset and Clock Control)模块是STM32微控制器中的一个重要模块,它负责系统时钟的配置和控制.在STM32CubeMX中,RCC模块提供了一系列选项来配置系统时钟。其中,High speed clock(HSC)是指高速时钟源,它可以由外部晶振或者外部时钟源提供。HSC的选项包括** Disable(禁用)**、Bypass Clock Source(旁路时钟源)和Crystal/Ceramic Resonator(晶体/陶瓷振荡器)。

2023-10-19 19:06:57 1038

原创 【嵌入式学习-环境搭建】stm32cubemx下载和安装教程

STM32CubeMx依赖java环境,需要先下载安装java SE,下载地址:https://www.java.com/zh-CN/download/下载链接: https://www.st.com/zh/development-tools/stm32cubemx.html。将下载好的压缩包进行解压得到.exe文件,双击执行。install 安装需要你注册一个账号才能下载安装。双击exe,点击安装,等待“安装成功”点击链接选择图中版本(windows)选择自己的开发版本进行安装。那么我们就安装成功啦。

2023-10-19 16:40:58 967

原创 【嵌入式学习-环境搭建】Keil MDK下载和安装教程

KEIL MDK 下载和安装教程

2023-10-19 16:14:20 327

原创 【嵌入式学习-C语言篇】 vsnprintf函数的使用

函数是一个标准的 C 函数,用于格式化字符串并将生成的字符存储在缓冲区中。它与函数类似,但有一个关键区别:函数不是直接采用可变长度的参数列表,而是采用参数,该参数是已使用宏初始化的参数列表。函数使用三个参数:用于存储结果字符串的缓冲区,缓冲区的最大大小(我们通过42作为参数格式说明符通过使用。其中包括一个单一格式说明符。的缓冲区,大小为100字节。函数的可变长度参数列表。在此示例中,我们首先声明一个名为。打印生成的字符串及其长度。

2023-10-19 11:16:31 209

原创 【嵌入式学习-Zlog】Zlog日志框架学习

Zlog是一个高可靠性、高性能、线程安全、灵活、概念清晰的纯C日志函数库。它支持日志分级、切片、自定义格式等操作。以下是对ZlogZlog是一个高可靠性、高性能(笔记本上达到25万条日志每秒)、线程安全、灵活、概念清晰的纯C日志函数库。它支持日志分级、切片、自定义格式等操作。Zlog具有三个重要的概念:分类(Category)、规则(Rule)和格式(Format)。分类(Category)用于区分不同的输入,可以根据需要获取不同分类名的category来输出不同分类的日志,用于不同的目的。

2023-10-12 21:21:58 680

原创 【嵌入式学习-C语言篇】可变参数

可变参数函数的参数类型和数量应该是明确的。在调用可变参数函数时,应该确保传递的参数类型与函数定义中的类型匹配,并且传递的参数数量与函数定义中的数量匹配。:在使用可变参数函数时,应该确保传递的参数类型与函数定义中的类型匹配。:在使用可变参数函数时,应该确保传递的参数数量与函数定义中的数量匹配。是指函数的参数数量是可变的。:可变参数函数中的参数获取顺序应该是一致的。在调用可变参数函数时,应该按照函数定义中参数的顺序传递参数。:在使用可变参数函数时,需要使用特定的结束标志来指示可变参数列表的结束。

2023-09-24 16:35:35 42

原创 【嵌入式学习-C语言篇】 回调函数的使用

我们直接从代码层面开始说,不过你还需要了解一点函数指针的概率(函数指针可以理解为一个指向函数的指针,可以通过指针来调用函数,你可以理解为函数存放的位置就是对应的内存的一块地址,而你拿一个指针来指向这块地址的头部,并告知这块地址是一片函数区域)送餐机器人:底盘移动到目标位置后,通知应用程序并执行相应的函数。智能音箱:网络状态改变时,通知应用程序执行相应的函数。下面我们就一段段讲解一下下面代码的执行流程。

2023-09-24 15:11:40 87

原创 【嵌入式学习-C语言篇】 指针的使用

如果我们使用指针来交换这两个值,则这两个值就可以被交换。不过与之前不同的是,在swap函数的形参上我们需要传入的是指针,而在swap函数的实参上我们需要传入我们要交换的两个变量的地址。具体原理是我们实参传递过去的是地址,所以我们直接是操作地址来交换值。但是如果普通的形参,程序做的只是形参上的交换,而不是实参上的交换。所以我们可以单纯只知道第一把钥匙所处的位置,后面的钥匙按照第一把钥匙放的位置按顺序排放,那么之后的钥匙我们可以轻而易举的找出。指针可以理解为他就是一个变量,不过这个变量存放的是别的变量的地址。

2023-09-23 20:48:53 39

原创 【嵌入式学习-C语言篇】 struct 关键词的使用

售货机:设备所有资源管理(设备状态、网络状态、电机状态、传感器状态、订单状态等等,即使用struct关键字定义一个结构体来记录一些状态和方法,而这些状态和方法通常是同时存在的,和面对对象中的类差不多一个概念,但是也有区别)

2023-09-23 16:33:53 42

原创 【嵌入式学习-C语言篇】 enum 的使用

智能手环:网络状态表示(初始化、蓝牙连接中、连接成功、连接失败)

2023-09-22 21:35:24 50

原创 【嵌入式学习-C语言篇】 define 的使用

需要注意的是typedef后面需要加分号(;),而#define不需要。1.智能手环:在一份代码中定义测试与发布版本。2.智能音箱:定义一个日志开关功能。3.定义一些常用的工具函数。定义一些常用的工具函数。

2023-09-22 21:29:30 70

原创 【嵌入式学习-C语言篇】 static 的使用

我们来假设一下,如果我们test方法里面会调用方法1和方法2,如果我们不把方法1和方法2前面加上static,那么别人可以直接不通过test方法调用来执行全部的方法1和方法2,而是直接调用方法1或者方法2中其中一个,那么这个代码就非常不安全。你可能会想那我把方法1和方法2直接写在test方法中不就行了?那如果方法1和方法2会被多个方法调用到呢,你岂不是要不停的写重复代码?其次如果你方法1和方法2写在一起也不方便之后的代码维护,假设他们的代码量很大。

2023-09-22 19:22:54 47

空空如也

空空如也

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

TA关注的人

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