自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(50)
  • 问答 (1)
  • 收藏
  • 关注

原创 从C学C++(10)-string/vector/map的简单使用

本文介绍了C++标准库中三种常用容器(string、vector、map)的基本使用方法。string用于处理可变长度字符串,提供了丰富的成员函数如查找、替换、比较等操作。vector是动态数组,支持高效随机访问,可通过迭代器遍历和修改元素。map是键值对容器,基于红黑树实现,支持快速查找和修改,插入方式包括[]运算符和insert函数。三种容器都需要包含对应头文件,使用时需注意各自的特性,如vector的迭代器失效问题、map的键类型要求等。这些容器大大简化了C++中对字符串、数组和键值对数据的处理。

2025-08-12 15:36:19 643

原创 从C学C++(9)——运算符重载

本文介绍了C++中运算符重载的基本概念和实现方法。运算符重载分为成员函数重载和友元函数重载两种形式,本质上是函数重载。文章详细讲解了各种运算符的重载规则和使用场景,包括只能使用成员函数重载的运算符(=、()、[]、->;等)、只能使用友元函数重载的运算符(<<;、>>;)以及不能被重载的运算符。特别说明了++/--运算符的前置和后置重载区别,[]运算符返回引用的重要性,类型转换运算符的特殊性,以及流运算符和智能指针相关运算符->; 的实现方式.

2025-08-08 15:49:23 933

原创 从C学C++(8)——友元

本文介绍了C++中的友元机制。友元允许非成员函数或类访问另一个类的私有和保护成员,包括友元函数和友元类两种形式。友元函数需在类内声明,但定义在类外,可以访问类的所有成员;友元类则使整个类获得访问权限。作者指出友元关系具有单向性(不可互逆)、非传递性和非继承性等特点,并强调友元虽能提高效率但会破坏封装性,建议谨慎使用。文中通过现实生活中的朋友关系类比生动解释了这些特性。

2025-08-08 15:46:35 444

原创 从C学C++(7)——static成员

本文介绍了C++中static成员和成员函数的使用要点。static成员独立于类实例存在,用于实现类级别的共享数据,需在类外定义。static成员函数没有this指针,只能访问静态成员。文章还讨论了类大小计算规则,其中静态成员不影响类大小。此外,总结了static的四种用法:函数内变量、文件级变量、类成员和类方法。最后讲解了const成员函数、const对象的使用以及mutable关键字的作用,并展示了如何利用static局部对象实现单例模式。

2025-06-22 15:29:00 1036

原创 从C学C++(6)——构造函数和析构函数

本文介绍了C++中构造函数和析构函数的基本概念与使用。主要内容包括:1) 构造函数的定义、特点及其在对象初始化中的作用;2) 析构函数的功能与调用时机;3) 转换构造函数和explicit关键字防止隐式类型转换;4) 构造函数初始化列表与对象成员初始化;5) 拷贝构造函数的定义、调用场景及深/浅拷贝问题。文章通过代码示例详细说明了这些概念在实际编程中的应用,特别强调了对于包含指针成员的类需要自行实现拷贝构造函数以避免内存问题,同时介绍了如何通过explicit关键字和初始化列表来控制对象初始化行为。

2025-06-22 15:26:49 819

原创 从C学C++(5)——类

本文介绍了C++中的类声明与相关特性。主要内容包括:1)类的基本声明格式及三种成员访问权限(public、private、protected);2)成员函数的内联特性及实现方式;3)this指针的作用;4)C++的各类作用域规则;5)类的前向声明解决环形引用问题;6)嵌套类和局部类的概念与特点。文中强调类应作为类型声明放在头文件中,并比较了struct与class的区别,指出struct默认成员为public而class为private。文章还提供了类成员命名的常见规范建议。

2025-06-16 00:42:56 542

原创 从C学C++(4)——内联函数和强制类型转换

本文介绍了C++中的内联函数和类型转换运算符。内联函数通过编译时展开代码提高效率,与宏函数相比具有类型检查等优势。文章还详细讲解了四种类型转换运算符:const_cast用于去除const属性(主要用于兼容旧库);static_cast相当于C的强制类型转换;reinterpret_cast重新解释二进制数据;dynamic_cast支持运行时类型识别。文中特别强调了C++类型转换比C更安全规范,建议避免使用C风格的旧式类型转换。

2025-06-16 00:41:22 372

原创 从C学C++(3)——引用

本文介绍了C++中引用的核心概念和使用方法。引用作为变量的别名,具有初始化后不可更改、不独立分配内存空间等特性。文章详细讲解了const引用的特点、引用作为函数参数的三种传递方式对比(值传递、引用传递、指针传递),以及引用作为函数返回值的注意事项。特别强调不能返回局部变量的引用,并分析了引用与指针的关键区别:引用直接访问变量、无独立内存空间、初始化后不可更改等。文中还包含作者对引用机制的独特理解,认为引用是编译器提供的一种直接访问外部变量的优化方式。

2025-06-16 00:38:36 832

原创 从C学C++(2)——域运算符和函数重载

本文介绍了C++中的几个重要特性:域运算符(::)用于访问同名变量,new/delete运算符进行动态内存管理,函数重载(overload)的实现原理及规则,以及带默认参数函数的注意事项。重点包括:域运算符的用法,new/delete与malloc/free的区别,函数重载的静态联合机制和name mangling,extern "C"的作用,默认参数函数的定义规则和可能产生的二义性问题。这些特性体现了C++对C语言的扩展和改进,帮助开发者编写更高效、灵活的代码。

2025-06-11 13:57:23 459

原创 从C学C++(1)——常量和内存对齐

本文摘要介绍了C++11中的关键概念:const限定符和内存对齐。第一部分讲解了const的修饰规则,区分了常量指针和指针常量的差异,并对比了const与宏的使用场景。第二部分详细阐述了结构体内存对齐的规则,通过两个示例(默认8字节对齐和4字节对齐)说明对齐数的影响,并介绍了如何通过#pragma pack修改对齐方式。最后指出C++中struct与class的默认访问权限区别。这些内容为从C过渡到C++提供了基础指导。

2025-06-11 00:46:24 1072

原创 树莓派Pico C/C++ OpenOCD调试环境搭建(Windows)

从上次后,一直想找个合适调试器,最后测试了多种方案,还是使用另一块树莓派pico作为picoprobe 来调试比较方便,其中参考的博客有以下两篇不过完全按照上面两个博客来搭建,可能有bug,至少在我的电脑上行不通😂,所以才有了这篇博客。

2025-04-12 22:13:12 1377

原创 WouoUIPage1.0.0——一个纯C语言(C99标准),无依赖库(只需要C的标准库),适用于多种不同大小屏幕,极易部署的代码框架,可以快速构建、开发一个丝滑、Q弹的单色屏UI

这是一个灵感源自WouoUI的**纯C语言(C99标准)**,**无依赖库(只需要C的标准库)**,适用于**多种不同大小屏幕**,**极易部署的代码框架**,可以快速构建、开发一个丝滑、Q弹的单色屏UI。

2025-02-12 18:14:38 1161 1

原创 STM32 Hal库SDIO在FATFS使用下的函数调用关系

本文并不将FATFS的相关接口操作,而是将HAL在使用FATFS通过SDIO外设管理SD卡时,内部函数的调用逻辑,有助于当我们使用CUBEMX生成FATFS读取SD卡的代码时无法运行时Debug。本文也会说明一些可能出现的bug用于参考。

2024-10-05 00:07:17 1321

原创 树莓派Pico C/C++ 开发环境搭建(一键完成版)

因为之前使用过MicroPython开发过树莓派Pico,总觉得用起来怪怪的。正好最近树莓怕发布了新一代的MCU——RP2350,之前的RP2040在各个平台都有所降价,因此,买了几块。同时因为之前是玩stm32过来的,因此,对于C环境的开发格外偏爱。但在网上大部分找到的C/C++SDK开发树莓派Pico的都是基于官方的教程(需要VSStudio),很难能找到一键搭建的教程,唯有的也只有下面这两个自己也是参考了这两位大佬的博客完成了C/C++ 开发环境的搭建。

2024-08-19 22:56:35 5485 3

原创 WouoUIPagePC端实现

WouoUIPage是一个与硬件平台无关,纯C语言的UI库(目前只能应用于128*64的单色OLED屏幕上,后期会改进,支持更多尺寸)。因此,我们可以在PC上实现它,本文就以在PC上使用 VScode+MinGW+EGE 的组合来实现。

2024-05-06 14:39:44 1556

原创 WouoUI-PageVersion 一个用于快速构建具有丝滑OLED_UI动画的项目

这是一个改动自WouoUI(1.2版本)的纯C语言,无依赖库,只适用于128*64OLED的代码框架,将WouoUI抽象出一部分,以方便快速构建一个具有类似WouoUI风格的OLEDUI。和。

2024-02-18 17:40:59 4534 4

原创 机器学习实战2--蒙特卡洛方法与Q-Q图(2022/10/12)

机器学习实战2--蒙特卡洛方法与Q-Q图(2022/10/12)

2022-10-12 11:23:40 835

原创 机器学习实战Jupyter笔记专栏汇总

机器学习实战Jupyter笔记专栏汇总博客

2022-10-11 11:39:20 643

原创 机器学习实战1-基础运用(2022/10/11)

机器学习实战课程使用Jupyter做的笔记

2022-10-11 11:24:51 901 1

原创 K210-Maixpy初试

k210烧录固件

2022-06-04 10:20:49 8628 4

原创 Linux 基础基本操作(2022/5/30)

Linux 基础基本操作linux 文件系统:文件结构:“/ (根目录) ”–>"bin (可执行文件夹) "​ -->"etc (配置文件夹) "​ -->"proc (进程文件夹) "​ -->"lib (库文件夹) "​ -->"home (用户文件夹) "路径描述:绝对路径: 从根目录开始的路径描述, 即以根目录开始,最开始是/相对路径:"."表示当前目录;“…”表示上一级目录 ;“~”表示用户的

2022-05-30 16:53:57 160 1

原创 Linux 基本工具tmux和vim的使用(2022/5/30)

Linux 基本工具tmux和vim的使用简介tmux和vimtmux是用于将终端与窗口分离的工具,即可以再关闭终端(黑框框)的时候,不会连通后台的进程一起关闭,而且tmux提供命令行窗口分屏和同时处理的能力。vim 是一个强大的文本编辑器,通常由三种模式,一般命令模式(正常进入时的模式),编辑模式(插入模式,按i进入),命令行模式(按:/?进入)。tmux的基本使用基本概念:session: 即会话,可以理解成每一个会话就是一个单独运行的任务。可使用tmux list-session

2022-05-30 16:51:52 572

原创 初试processing(2022/3/23)

Processing 常用函数及变量表函数基本执行事件函数块:函数名简单使用描述void setup()初始化函数,内容只执行一次void draw()绘图函数,其内容会循环执行void size()设置画布的大小,可加参数P3D,使用3D渲染器void mousePressed()在鼠标被点击后才会执行一次的函数块void mouseReleased()在鼠标释放后会执行一次的函数块void mouseClicked()在鼠标单击被释放后

2022-03-23 11:58:48 449

原创 合泰32笔记2-GPIO使用(2022/2/20)

HT-GPIO使用1.依赖库的位置如上图:合泰的库文件的头文件在文件夹外部,且是5个上级目录的子文件内,所以,移植时注意将合泰的源文件夹(以外设命名的文件夹)放在三级含有库的三级子文件夹内。下图为例:否则则需 在项目文件夹复制入两个文件夹 library 和utilities, 并修改头文件路径 。自己写的外设.c.h文件需包含的基本头文件为如下三个:#include "ht32.h"#include "ht32_board.h"#include "ht32_board_confi

2022-02-20 15:06:32 3216

原创 HT32笔记3-UART&USART(2022/2/20)

HT-UART库使用1.硬件连接如下图​ 所以,如果我们要使用上端的PA4,PA5去连接MCU的串口USART1的话,我们需要将跳线帽短接到右边。2.如果要使用c的标准库进行串口输入输出需要将串口进行重定义到c的标准输入输出函数上,在ht32f5xxxx_conf.h重修改宏定义即可:(可使用keil自带的文件向导打开,如下图:)如上图:以USART1当做标准输入输出的串口(即可以使用printf直接进行输出)有一点值得注意的是,使用重定义后的串口,可以直接在elink上输出串

2022-02-20 15:04:42 8111 3

原创 HT单片机笔记1-时钟配置(2022/2/20)

HT-时钟配置库简单使用1.时钟配置分析1)有关系统运行时钟的配置图2)整个时钟架构的框图2.配置时钟的代码流程简析以官方库中的48MHZ标准配置为例:默认初始化时钟(配置成HSI);CKCU_DeInit();使能HSE,并检查HSE是否就绪(没有HSE就死循环了);CKCU_HSECmd(ENABLE);ClockStatus = CKCU_WaitHSEReady();if(ClockStatus == SUCCESS)HSE就绪的话,填写结构体配置PLL锁

2022-02-20 14:47:33 901

原创 Stm32文件系统FATFS(开始于2021-09-09)

Stm32文件系统FATFS参考资料主要是原子和野火两家的讲解。1.FATFS简介:适合嵌入式小型单片机,是一个 独立 的软件层文件系统,我们只需要将底层硬件的读取函数移植到FATFS提供的向下的接口(Media Access Interface),完成之后,就可以像电脑一样使用文件的操作函数(FATFS提供的向上的供我们使用的API函数 (Application Interface) )。FAFTS中的函数参数介绍中的,IN表示该参数是传入数值;OUT表示,该参数是介质用于存放需要传出数据的载体。

2021-09-09 14:51:42 15293

原创 Stm32笔记-NVIC中断向量控制(开始于2021-09-05)

Stm32笔记-NVIC中断向量控制NIVC中断控制的寄存器(组)是位于cortex-M3内核中的,所以平时可能较少接触所以在这里补充一个笔记。参考资料主要是《cortex-M3中文参考手册》1.一些与内核有关的名词在内核中,所有的中断都可以称为 ”异常“ :”异常“ 定义如下:”挂起“:即一个异常不能被立即响应时的状态,(我理解为 ”立flag“)定义如下:注意:功能上是与FreeRTOS中的挂起任务列表相同,但挂起任务列表与其没有关系(时使用链表实现的)向量表:实际上是处理

2021-09-05 15:57:00 785 1

原创 stm32之内存管理(2021-09-02)

stm32之内存管理1.分块式内存管理:内存池与内存表:内存管理结构体:内存管理相关宏:内存管理数组:2.内存管理函数初始化://内存管理初始化 //memx:所属内存池0/1/ccm(F4)void my_mem_init(u8 memx) 使用率查看函数://获取内存使用率//memx:所属内存池0/1/ccm(F4)//返回值:使用率(0~100)u8 my_mem_perused(u8 memx) 申请内存函数://分配内

2021-09-02 20:13:04 644

原创 STM32调试及仿真(开始于2021-09-02)

STM32调试及仿真1.使用SWJ的调试:1)原理:需要注意的是:SWD模式只需要两根数据线(数据线和时钟线,不包括VCC,GND);而JTAG需要5根数据线(也不包括VCC和GND);所以通常会选择IO口占用较少的SWD模式(避免对程序使用的IO造成影响)。2)SWJ的相关引脚在我们不使用SWJ进行调试时,需要注意的一点是: 上面的IO在上电后默认就是进入调试模式(上电默认就是为复用的),如果我们要将这些IO口当成普通的IO使用的话,2️⃣就需要将他们的复用功能禁止,使用如下的库函数(位于s

2021-09-02 12:36:49 2560

原创 stm32汉字字库显示实验与OLED的使用(开始于2021-09-01)

stm32汉字字库显示实验与OLED的使用1.字库的使用GBK字库的简介:GBK库的由两部分组成,如下图:高位从0x81开始是为了兼容ASII字符,因为未扩展的ASII字符是从0-128,即0x00-0x80;汉字编码均为连个字节,所以在ASII字符显示8 * 16的字符时,汉字为16 * 16;这儿需要注意一点,我们使用的编辑器的方式,要与字库的编码方式对应才行(GBK);因为在使用字库的过程中是1️⃣从字符的地址访问出它的(2字节)编码(编辑时使用GBK,则为GBK编码),2️⃣

2021-09-01 12:41:14 7136 1

原创 stm32之时钟树及systemclock(始于2021-08-29)

stm32之时钟树及systemclock1.时钟树:1)框图:如上图:内部系统的时钟来源,常被分为5种:HSE,HSI,LSI,LSE,和PLL(即1PLLCLK,实际上PLL是来自以上四个分频,倍频后得到的);通常在写时钟配置的程序的时候,常常需要将图中的1、2、3先配置,然后配置5、6、7;最后才将中间的“隔阂” 4 “ 打通”;(具体配置的方法可以看下面的寄存器和库函数操作);各种时钟的简介:HSE:外部高速时钟,常用8MHz;HSI:内部高速时钟,也是8MH

2021-08-29 21:35:28 977

原创 有关ESP8266的AT指令的一些理解(2021-08-15)

有关ESP8266的AT指令的一些理解文章目录有关ESP8266的AT指令的一些理解1.几个名词的区别2.图示3.CTP与UDP区别的理解:4.ESP8266的AT指令简单使用:1)物理WIFI层:2)使用TCP协议时:3)UDP协议:1.几个名词的区别AP (AccessPoint) 与STA (Station) 是WIFI通信中物理层的概念,可以理解为热点和连接热点手机。而STA+AP就是同时开热点又连着WIFI的电脑。TCP (Transmission Control Protoc

2021-08-15 14:11:43 1678

原创 Stm32之CAN通信(2021-08-13)

Stm32之CAN通信文章目录Stm32之CAN通信1.CAN*(Controller Area Network)*协议简介1)协议种类及特点:2)物理层特征:3)协议层简介:(均为MSB)2.Stm32的bxCAN *(Basic eXtend CAN)*1)bxCAN简介:2)过滤器位宽及模式3)bxCAN模式简介:4)邮箱发送过程:5)邮箱接收过程:3.bxCAN寄存器介绍:1)CAN控制和状态寄存器2)CAN邮箱寄存器3)CAN过滤器寄存器4.库函数使用1)流程:初始化流程:发送数据:接收数据:

2021-08-13 10:40:33 1450

原创 stm32之电阻触摸屏实验(2021-08-09)

电阻触摸屏文章目录电阻触摸屏1.电阻触摸屏原理:1)原理简介:2)XTP2046 两路AD转换芯片2.原子函数的使用3.小项目练习1.电阻触摸屏原理:1)原理简介:通过TFTLCD中位于边缘两端的两个电极(X+,X-,Y+,Y-),形成2个相互垂直的5V的电场,当有物体触摸液晶屏时,由于下方的电阻丝的分压效应,触摸点处的电压将是一个0-5V的电压,且这个电压是与触摸的位置成一次函数关系的,我们只需通过校准后得知X0,Y0 处的电压值和该直线的斜率,我们就可以通过其他点触摸时的电压换算出其位置。

2021-08-09 22:18:08 6311

原创 Stm32之SPI笔记(2021-08-07)

Stm32之SPI笔记1.32的SPI简介:1)SPI简介:特点:高速(最快可达10MHZ)全双工,同步,不带应答;具有CRC校验。通讯线:MISO (Master Input Slave Output) :对主机(从机)来说,数据发送(接收)线;MOSI (Master Output Slave Input) :对主机(从机)来说,数据接收(发送)线;SCLK (Serial Clock) :时钟线;CS (Chip Select) :片选线(拉低即选中,有多少个从

2021-08-07 10:28:46 1507

原创 Stm32之DMA直接内存读取(2021-07-30)

Stm32之DMA直接内存读取1.DMA简介:DMA*(Direct Memory Access controller)*:可用于为CPU减负,可以将内存中的数据与外设中的数据进行搬运(无法进行计算操作,单纯的搬运),而在此期间内CPU可以去处理其他事物。(说白了,就是一个搬运工)特性简介如下:(摘自原子的数据书册)Stm32有两个DMA控制器,DMA1(7个通道),DMA2(5个通道);有三种传输单位宽度可选:字节(8位)、半字(16位)、全字(32位);通道间有四种优先

2021-07-30 17:39:46 3707

原创 STM32之单DAC数模转换输出(2021-07-30)

STM32之单DAC数模转换输出1.DAC简介及框图:DAC功能只有STM32大容量的芯片才具有;中低容量的芯片没有;DAC有两个 8位*(右对齐)或者是12位(左或右对齐)*的转换器,每个转换器只有一个通道,所以通常在使能时都是直接操作对应的通道,DAC_OUT1对应PA4;DAC_OUT2对应PA5;注意:为防止对DAC造成干扰,使用DAC对应的IO应设置为模拟输入在上图的寄存中,DORx寄存器是无法直接写值的,只有DHRx寄存器可以进行写操作,控制器会在一个时钟脉冲后将DH

2021-07-30 11:57:52 1110

原创 STM32之待机唤醒(2021-07-29)

STM32之待机唤醒1.低功耗模式简介:2.几种模式:1)主要介绍待机模式:可以看出待机模式与停机模式的不同只在是否置LPDS位 (PWR_CR[0]);实际上待机模式比停机模式更加省电,只需2uA的电流即可维持;SLEEPDEEP位是位于系统控制寄存器(见M-3内核手册)上2)睡眠与停机模式的简介:推出睡眠模式只需要,任一中断或事件即可;注意:进入睡眠模式时,I/O引脚均保持运行状态停止模式:同样是预先设置好的中断或事件可已将其唤醒,值得注意的是,要从停止模式用

2021-07-29 10:58:35 3332

原创 Stm32之单ADC模数转换(2021-07-28)

Stm32之单ADC数模转换1.单ADC总体框图:由上图可以看出:Stm32 (大容量) 共有3个ADC转换器:其中ADC1有18个通道 (16个外部通道,2个内部:1个温度,1个V_refint 内部参考电压通道),ADC2 3则只有16个通道;拥有三种可触发中断(EOC (规则通道转换完成) ,JEOC (注入通道转换完成),AWD (模拟看门狗阈值触发) )改ADC为12位逐次比较性ADC,其最大速度为1us;所以输入时钟不可超过14Mhz*(具体见下)*注入通道与规则通

2021-07-28 09:46:46 1101

树莓派pico openoc调试包(windows)

windows下的树莓派pico openocd调试包 |-bin(含有windows下预编译好的openocd文件) |-drivers(含有picoprobe的驱动文件) |-share(含有调试的cfg配置文件和目标的cfg文件)

2025-04-12

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

TA关注的人

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