- 博客(16)
- 收藏
- 关注
原创 BSP之以太网接口学习笔记
以太网接口硬件架构与调试要点 嵌入式Linux网络子系统开发中,MAC与PHY的协同是关键。硬件链路为:SoC→MAC→xMII接口→PHY→网络变压器→RJ45。 数据接口包括: MII:百兆标准,4位并行 RMII:精简版,2位并行,50MHz时钟 RGMII:千兆主流,DDR技术,需注意时钟偏斜问题 SGMII:高速串行,基于SerDes 管理接口MDIO采用主从架构,MAC通过MDC/MDIO控制多PHY芯片。调试时需特别注意RGMII的延时配置(rgmii-id模式)和MDIO上拉电阻等硬件细节。
2025-12-10 21:12:15
628
原创 C++11新特性---智能指针
在传统的C/C++编程中,我们使用new在堆上分配内存,并用delete来手动释放。deletedelete:手动管理内存,开发者需要精确地知道谁(哪个指针)拥有这块内存,以及何时应该释放它。在复杂的程序中(例如,函数有多个返回路径、发生异常等),这变得极其困难。:将内存(或任何资源)的所有权封装在一个对象中。当这个对象离开作用域时,它的析构函数会自动被调用,并在析构函数中释放所管理的资源。这就是自动化内存管理。
2025-10-05 10:53:43
848
原创 常考知识点---内存对齐
内存对齐(Memory Alignment)是指数据在内存中的存放位置。它并不是把数据随意地连续存放,而是让数据的起始地址“对齐”到一个特定的边界上,这个边界通常是该数据类型大小的整数倍。想象一个图书馆的书架,每格宽度为8本书。在计算机中,CPU 就是图书管理员,内存就是书架,数据就是书。CPU 访问内存通常不是一个字节一个字节地访问,而是以为单位进行的块读取。一个字的大小通常是4字节(32位系统)或8字节(64位系统)。
2025-10-04 18:45:41
794
原创 C与C++---指针、引用、结构体及内存管理
这是C++引入“引用”后最经典的对比。总的来说,引用是变量的“别名”,而指针是存储变量地址的“变量”。
2025-10-04 18:34:54
869
原创 C与C++---类型转换
类型转换是将在一种数据类型表示的值转换为另一种数据类型的过程。隐式转换 (Implicit Conversion):由编译器自动完成,通常发生在不同类型的变量混合运算时。例如int a = 5;,整数5会被自动提升为浮点数5.0。显式转换 (Explicit Conversion / Casting):由程序员在代码中明确指定,也就是我们通常所说的“强制类型转换”。转换类型主要用途检查时机安全性关键点C-Style(T)expr万能,但意图不明编译时(弱)非常低。
2025-10-04 11:27:36
882
原创 C++---构造函数详解
构造函数是类中用于初始化对象的特殊成员函数,具有与类名相同的名称且无返回类型。主要类型包括:默认构造函数(无参)、带参数构造函数、拷贝构造函数(用现有对象初始化新对象)、移动构造函数(C++11,高效转移资源)、转换构造函数(单参数隐式转换)和委托构造函数(调用同类其他构造函数)。初始化列表用于在对象创建时直接初始化成员变量,相比构造函数体内赋值更高效。构造函数支持重载,但不能为虚函数或静态成员。合理使用构造函数能确保对象初始状态有效且高效。
2025-10-03 16:27:34
1184
原创 常考关键字---const、static与volatile
特性const(常量)static(静态)volatile(易变)核心作用承诺值不会被修改控制生命周期和可见性防止编译器过度优化告诉谁主要告诉编译器和其他程序员告诉编译器和链接器主要告诉编译器主要目的保证数据只读,增强代码健壮性实现数据共享、状态保持、隐藏实现确保直接访问内存,处理程序外的数据变化生命周期不改变生命周期延长局部变量生命周期至整个程序不改变生命周期典型场景定义常量、保护函数参数、const成员函数类的对象计数器、文件内的私有全局变量访问硬件寄存器、中断服务例程线程安全。
2025-10-02 16:14:43
908
原创 C基础---函数指针与指针函数
函数指针 (Function Pointer)它是一个指针。这个指针变量存放的是一个函数的内存地址。指针函数 (Pointer Function)它是一个函数。这个函数的返回值是一个指针(地址)。特性函数指针 (Function Pointer)指针函数 (Pointer Function)本质一个指针变量一个函数定义语法返回值 (*指针名)(参数);返回值* 函数名(参数);核心标志指针名前的被括号()包围函数名前只有一个,且与返回值类型关联用途存储函数的地址,用于间接调用函数(如回调)
2025-10-02 11:16:21
728
原创 C++---面向对象三大特性(万字长文)
继承是面向对象编程的一个核心机制,它允许我们创建一个新类(派生类 / 子类,Derived / Child Class),这个新类可以获取一个已存在类(基类 / 父类,Base / Parent Class)的属性和方法。这种关系通常被称为 “is-a” (是一种) 关系。例如,Car(小汽车)is-aVehicle(交通工具)。通过模板函数重载运算符重载CRTP(奇异递归模板模式)等技术,让同一个接口在编译期选择不同实现,无需运行时分派,零虚表开销。
2025-10-02 09:29:00
5948
原创 通信协议笔记之SPI
SPI协议学习笔记摘要: SPI(Serial Peripheral Interface)是一种全双工同步串行通信协议,采用主从架构,通过SCLK时钟同步数据交换。标准SPI包含4条信号线(SCLK、MOSI、MISO、CS),支持多从机星型(独立片选)或菊花链级联连接。通信时需配置时钟极性(CPOL)和相位(CPHA),确保主从模式一致。SPI具有高速、低延迟优势,适用于Flash、显示屏、传感器等外设。相比I2C,SPI线数更多但速率更高;相比UART,SPI为同步通信。开发时需注意时序匹配、干扰抑制
2025-09-24 22:30:23
970
原创 通信协议笔记之I2C
是飞利浦公司(现NXP)提出的低速、双线、半双工、同步串行通信总线协议,主要用于芯片间短距离通信。应用场景:常见于MCU与传感器、EEPROM、时钟芯片(RTC)、ADC/DAC、扩展I/O等外设的通信。开漏(open-drain/open-collector)输出只有“拉低”和“高阻”两种状态,不能主动拉高电平。I2C采用开漏输出是为了允许多个设备安全并联在总线上:只要有一个设备拉低线,总线就是低;没有设备拉低时,上拉电阻自动拉高电平。
2025-09-23 22:17:09
801
原创 通信协议笔记之UART
UART(Universal Asynchronous Receiver/Transmitter):一种异步串行通信协议,常用于 MCU 与外设、PC、传感器、模块等的点对点通信。异步通信,无需共享时钟。典型用于一对一通信(TX→RX)。简单易用,应用广泛。
2025-09-23 22:16:07
1133
原创 基于web的ai五子棋对战平台
本项目是一个基于Vue3前端和C++后端的五子棋对战平台,支持在线多人对战和人机对战。系统提供完整游戏功能包括房间大厅、实时聊天、观战模式及三种AI难度(使用极大极小算法+棋型评估)。后端采用纯手写HTTP/WebSocket服务,结合MySQL管理用户数据与对战信息。前端使用Vue3+TailwindCSS实现响应式界面,整体架构支持Nginx生产部署。GitHub地址:https://github.com/heeeellow/ai-gobang-web
2025-06-16 15:40:01
1346
原创 线性数据结构---链表
链表是一种线性数据结构,与数组不同,链表在内存中并不是连续存储的,因此不能通过索引直接访问某个元素。链表由一系列结点组成,每个结点包含两个部分: 数据域(Data Field):存储实际数据。 指针域(Pointer Field):存储指向下一个结点的指针。
2025-01-31 20:45:07
1797
原创 线性数据结构---顺序表
顺序表是一种有序的数据结构,用于存储一组具有相同数据类型的元素。顺序表中的元素在内存中是连续存放的,因此可以通过下标直接访问元素。顺序表有两种实现方式,第一种是分配一块固定的的内存(数组),缺点是我们通常无法事先确定需要存储多少数据,从而难以选择合适的数组长度。若长度过小,则很可能无法满足使用需求;若长度过大,则会造成内存空间浪费。第二种方式是使用动态数组实现,它继承了数组的各项优点,并且可以在程序运行过程中进行动态扩容。本文主要讨论第二种方式。
2025-01-14 15:51:57
1376
原创 基于Qt6.8+MySQL8.0的电子元器件仓库管理系统
从0开始学Qt大概一个月,完成了这个练手项目。遇到最大的一个坑就是编译MySQL的驱动,最后重装了一遍Qt原码以及更新msvc2022和mingw64才编译成功。数据库设计的还是很草率,没有使用触发器和视图,全部靠代码逻辑来管理。考虑到数据库并不复杂,所以也能写下来。自己使用的时候数据库部署在华为云上,如果需求是部署在本地的话建议使用SQLite重构一遍。内部代码写的比较混乱,可以说是高耦合低内聚,仅做为记录学习过程供大家参考。
2024-12-15 02:25:56
1523
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅