- 博客(176)
- 收藏
- 关注
原创 STM32中断详解
中断是单片机正在执行程序时,由于内部或外部事件的触发,打断当前程序,转而去处理这一事件,当处理完成后再回到原来被打断的地方继续执行原程序的过程。在ARM体系结构中,中断通常由外设或外部输入产生,有时也可以由软件触发。中断是单片机系统处理紧急或突发事件的重要方式,如定时器溢出、按键输入、串口数据到达等。
2025-09-07 18:17:51
937
原创 GPIO介绍
GPIO是通用输入输出端口()的英文简写,是所有的微控制器必不可少的外设之一,可以由STM32直接驱动从而实现与外部设备通信、控制以及采集和捕获的功能。GPIO口可配置为多种输入输出模式,如输入浮空、输入上拉、输入下拉、模拟输入、开漏输出、开漏复用功能、推挽式输出以及推挽式复用功能等。STM32单片机的GPIO被分为很多组,每组最多有16个引脚,不同型号的MCU的GPIO个数是不同的。引脚电平:0V~3.3V,部分引脚可容忍5V。
2025-09-06 21:39:25
1182
原创 STM32的时钟系统与时钟树的配置
STM32的时钟系统是其微控制器(MCU)的核心组成部分,负责为CPU、外设和存储器等模块提供精确的时序信号。其设计灵活且复杂,通过多级时钟树(Clock Tree)实现时钟源的选择、分频和分配。
2025-09-03 17:12:25
833
原创 从map文件分析优化代码
描述了各符号(程序段、数据)在存储器中的地址、类型、大小等信息,对于理解程序的内存布局以及定位特定代码或数据段非常有用。)占用空间的汇总信息,包括代码、只读数据、已初始化读写数据、未初始化读写数据等的大小,有助于了解程序的总体内存使用情况。:如果这里拆掉了你“以为要用”的函数,八成是你代码里没真正调用到,或者条件编译把它关掉了。,直接搜表就能知道是哪个函数。描述了各程序段(函数)在存储器中的地址及占用大小,有助于分析程序的内存占用情况。:告诉你“哪栋楼(函数)引用了哪条街(变量/函数)”。
2025-09-02 19:03:28
617
原创 详解STM32的完整启动流程
STM32会先去“自家宅基地”的开头(0x0800 0000)读一个4字节的数,这个数就是“脚手架的顶端地址”,然后把这个地址存到SP寄存器里。STM32再去0x0800 0004(紧挨着刚才那个地址)读一个4字节的数,这个数就是“复位向量”,也就是“真正开始干活的入口地址”。**SP(Stack Pointer)**就像工地上的“脚手架”,程序运行时临时放东西(比如函数参数、局部变量)的地方。如果BOOT0=0,无论BOOT1是什么,都从“自家宅基地”(主Flash)启动,这是最常见的。
2025-09-02 17:20:32
1126
原创 详解STM32寄存器映射
通过读写这些外设寄存器,开发人员可以设置外设的工作模式、读取外设的状态信息,从而实现对外部设备的控制和数据交互。通过GPIO_TypeDef结构体定义了GPIOB口,结构体中包含了GPIO的通用寄存器,为了简化寄存器的数量,将同一类型的外设设置通用的寄存器,并以结构体的形式进行定义,方便操作与管理。从代码中可以看出,源码中定义的GPIOB也是将其映射到了内存中,通过PERIPH_BASE总线基地址+偏移量得到APB2的基地址,在APB2的基地址+偏移量得到GPIOB的基地址。寄存器相对于外设基地址偏移量。
2025-09-02 12:54:57
938
原创 存储器映像
Flash 存储器区域位置:通常位于地址空间的起始部分(如图中的附近开始)。作用:用于存储程序代码、常量数据以及一些需要长期保存的配置信息。Flash存储器是非易失性的,掉电后数据不会丢失。特点:在STM32中,Flash存储器被划分为多个扇区,不同的扇区大小可能不同。程序在运行时,CPU从Flash存储器中读取指令进行执行。例如,启动代码、用户应用程序等都存储在Flash中。SRAM 区域位置:一般紧跟在Flash存储器之后(图中的附近开始)。作用:用于存储程序运行时的变量、堆栈数据等。
2025-09-02 10:58:31
590
原创 STM32最小系统
组成,为单片机提供时钟信号、复位信号以及外设接口等必要功能。)运行所必需的最少的硬件电路集成在一起的系统。等等模块,不固定根据系统需求进行配置。单片机最小系统是指能够将单片机芯片(它是一种基本的单片机应用系统,通常由。
2025-09-01 16:35:03
383
原创 Linux 的 TCP 网络编程常用API
在 Linux 的 TCP 网络编程中,常用的 API 主要涉及套接字(Socket)的创建、绑定、监听、连接、数据传输和关闭等操作。
2025-08-24 12:42:57
593
原创 SQLite编程中遇见报错error while loading shared libraries: libsqlite3.so: cannot open shared object file: No
这个错误信息表示在运行可执行文件a.out时,系统无法找到所需的共享库文件。
2025-08-16 14:33:42
526
原创 到底什么是交叉编译?
朋友收到后,只需要用他家的微波炉加热一下(设置可执行权限)就可以吃了(运行程序)。方法一(推荐):从嵌入式 SoC 厂商(如 NXP, TI, ST)、开发板厂商(如 Raspberry Pi)或第三方工具链提供商(如 Linaro)下载预编译好的工具链包,解压并设置环境变量。你坐飞机去朋友家(目标设备),在他家狭小的厨房(资源有限)里,用他那里不熟悉的厨具(可能缺少工具或工具不好用)慢慢做饭。想象你是一位厨师(开发者),要给远在另一个国家的朋友(嵌入式设备)做一顿地道的中餐(可执行程序)。
2025-08-16 11:43:11
673
原创 字节序详解
无论你的程序编译运行在什么字节序的机器上,只要你正确使用了这些转换函数,发送到网络上的数据一定是大端序(网络字节序),从网络收到的数据也一定能正确转换为主机字节序。网络协议栈(如TCP/IP)定义了数据包中各个字段的格式和含义,这些字段很多都是多字节整数(如端口号、IP地址、数据包长度、序列号、校验和等)。中,如果定义了自定义的、包含多字节整数(长度字段、状态码、自定义ID等)的消息结构体,并且该协议需要跨不同字节序的主机工作,(源端口、目的端口、总长度、校验和、序列号、确认号、源IP、目的IP等)。
2025-07-29 21:31:07
1286
原创 Linux网络编程——IP地址与端口、通信协议、Socket套接字基础概念解析
IP地址找到网络上的设备端口号找到设备上的应用程序。需要可靠、有序、不怕慢一点-> 选TCP(如文件传输、网页浏览)。需要极速、低延迟、能容忍偶尔丢失-> 选UDP(如视频通话、在线游戏)。在 TCP 或 UDP 之上,定义具体应用的数据格式和交互规则。HTTP是构建在 TCP 上最著名的请求-响应协议,用于 Web。Socket (套接字)是应用程序进行网络编程的统一 API。通过创建类型 Socket 使用 TCP,创建SOCK_DGRAM类型 Socket 使用 UDP。
2025-07-29 19:36:17
641
原创 网络通信协议详解:TCP协议 vs HTTP协议
是两个核心协议,但它们的职责和层级完全不同。TCP是底层传输协议,负责数据的可靠传输;HTTP是应用层协议,定义了如何交换网页内容。下面通过对比和案例详细讲解它们的区别与联系。
2025-07-26 14:20:08
1634
原创 BS架构/CS架构详解(含案例)
通过浏览器访问服务器应用,无需安装客户端,依赖Web技术(HTML/CSS/JavaScript)。:网页版邮箱(Gmail)、在线文档(Google Docs)、电商网站(淘宝)、天气查询网站。:微信、QQ、Steam游戏平台、Photoshop、银行ATM机系统。:客户端和服务器通过专用网络协议通信,客户端需单独开发并安装。下面通过生活化案例和对比,帮助理解两者的差异。是两种主流设计模式。
2025-07-26 14:13:09
1364
原创 Qt 数据QByteArray与QString处理与转换全指南
的类,支持多语言文本处理(如中文、日文等)。它内部使用 UTF-16 编码,提供了丰富的字符串操作方法。,但提供了更多便捷的方法和 Qt 的内存管理优化。(如字节数组)的类。它类似于 C++ 的。是 Qt 中用于存储。是 Qt 中用于存储。
2025-07-23 14:16:16
1662
原创 QT记事本项目——使用事件过滤器实现Ctrl+滚轮字体缩放功能
Qt的事件系统是GUI应用程序的核心机制,所有用户交互(鼠标点击、键盘输入、窗口重绘等)都是通过事件来处理的。原理:所有发送到textEdit的事件会先经过Widget的。:让当前Widget对象监听textEdit的事件。:无需创建新类,直接在现有架构中添加功能。不能直接检测"Ctrl+滚轮"组合事件。:获取垂直滚动量(正值上滚,负值下滚)是滚轮事件且Ctrl按下 → 处理缩放。:需要创建新类,破坏原有代码结构。:事件继续传递给目标对象。:事件已处理,不再传递。:监听其他对象的事件。
2025-07-17 14:32:16
481
原创 QT——事件系统详解
QT的事件系统是QT应用程序处理用户交互和系统通知的核心机制。当用户操作或系统事件发生时,QT会创建相应的事件对象,并将其发送到接收事件的窗口部件。
2025-07-16 16:24:02
673
原创 QT——QList的详细讲解
是 Qt 中最常用的容器之一,适合大多数动态数组场景。如果需要更高的随机访问性能,可以考虑。,用于存储和管理一组元素。它类似于 C++ 标准库中的。,但针对 Qt 的使用场景进行了优化,特别是在。如果需要频繁中间插入/删除,可以考虑。是 Qt 框架中一个常用的。
2025-07-15 22:14:47
716
原创 C++——模版(函数模版和类模版)
模板是 C++ 中一种强大的泛型编程机制,允许开发者编写与类型无关的代码,从而提高代码的复用性和灵活性。通过模板,可以避免为不同数据类型重复编写相似的函数或类,实现真正的代码复用。
2025-07-15 20:12:03
444
原创 QT——QComboBox组合框控件
QComboBox是Qt框架中提供的组合框控件,它结合了按钮和下拉列表的功能,允许用户从预定义的选项列表中选择一个或多个项目。
2025-07-15 14:33:48
791
原创 QT——文件选择对话框 QFileDialog
QFileDialog是Qt框架中提供的文件对话框类,用于让用户选择文件或目录。它提供了标准的文件选择界面,支持文件打开、保存、多选等常见操作。
2025-07-15 11:13:13
883
原创 QT——文件操作类 QFile和QTextStream
QFile是Qt框架中用于文件I/O操作的类,继承自QIODevice,提供了文件读写的基本功能。QTextStream提供了方便的文本读写功能,可以处理不同编码的文本文件。:可以获取文件大小、修改日期等信息。:支持文本和二进制文件的读写操作。:支持重命名、移动、删除等操作。:提供错误检测和处理机制。
2025-07-14 20:48:23
660
原创 QT——信号与槽/自定义信号与槽
适用于大多数情况,但缺乏类型安全。Lambda表达式:适合简单逻辑,代码简洁但可能影响可读性。函数指针:类型安全,适合需要编译时检查的场景。自动连接:简化UI与逻辑的连接,适合快速开发但灵活性较低。根据具体需求选择合适的连接方式,可以显著提高开发效率和代码质量。//在构造函数中进行信号与槽的绑定//第二种方式:QObject::connect(sender, SIGNAL(signal()), receiver,
2025-07-14 20:11:35
917
原创 QT——信号与槽的两种界面实现方式
在Qt框架中,是对象间通信的核心机制,用于实现事件驱动的编程模型。它通过解耦信号发射者和接收者,提供了类型安全、灵活且可维护的跨组件通信方式。
2025-07-14 11:41:26
448
原创 C++——多态
多态是C++面向对象编程的核心特性,它通过虚函数和继承实现“一个接口,多种实现”的灵活机制。合理使用多态可以提高代码的复用性、扩展性和可维护性,是编写高质量C++程序的关键。核心概念virtual关键字实现动态绑定。= 0强制派生类实现,形成抽象类。虚函数表:底层机制,支持运行时多态。应用场景:框架设计、插件系统、图形界面等需要灵活扩展的场景。
2025-07-13 15:12:20
952
原创 C++——多重继承/虚继承/菱形继承
多重继承是C++中一种强大但复杂的特性,它允许类从多个基类继承属性和方法。然而,多重继承也带来了二义性和菱形继承等问题,需要通过作用域解析运算符、重写成员函数或虚继承来解决。
2025-07-12 16:11:04
1164
原创 C++——继承及权限/基类构造函数/虚函数
当创建派生类的对象时,基类的构造函数总是在派生类的构造函数之前被调用。这个表格提供了一个快速参考,帮助理解在不同类型的继承中基类成员的访问级别是如何变化的。当 Roadsetr类的对象被创建时,首先调用 Base 类的构造函数,然后调用 Roadsetr类的构造函数。关键字有助于清晰地表达程序员的意图,并利用编译器检查来避免常见的错误,如签名不匹配导致的非预期的函数重写。中,派生类可以通过其构造函数的初始化列表来调用基类的构造函数。:当通过基类的指针或引用调用一个虚函数时,调用的是对象实际类型的函数版本。
2025-07-12 14:52:55
945
原创 C++——静态数据成员和静态成员函数
计数器:统计创建了多少个对象public:常量定义:全类通用的常量值public:工具方法:与对象无关的功能public:单例模式:确保只有一个实例public:if (!
2025-07-12 10:57:40
479
原创 C++——拷贝构造函数详析
在所有这些情况下,如果类包含资源管理(例如,动态内存分配),那么正确地实现拷贝构造函数是非常重要的,以确保资源的正确复制和管理,防止潜在的内存泄漏或其他问题。这样做的目的是防止类的对象被拷贝,从而避免可能导致的问题,如资源重复释放、无意义的资源复制等。引入了移动语义,允许资源(如动态分配的内存)的所有权从一个对象转移到另一个对象,这避免了不必要的拷贝。通过这些方法,你可以确保你的类的对象不会被意外地拷贝,从而避免可能出现的资源管理相关的错误。中的一种特殊的构造函数,用于创建一个新对象作为现有对象的副本。
2025-07-11 22:52:02
1377
原创 C++——析构函数
析构函数特别重要,尤其是在涉及动态分配的资源(如内存、文件句柄、网络连接等)的情。智能指针和其他自动资源管理技术时,可以减少显式编写析构函数的需要,但了解析构函数的工作原理。中的一个特殊的成员函数,它在对象生命周期结束时被自动调用,用于执行对象销毁前的。:当对象的生命周期结束时(例如,一个局部对象的作用域结束,或者使用。编程实践中,确保资源在对象析构时被适当释放是非常关键的。删除 一个动态分配的对象),析构函数会被自动调用。的析构函数被自动调用,负责清理资源,防止内存泄露。期结束时(即离开了它的作用域),
2025-07-11 20:14:14
233
原创 C++——this关键字和new关键字
thisnew特性this关键字new运算符作用指向当前对象动态分配内存返回值当前对象的指针新分配内存的指针使用场景成员函数中访问当前对象需要运行时决定内存分配时内存位置不适用(是指针)堆(heap)生命周期不适用直到显式delete或程序结束错误风险误用可能导致逻辑错误忘记释放导致内存泄漏。
2025-07-11 17:28:49
823
原创 C++——函数重载与运算符重载
函数,只要它们的参数列表不同(参数类型、参数个数或参数顺序不同)即可。编译器会根据调用时提供的参数自动选择最匹配的函数版本。编译器会将函数名与参数类型信息组合成一个唯一的内部名称,使得不同版本的重载函数在编译后具有不同的名称。运算符重载允许为类或结构体类型重新定义C++内置运算符的行为,使它们能够用于用户定义的类型。函数重载是指在同一作用域内,可以定义多个同名。
2025-07-10 12:36:02
721
原创 C++——引用
引用是已存在对象的别名,通过int x = 10;// ref是x的引用引用关键特性必须初始化:引用在声明时必须初始化不可重新绑定:一旦绑定到某个对象,就不能再绑定到其他对象无空引用:引用必须指向有效对象(与指针不同)自动解引用:使用引用时不需要特殊语法,就像使用原变量一样。
2025-07-10 10:51:38
339
原创 C++——从结构体到类与对象
C++ 的面向对象编程(OOP)核心是和。类是用户自定义的数据类型,用于封装数据(属性)和操作数据的方法(行为);对象则是类的实例。本文将从引入,逐步深入讲解 C++ 的类和对象,结合代码和详细说明。在 C 语言中,结构体(struct数据完全公开,无法控制访问权限操作数据的行为(函数)与数据本身分离(结构体仅包含数据,操作需额外函数实现)缺乏数据保护机制,容易导致非法修改C++ 保留了struct,但允许在结构体内定义函数(方法),并支持访问控制(publicprivatestructpublic。
2025-07-09 13:10:10
839
原创 C++——内联函数与Lambda表达式
捕获方式语法描述值捕获[x]创建x的副本,lambda内不能修改原变量引用捕获[&x]通过引用捕获x,lambda内修改会影响原变量隐式值捕获[=]所有外部变量都通过值捕获隐式引用捕获[&]所有外部变量都通过引用捕获混合捕获[=, &x]除x外所有变量值捕获,x引用捕获隐式混合捕获[&, x]除x外所有变量引用捕获,x值捕获this指针捕获[this]捕获当前类的this指针,可以访问成员变量和函数初始化捕获(C++14)[x = expr]用expr初始化x(可以是移动捕获)
2025-07-08 18:52:39
1027
原创 C++——数据类型与输入输出
C++的标准输入输出系统是基于流(stream)的概念构建的,提供了类型安全、可扩展的I/O操作方式。与C语言的相比,C++的I/O系统通过运算符重载和面向对象的方式,提供了更灵活、更安全的输入输出机制。C++预定义了四个标准流对象,都定义在std对象类型对应C标准流缓冲情况典型用途cinistreamstdin有缓冲标准输入coutostreamstdout有缓冲标准输出cerrostreamstderr无缓冲错误输出(立即显示)clogostreamstderr。
2025-07-08 16:13:03
829
原创 C++——命名空间
命名空间(Namespace)是C++提供的一种机制,用于将全局作用域划分为不同的命名区域,解决名称冲突问题。它是C++对C语言中全局命名空间污染问题的解决方案。int value;
2025-07-08 15:14:43
419
Linux环境下基于Ncurses开发简易贪吃蛇小游戏
2025-05-10
机器视觉-双目测量、极线表示、基本矩阵求解代码
2024-07-12
机器视觉-传统相机标定法、线性求解P矩阵代码
2024-07-12
工程伦理分析PPT-大众汽车排放门事件
2024-07-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅