- 博客(70)
- 资源 (1)
- 收藏
- 关注
原创 C++面向对象设计原则、设计模式
设计模式是软件开发过程中,针对反复出现的问题所总结归纳出的通用解决方案。降低耦合度,提高代码复用性、可维护性、可扩展性。不同编程语言使用相同的设计模式时代码也各不相同。单例的特点是只提供唯一一个类的实例,具有全局变量的特点,再任何位置都可以通过接口获取到那个唯一实例。优点:能够避免对象重复创建,节约空间并提升效率避免由于操作不同导致的逻辑错误实现方式:饿汉式:饿了肯定要饥不择⻝。所以在单例类定义的时候就进⾏实例化懒汉式:在第⼀次⽤到类实例的时候才会去实例化。什么时候使⽤,什么时候创建单例。
2025-07-15 21:13:42
432
原创 C++智能指针
智能指针是一个重载了->和*操作符的类,如果有异常产生,可以通过智能指针类的析构函数自动完成内存的释放。STL提供了智能指针类型:C++11已将auto_pyr抛弃shared_ptr : 允许多个智能指针指向同⼀个对象unique_ptr : ⼀个指针“独占”所指向的对象weak_ptr : 弱引⽤,指向shared_ptr所管理的对象独占为对象动态分配的内存,避免了对资源的多重释放。当被销毁时,它所指向的对象也会被自动销毁。,头文件<memory>,命名空间std特点:轻量级。
2025-07-15 21:12:40
314
原创 C与C++标准简介
C89标准(ANSI C)C99标准:经典,稳定性好,用的多C11标准:原名C1X,新的标准,最新C++20STL(StandardTemplateLibrary)即标准模板库,是一个具有工业强度的,高效的C++程序库。主要集成了常用的数据结构(类模板实现)和算法(函数实现)。STL的一个重要特点是数据结构和算法的分离它不是面向对象的,STL主要依赖于模板而不是封装,继承和虚函数(多态性)六大组件:容器、算法、迭代器、仿函数、配接器、配置器。
2025-07-15 21:11:35
455
原创 C++泛型编程
泛型编程可以实现算法和数据结构的分离,模板是泛型编程的基础。泛型,实质上就是不使用具体的数据类型。在C++中,通过函数模板和类模板实现泛型编程。
2025-07-15 21:09:48
328
原创 C++面向对象编程
编程思想就是解决当前的世界问题的建模,主流编程思想:面向过程编程和面向对象编程类是具有相同特征(数据元素)和行为(功能)的对象的抽象,不能直接使用特征:被称为属性(是对事物的某种特性的抽象描述,比如年龄、性别)------数据类型行为:被称为方法(表示对象的行为(类中定义的函数,用来给类添加功能))--------函数客观世界中任何一个事物都可以看成一个对象,对象是由类创建出来的一个具体存在,可以直接使用由哪一个类创建出来的对象,就拥有在哪一个类中定义的属性和方法对象就相当于用图纸制造出的汽车。
2025-07-15 21:08:35
463
原创 C++函数
b=1等价与a=1;// void mytest(int a, int b = 10)//对于默认形参,用户在调用该函数时,如果提供了对应值则按照对应的值参与运算,如果用户没有提供,则按默认值参与运算。特点:在调用函数时,将实参的值拷贝一份给形参,实参与形参空间是独立的,因此在函数内对任何形参的修改不会影响到实参,所以它的传递是单向的。cout << "找到: " << target << " = " << value << endl;
2025-07-15 21:06:07
368
原创 面向对象的程序设计
/ >> 流提取运算符 scanf("%d%d", &num1,&num2);if(str1 > str2)// 字符串比较的原则是,从前往后逐字符比较对应字符的ASCII码值。// cout一次可以打印多个表达式的结果,这些表达式的结果类型可以一样,也可以不一样。
2025-07-15 21:04:15
425
原创 C++数据类型与表达式
/ true打印的值是1,false打印的值是0。可以对整数类型用signed、unsigned来修饰有符号和无符号,在内存中是以二进制的形参进行存储的。//C++的新式强制类型转换的写法 目标类型(表达式)常用。//布尔类型只有两个值,一个是true,一个是false。void类型:主要应用在两个方面:无类型指针,修饰函数的返回类型。
2025-07-15 21:01:45
409
原创 C++简介
C语言对数据类型检查的机制比较弱;缺少支持代码重用的结构;比较适用于解决小的问题,对应大规模编程,程序模块之间协调性差,程序的可重用性、程序的安全、健壮以及可维护性、可扩充性差,随着软件工程规模的扩大,难以适应开发特大型规模的程序等。
2025-07-15 21:00:26
755
原创 Linux网络基础知识----网络编程
TCP向应用层提供可靠的面向连接的数据流传输服务,应用程序通过向TCP提交数据发送/接收端的地址和端口号而实现应用层程序的数据通信。Linux命令sudo netstat -tpna | grep 端口号可查看连接的服务端和客户端的地址、端口和状态信息独立于具体协议的网络编程接口在OSI模型中,主要位于会话层和传输层之间。在Linux 下,套接字是一种特殊的I/O接口,也是一种文件描述符。操作selectpollepoll初始化每次重建fd_set初始化pollfd数组通过epoll_ctl。
2025-07-15 20:48:18
300
原创 Linux进程间通讯(IPC)--- 多线程
线程间方便的通信机制。:获取的信号量的值放到这个变量地址里,如果有一个或者多个进程或者线程当前正在使用sem_wait等待信号量,semval可能会返回两种结果,要么,返回0,要么返回一个负值,它的绝对值等于当前正在使用P操作的阻塞的进程或者线程数的总和。如果一个条件为假,一个线程自动阻塞,并释放等待状态改变的互斥锁。不论是可预见的线程终止还是异常终止,都会存在资源释放的问题,在不考虑因运行出错而退出的前提下,如何保证线程终止时能顺利的释放掉自己所占用的资源,特别是锁资源,就是一个必须考虑解决的问题。
2025-06-13 19:38:32
679
原创 Linux进程间通讯(IPC)
消息队列就是一个消息的链表,提供了一种由一个进程向另一个进程发送块数据的方法。另外,每一个数据块被看作有一个类型,而接收进程可以独立接收具有不同类型的数据块,在许多方面看来,消息队列类似于有名管道,但是却没有与打开与关闭管道的复杂关联。共享内存是进程间通讯中最简单的一种,也是最快的一种,共享内存就是一段能被其他进程所共同访问的物理内存(内存条),这段共享内存由一个进程创建,但多个进程都可以访问。
2025-06-13 17:47:42
639
原创 Linux系统编程
文件就是存储在硬件磁盘上的数据集合进程是一个独立的可调度的活动。活的,一直在变化,独立的,可控的进程是一个抽象的实体,当它执行某个任务时,要分配和释放各种资源。摸不到,CPU执行权限,内存管理进程是可以并行执行的计算单位并行:绝对的并行是不存在的,一般指一段时间内的并行,微观层面并发:同时发生,程序有多少并发量-同时可以执行多少程序,时间段比较大,宏观层面多核的两个计算单元可以同时进行本质:进程是程序的一次执行过程,进程是程序执行和资源管理的最小单元。每个正在运行的程序都称为进程。
2025-06-13 17:21:47
854
原创 STM32F407ZET6 -- 21 IIC(AT24C02存储设备)
当SCL处于高电平时,SDA的电平状态属于稳定期,这个时候从机就可以通过SDA引脚电平状态来判断数据是0还是1。使用IIC通信协议,在AT24C02存储设备中,从addr开始,写入len长度的pbuf数据。从机返回数据给主机,也就是从机改变SDA引脚电平状态,主机通过SDA识别接收数据。主机不再继续读取时,主机需要给从机发送非应答信号,相当于是停止读的信号。由于是主机给从机发送应答/非应答信号,所以SDA引脚应该为输出模式。主机等待从机的应答,所以主机识别SDA引脚电平。
2025-05-28 21:59:23
349
原创 STM32F407ZET6 -- 20SPI(串行外设接口)
/ 从w25q128读取数据,读取的起始地址为addr, 读取len个字节,存储在pbuf中。// // 读取w25q128中的数据(查看擦除区域的数据是不是全0xFF)// // 读取w25q128中的数据(查看写入区域的数据是不是全0x33)// 给从机发送任意数据,从机返回状态寄存器1的1个字节数据。// 给从机发送任意数据,从机返回状态寄存器1的1个字节数据。// // 向w25q128中写入10个字节的0x33数据。// 主机给从机发送任意数据,从机返回我们待读取的数据。
2025-05-21 16:21:08
808
原创 STM32F407ZET6--17温湿度模块
/ 所以我们先延时40us后,如果当前引脚还是高电平,说明接收到的是‘1’,这个时候我们才需要处理。-------------------MCU通知DHT11--------------------------------------------DHT11回应MCU-----------------/*------------ MCU通知DHT11 ------------ *//*------------ DHT11回应MCU ------------ */// DHT响应之前PG9是高电平,
2025-05-11 15:31:12
904
原创 STM32F407ZET6--16串口
/************************* 串口调试助手发送数据到开发板,控制LED灯的亮灭 ********************************USART_InitStruct.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;//************************* printf示例 ********************************//extern uint8_t g_usart1_recv_flag;
2025-05-11 15:28:56
947
原创 STM32F407ZET6--15GPIO
每个通用 I/O 端口包括 4 个 32 位配置寄存器(GPIOx_MODER、GPIOx_OTYPER、 GPIOx_OSPEEDR 和 GPIOx_PUPDR)、2 个 32 位数据寄存器(GPIOx_IDR 和 GPIOx_ODR)、1 个 32 位置位/复位寄存器 (GPIOx_BSRR)、1 个 32 位锁定寄存器 (GPIOx_LCKR) 和 2 个 32 位复用功能选择寄存器(GPIOx_AFRH 和 GPIOx_AFRL)
2025-05-09 21:09:03
232
原创 STM32F407ZET6--01嵌入式开发基础知识
HAL 库是 ST 为 STM32 最新推出的 抽象层嵌入式软件,可以更好的 确保跨 STM32 产品的最大 可移植性。
2025-05-09 20:56:14
659
原创 STM32F407ZET6--14Flash
自举模式:BOOT0、BOOT1跳线方式OTP:one time program只允许操作一次对于STM32F407ZET6芯片来说,其嵌入式FLASH的扇区最大到扇区7,因为它的Flash大小是512KB(16+16+16+16+64+128+128+128)。
2025-05-09 20:53:31
1089
原创 STM32F407ZET6--12超声波模块
HC-SR04超声波测距模块可提供2cm-400cm的非接触式距离感测功能,测距精度可达3mm,模块包括超声波发射器、接收器与控制电路。// 当超声波开始工作后,模块自动循环发送 8 个 40khz 的方波,自动检测是否有信号返回。// 有信号返回,通过 IO 口 ECHO 输出一个高电平,// PB6 --> TRIG(控制超声波模块是否工作)// PE6 --> ECHO(高电平持续时长)ECHO--输出回响信号--PE6--输入模式。TRIG--触发信号--PB6--输出模式。
2025-05-09 20:50:15
594
原创 STM32F407ZET6--10蓝牙模块
BLE-CC41-A(需安装apk蓝牙调试器)模块采用CC2541芯片,配置256kb空间,遵循V4.0 BLE蓝牙规范。支持AT指令(用于参数修改),用户可根据需要更改串口波特率、设备名称、配对密码等参数,使用灵活。支持UART接口,有成本低、体积小、功耗低、收发灵敏高等优点。
2025-05-09 20:44:35
875
原创 STM32F407ZET6--09PWM
/ 第一次分频(计数器时钟频率 (CK_CNT) 等于 fCK_PSC / (PSC[15:0] + 1)。// 配置为PWM模式1(计数器向上计数时,若计数值<比较值,输出低电平;// 设置电平极性为高电平。
2025-05-09 20:43:38
614
原创 STM32F407ZET6--08定时器
/ 第二次分频:10000Hz / TIM_CKD_DIV1 = 10000Hz(TIM1的最终频率)// 第二次分频:10000Hz / TIM_CKD_DIV1 = 10000Hz(TIM2的最终频率)// 第二次分频:10000Hz / TIM_CKD_DIV1 = 10000Hz(TIM3的最终频率)// 第二次分频:10000Hz / TIM_CKD_DIV1 = 10000Hz(TIM8的最终频率)
2025-05-09 20:42:14
835
原创 STM32F407ZET6--07中断和事件
中断是对CPU的干预操作假设把网络和触摸屏当成两个中断,系统能够操作的优先级,不同中断优先级不一样,假设抢占优先级2个比特位值越小,优先级越高抢占优先级:高优先级任务会直接打断正在执行的低优先级任务;抢占优先级不同时不需要考虑响应优先级响应优先级:前提-->抢占优先级相同;高响应任务不能打断正在执行的低响应任务;处于就绪队列中的任务,先执行高响应优先级任务不知道什么时候被触发,就使用中断接收数据,系统自动检测标志位。
2025-05-09 20:40:17
1065
原创 STM32F407ZET6--06位带操作
位带操作就是对一个bit位进行膨胀,32位系统会膨胀为32个bit位(一个整型变量,因为在32位系统下int整型变量寻址最快),16位系统会膨胀为16位(一个short变量)。计算PF9的地址--->LED0对应的位带别名区的地址(因为PF9的地址是一个常量值,所以需要对PF9的地址做强制类型转换)使用指针时,一定要确保指针有一个明确的内存指向,要指向一个实际的内存。// PF9的地址 --> LED0对应的位带别名区的地址。// 先计算ODR_PF端口输出数据寄存器的地址。//地址值一定是一个整型常量。
2025-05-09 20:38:50
524
原创 STM32F407ZET6-05延时操作
频率越低,可延时的时长就越长,所以选择外部时钟源的时候选择SysTick_CLKSource_HCLK_Div8(预分频)。在STM32中,系统主时钟选择PLL(锁相环)并基于HSE(高速外部时钟)的8MHz时钟源,这一设计的核心原因与STM32的时钟树架构及性能需求相关。STM32的时钟树默认将PLL输出(PLLCLK)作为系统时钟(SYSCLK)的主要来源,而HSE/HSI作为PLL的输入源。需要使f(PLL常规时钟输入) = 168,所以PLL_M的值应该从25改成8,才能使得这个算式结果为168。
2025-05-09 20:37:44
1046
原创 STM32F407ZET6--04蜂鸣器
R39接在基极之前,是一个基极的限流电阻,为防止电流过大,击毁三极管。R40是下拉电阻(接到GND上),在没有输入信号时,使三极管可靠截止,避免误触发。//上拉模式,按键未被按下时,默认是高电平。NPN三极管起到一个开关作用,通过三极管是否导通来确定蜂鸣器是否起作用。默认beep引脚是低电平,蜂鸣器不响。//初始化蜂鸣器不工作。
2025-05-09 20:35:40
475
原创 STM32F407ZET6--03按键
/上拉模式,按键未被按下时,默认是高电平。//默认情况下按键的状态为1.如果是0的话就证明按键已被按下。按键是输入模式,MCU需要主动判断按键是按下还是抬起,不需要使用电流控制。//获取PA0引脚的电平状态 == 按键状态。//按键PA0、PE2、3、4。//配置为上拉输入模式。//与点灯的操作步骤一样。梳理分析详细的业务逻辑。
2025-05-09 20:34:46
548
原创 STM32F407ZET6--02点led灯
HAL 库是 ST 为 STM32 最新推出的 抽象层嵌入式软件,可以更好的 确保跨 STM32 产品的最大 可移植性。
2025-05-09 19:52:04
1023
原创 C语言基础29
CC:C编译器名称,默认值是ccRM:文件删除的程序名,默认值是RM..注意:虽然预定义变量是makefile定义的,但我们任然可以自定义和预定义变量名同名的变量。变量的定义:变量名 = 值注意:一般变量名使用大写字母变量的使用:$(变量名)说明:如果变量名是一个单字符,则变量使用时小括号可以省略不写。举例:// 单字符变量定义O = main.o// 单字符变量使用$O / $(O)// 多字符变量定义// 多字符变量使用$(OBJS)
2025-04-25 20:29:36
528
原创 C语言基础28
JPEG/JPG:采用专用的图像压缩算法进行了压缩。BMP图片:它采用位映射存储格式,除了图像深度可选以外,不采用其他任何的压缩。好处:在显示和保存的时候不需要算法来进行压缩和解压坏处:占用空间比较大(推荐24bit)
2025-04-25 11:20:54
1133
### 【C++程序设计基础】C++语言特性与应用领域综述:从基础语法到高级特性
2025-07-15
### 【Linux网络编程】基于TCP/IP与UDP协议的网络通信及套接字编程详解
2025-07-15
### 【Linux数据库编程】基于CJSON的JSON数据处理与MySQL数据库操作:详解与实践
2025-07-15
【Linux系统】进程间通讯(IPC)机制详解:涵盖管道、消息队列、共享内存、信号量及信号机制
2025-06-13
【Linux系统编程】文件与进程操作核心函数详解:系统调用与标准I/O库函数应用指南
2025-06-13
【嵌入式系统】基于STM32F407的IIC通信协议实现:AT24C02存储设备读写操作详解
2025-05-28
【嵌入式系统】STM32F407ZET6 SPI接口详解:串行外设接口的硬件连接与编程实现了文档的核心内容
2025-05-15
【嵌入式系统】基于STM32的ADC与DAC实现:模数与数模转换的原理及应用实例解析
2025-05-14
【嵌入式系统】看门狗模块定时器原理与低功耗设计:独立看门狗与窗口看门狗的实现及应用
2025-05-14
【嵌入式系统】基于STM32F407ZET6的DHT11温湿度模块通信协议实现:引脚配置与数据交互程序设计
2025-05-09
【嵌入式系统】基于STM32F407ZET6的串口通信技术详解:硬件与协议层实现及应用文档的主要内容
2025-05-09
【嵌入式系统】STM32F407ZET6 GPIO接口详解:输入输出模式与应用实例介绍文档的主要内容
2025-05-09
【嵌入式系统】STM32F407ZET6 Flash操作指南:扇区管理与数据读写流程解析
2025-05-09
【嵌入式系统】STM32F407ZET6 RTC实时时钟模块初始化与中断配置:时钟源选择及唤醒功能实现
2025-05-09
【嵌入式系统】STM32F407ZET6驱动HC-SR04超声波模块实现精准测距功能的设计与代码实现文档所属领域(
2025-05-09
【嵌入式系统】基于STM32与ESP8266的WiFi模块通信设计:串口配置与代码实现详解
2025-05-09
【嵌入式系统】基于STM32F407ZET6的蓝牙模块BLE-CC41-A通信设计:UART接口与AT指令应用以下要点:
2025-05-09
【嵌入式系统】基于STM32F407ZET6的PWM脉冲宽度调制技术:LED灯渐亮渐灭控制系统设计与实现
2025-05-09
【嵌入式系统】STM32F407ZET6定时器详解:不同类型的定时器及其在中断方式下的定时操作实现
2025-05-09
【嵌入式系统】STM32F407ZET6中断和事件机制详解:NVIC与EXTI配置及应用实例STM32F
2025-05-09
【嵌入式系统】STM32F407ZET6位带操作详解:GPIO寄存器与LED控制应用实例
2025-05-09
【嵌入式系统】STM32F407ZET6时钟控制与延时操作详解:时钟源配置及延时函数实现
2025-05-09
【嵌入式系统】STM32F407ZET6蜂鸣器驱动设计:基于NPN三极管的GPIO推挽输出控制实现文档的主要内容
2025-05-09
【嵌入式开发】基于STM32F407ZET6的按键控制实现:GPIO配置与LED灯控制代码解析
2025-05-09
【嵌入式系统】基于STM32F407ZET6的LED灯控制:单片机GPIO配置与代码实现详解文档的主要内容
2025-05-09
【嵌入式开发】STM32F407ZET6单片机基础知识与开发流程:从寄存器到硬件抽象层的设计与应用介绍了嵌入式
2025-05-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅