- 博客(225)
- 收藏
- 关注
原创 5G 核心网架构入门
以下为基于 3GPP TS 23.501 (Release 17) 的 5G 核心网架构学习笔记,已全面补充中英文对照、接口逻辑、图示说明及术语问答,适用于架构入门与问题分析。
2025-12-18 23:06:20
930
原创 5G为何强调“NR”?
用接口解耦理解系统行为用信道映射理解调度原理用协议流程指导问题定位未来的终端问题分析、模组适配、网络调优等能力,都以此为“底层操作系统”。
2025-12-17 21:00:00
727
原创 复盘L1(PHY)
起点是指标(36.214):先看 KPI 异常再往下追溯机制(36.213 / 36.212 / 36.211):逐层剥洋葱最终到调优与验证:找到能调整的杠杆 → 优化 → 验证 KPI“指标指路 → 问题下钻 → 找到杠杆 → 优化验证”这样建立起的工程问题分析思维能把前面学的所有协议知识(36.211–36.214)真正落到工程实践和性能调优上。下面提供一份完整的、可直接使用的学习成果工具包专门用于LTE 空口协议(36.211 / 36.212 / 36.213 / 36.214)
2025-10-05 11:11:56
968
原创 浅析性能需求
36.214 不教机制,而是教你“达标线”学习时要能回答:某场景下 MCS 过高 → BLER >10% → HARQ 重传多 → 吞吐下降小区边缘 MCL 高 → 只能用低阶 MCS → 吞吐低但能保证连接理解这三大指标,可以将之前学过的功率控制、MCS 调度、HARQ 与实际 KPI 直接对应,形成完整的工程思维链条。下面整理一张系统化的“36.211/212/213 → 36.214 性能指标” 关联图谱让你看到机制 → 性能 → 工程结果的完整链路。
2025-10-04 13:00:00
799
原创 浅析物理层过程
36.213 的动态机制是 LTE 空口高效稳定运行的核心通过功率控制、调度、MCS 自适应、HARQ、CSI 反馈等闭环,实现:高频谱效率稳定链路质量快速响应无线环境变化搞懂这些机制,就能理解抓到的下行 DCI、HARQ 日志,以及链路中性能优化的根本原理。下面详细解释MCS和HARQ这两者是 LTE 物理层(TS 36.213)的两大核心概念。MCS(调制+编码方案)决定链路的数据速率与初始误块率HARQ(混合自动重传)通过快速补发冗余提升解码成功率。
2025-10-03 22:55:57
732
原创 浅析信道编码
在无线传输前添加冗余与组织结构,使接收端能检测/纠正误码 → 保证数据可靠性。PHY 层发射链最上游 → 紧跟 MAC,先编码再调制。理解 CRC、Turbo、TBCC、速率匹配、交织五个步骤记住 Attach 中控制/数据信息走的不同编码方案搞清楚编码与调制、加密、HARQ 的关系掌握这一层次的理解后,阅读 TS 36.212 的具体公式和参数(如编码矩阵、码块大小)会更有针对性,不会迷失在细节里。下面为你完整梳理CRC、Turbo、TBCC 的全称与基本实现原理基于 LTE。特性。
2025-10-03 01:31:26
553
原创 浅析PHY信道结构
PHY 层是协议栈 → 无线波形的最后一步定义了帧结构、时频资源、物理信道及其映射直接支持Attach 接入 / 调度 / 数据承载 / 广播 / 反馈与 MAC 紧密协作,共同保证 LTE 空口的高效与可靠传输✅ 以上就是基于 Release-17 TS 36.211 V17.4.0 的 PHY 层总体认识下面整理Step 2:物理信道分类基于建立 PHY 层各类物理信道的清晰概念。LTE PHY 层定义了数据承载 → 控制 → 接入 → 参考信号四大类物理信道是主要的数据管道。
2025-10-01 13:00:00
1225
原创 浅析MAC
MAC 并不是更复杂,而是更贴近无线资源管理 → 涉及的细节多掌握 MAC = 掌握 “调度 + 打包 + 快速重传” 三件事功能表之所以显得抽象,是因为它面向规范;用故事串起来后会更直观✅ 先用这个“UE 上电 → 发第一包数据”的流程图景,去对照功能表;下面给出基于 Release 17 / TS 36.321 V17.4.0(2023-03)的逻辑信道 ↔ 传输信道 ↔ 物理信道映射表,这是 MAC 学习中的核心知识点之一。我将按下行 / 上行分别列出,并加上中英文说明。位置:由。
2025-09-29 13:00:00
758
原创 浅析RLC
功能类别功能说明 (中文)英文术语典型场景分段与重组把上层 PDCP PDU 按照 MAC 可调度的大小进行分段,在接收侧重新组装所有业务类型错误恢复(仅 AM)使用 ARQ 确认 / 重传机制,重发丢失或错误的 PDU适合可靠性要求高的业务,如信令顺序交付确保接收端按序交付数据给 PDCP,即使乱序到达AM / UM重复检测检测并丢弃重复接收的 PDUAM / UM,切换或无线干扰场景流量控制(仅 AM)基于发送/接收窗口进行流量控制,防止接收方缓存溢出AM 模式传输模式支持。
2025-09-28 13:00:00
1809
原创 浅析PDCP
控制面 (SRB)在整个 Attach 流程中始终存在,用于 NAS/RRC 信令。在之后,PDCP 为 SRB 提供加密 + 完整性 + 重放保护。用户面 (DRB)在 Attach 初期不存在,只有在阶段才被建立。建立后,PDCP 在 DRB 上启用加密 + 头压缩 + 重排序,用户数据流正式可用。Attach 流程中,PDCP什么时候启动控制面 vs 用户面各自的动作和分工根据梳理一组Q&A 卡片,覆盖控制面与用户面的主要功能、Attach 流程中的动作点,以及和其他层的关系。
2025-09-27 13:00:00
764
原创 浅析RRC
RRC 是 NAS Attach 的“搬运工”它承载 NAS 消息(Attach Request/Accept/Complete)。它在必要时建立SRB来传信令。它在 Attach Accept 阶段配置DRB来开通用户面。RRC 的作用点上电时:广播系统信息(MIB/SIB)。接入时:建立 RRC 连接 (SRB)。Attach 流程中:承载 NAS 消息。Attach Accept 后:通过 RRC Reconfiguration 配置 DRB,打开数据通道。✅ 这样就能把。
2025-09-26 13:00:00
1145
原创 整合LTE知识框架
架构图 ↔ 协议栈表:接口 ↔ 协议层的交互协议栈表 ↔ 控制面流程图:RRC/NAS 功能 ↔ Attach 信令序列协议栈表 ↔ 用户面流程图:PDCP/RLC/MAC/PHY 功能 ↔ 用户数据传输链路系统图给了你“谁和谁交互”;分层表给了你“每层干什么”;控制面流程和用户面流程则告诉你“这些层在时序/数据流里如何运作”。整合一张LTE 知识框架表,横向对比控制面 vs 用户面,并加上典型协议/接口。接口 (Interface)在 3GPP LTE/EPC 架构里,接口。
2025-09-25 13:06:27
733
原创 理解协议栈分层
根据(Overall architecture、Physical Layer、Layer 2、RRC)把 LTE 协议栈分层整理成一个表格,涵盖。
2025-09-22 12:04:19
691
原创 LTE/EPC 架构
(长期演进,Long Term Evolution)和(演进型分组核心网,Evolved Packet Core)是 4G 移动通信系统的核心组成部分,共同实现高速数据传输、低时延和灵活组网,二者分工明确(LTE 负责无线接入,EPC 负责核心网络控制与数据转发)。基于整理一张,把关键网元、功能和典型接口梳理出来。
2025-09-20 14:38:23
818
原创 C语言内存泄漏检测技术深度解析与嵌入式开发实践
注:Valgrind在资源受限设备(如RAM<64MB)可能引发性能瓶颈,建议在开发阶段使用模拟环境检测。优势:低开销(约5% RAM占用)、支持离线分析。C语言内存泄漏检测技术深度解析与嵌入式开发实践。一、内存泄漏的嵌入式威胁与检测原理。需编译器支持(GCC/Clang)(高级嵌入式软件开发工程师视角)内存泄漏检测在嵌入式系统中需兼顾。二、主流检测工具与嵌入式适配。仅支持Linux嵌入式环境。四、高频面试题与深度解析。三、嵌入式开发优化策略。五、总结与延伸方向。
2025-03-28 09:00:00
852
原创 C语言Canary值检测栈溢出机制与嵌入式开发实践
Canary作为"警戒线"隔离局部变量与关键控制数据(返回地址、基址指针),有效阻止溢出攻击路径。| Canary值 | ← 位于rbp-8(x86_64架构)自定义Canary验证失败处理(替代默认abort)C语言Canary值检测栈溢出机制与嵌入式开发实践。一、Canary机制的核心原理与实现。| 旧rbp |二、嵌入式开发中的特殊挑战与优化。| 函数参数 || 返回地址 || 局部变量 |禁用非常规格式符(%n/%s)
2025-03-26 09:00:00
1020
原创 C语言指针运算深度解析与嵌入式开发实战
实际地址增加:2 * sizeof(int) = 8字节(32位系统)watch *(int*)0x20000000 # 监控内存写入。rwatch *ptr # 监控读取。C语言指针运算深度解析与嵌入式开发实战。(高级嵌入式软件开发工程师视角)二、嵌入式开发中的指针运算实战。三、高频面试题与深度解析。一、指针运算的核心机制。自定义分配逻辑 */四、调试与优化技巧。五、总结与延伸方向。
2025-03-25 09:00:00
1582
原创 C语言动态内存管理深度解析与嵌入式开发实战
/ 嵌入式系统需降级处理。C语言动态内存管理深度解析与嵌入式开发实战。二、嵌入式开发中的特殊约束与优化。(高级嵌入式软件开发工程师视角)一、动态内存函数原理与差异。三、常见动态内存错误与防御。四、高频面试题与深度解析。以下代码有何问题?
2025-03-24 22:52:22
964
原创 堆与栈的本质差异及嵌入式开发深度解析
堆:需开发者显式管理(`malloc`/`free`或`new`/`delete`),生命周期由代码逻辑决定。- 答案:管理方式(自动 vs 手动)、空间特性(固定 vs 动态)、性能(速度/碎片)、存储内容(函数上下文 vs 动态数据)。- 答案:静态分析(编译警告)、运行时检测(Canary值)、硬件特性(ARM的Stack Limit寄存器)。- 栈溢出:递归过深或局部数组过大导致,需通过静态分析工具(如`-Wstack-usage`)预判。- 答案:内存泄漏(未调用`free`)。
2025-03-21 09:00:00
1400
原创 动态内存分配
分配策略:首次适应(First-fit)/最佳适应(Best-fit)算法对碎片率影响显著。- 分级内存池:为不同尺寸对象创建独立内存池(如<64B, 64-256B, >256B)- 堆空间需手动管理,容量可达MB级但分配耗时不可预测(典型耗时:μs~ms级)- 工具链配置:GCC的`-Wl,--wrap=malloc`实现分配器行为监控。- `-fno-builtin-malloc`禁用内置分配器实现定制化管理。- 使用`CYCCNT`寄存器(Cortex-M系列)精确测量分配耗时。
2025-03-21 05:00:00
691
原创 嵌入式驱动开发方向的基础强化学习计划
指针与内存管理:动态内存分配、指针运算、内存泄漏检测(Valgrind工具)。- 进阶方向:完成基础阶段后,可进入驱动开发核心技能阶段(如Linux网络协议栈适配)。- 参与Zephyr OS开源项目,提交一个驱动模块代码(如温度传感器驱动)。- 项目复用:将SPI通信模块、LED驱动Demo作为简历项目案例,提升技术背书。- 通信协议:SPI/I2C协议时序分析、硬件调试工具(逻辑分析仪使用)。- 第4周:在树莓派上搭建Linux驱动开发环境,调试一个字符设备驱动模块。
2025-03-21 00:32:38
670
原创 运算符重载(operator overloading)
运算符重载(operator overloading) 运算符重载,就是对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型。 在C++中,可以定义一个处理类的新运算符。这种定义很像一个普通的函数定义,只是函数的名字由关键字 operator 及其紧跟的运算符组成,差别仅此而已。它像任何其他函数一样也是一个函数,当编译器遇到适当的模式时,就会调用这个函数。1. 加号运算符重载 如果想让自定义数据类型 进行+运算 需要重载 + 运算符 在成员...
2022-03-18 00:23:03
1956
原创 强化封装——数组类封装
强化封装——数组类封装MyArray.hclass MyArray {public: MyArray();//默认构造,默认100容量 MyArray(int capacity); MyArray(const MyArray& array);//拷贝 ~MyArray();//拷贝 void push_Back(int val);//尾插法 int getData(int index);//根据索引获取值 void setDat...
2022-03-13 17:35:28
344
原创 友元函数(friend)
全局函数 做 友元函数 类的主要特点之一是数据隐藏,即类的私有成员无法在类的外部(作用域之外)访问。但是,有时候需要在类的外部访问类的私有成员,怎么办? 解决方法是使用友元函数,友元函数是一种特权函数,C++允许这个特权函数访问私有成员,。 程序员可以把一个全局函数、某个类中的成员函数、甚至整个类声明为友元。 让全局的好基友函数 变为 我的好朋友 友元函数 友元函数 目的:访问类中的私有成员属性 全局函数做友元函数 ...
2022-03-10 22:46:00
3521
原创 常函数与常对象
常函数与常对象 常函数 void func() const {} 常函数 修饰是 this 指针 const Type* const this 常含数 不能修改 this 指针指向的值 常对象 在对象前 加入 const 修饰 const Person p1 常对象 不可以调用普通的成员函数 常对象 可以调用常含数 class Person {public: Person() { /* ...
2022-03-10 18:51:41
290
原创 空指针访问成员函数
空指针访问成员函数 若成员函数没有用到 this ,那么空指针可以直接访问 如果成员函数用到 this 指针,就要注意, 可以加if判断,如果 this 为空就 returnclass Person0007 {public: void show() { cout << "Person show." << endl; } void showAge() { if (this == NULL) { ...
2022-03-10 13:13:30
207
原创 this指针基本使用
C++面向对象模型初探this指针基本使用 C++的数据和操作也是分开存储,并且每一个非内联函数(non-inline member function)只会诞生一份函数实例,也就是说多个同类型的对象会公用一块代码。 一块代码是如何区分哪个对象调用自己的呢? C++通过提供特殊的对象指针,this指针,解决上述问题。this指针指向被调用的成员函数所属的对象。 C++规定,this是隐含在对象函数内的一种指针。当一个对象被创建后,它的每一个成员函数都含有一个系统自动生成的...
2022-03-10 13:00:39
727
原创 成员变量和成员函数分开处理
C++面向对象模型初探成员变量和成员属性分开处理C++实现了“封装”,那么数据(成员属性)和操作(成员函数)是什么样呢?“数据”和“处理数据的操作(函数)”是分开存储的。 1. C++中的非静态数据成员直接内涵在类对象中,就像 C struct一样。 2. 成员函数(member function)虽然内涵在class声明之内,却不出现在对象中。 3. 每一个非内联成员函数(non-inline member function)只会诞生一份函数实例。空类的大小为 1...
2022-03-10 11:06:20
171
原创 静态成员变量 和 静态成员函数
静态成员变量 和 静态成员函数静态成员变量 编译阶段分配内存 所有对象共享数据 通过对象访问、通过类名访问 有权限控制 类内声明、类外初始化 在一个类中,若将一个成员变量声明为static,这种成员称为静态成员变量。与一般的数据成员不同,无论建立多少个对象,都只有一个静态数据的拷贝,静态成员变量,属于某个类,所有对象共享。 静态变量,是在编译阶段分配空间,对象还没有创建时,就已经分配空间。 静态成员变量必须在类中声明,在类外定义。...
2022-03-06 23:29:32
452
原创 动态对象创建
动态对象创建C语言中malloc和free的问题: 1. 程序员必须确定对象的长度; 2. malloc 返回一个 void*指针,C++不允许将 void*赋值给其他任何指针, 故必须强转; 3. malloc 可能申请内存失败, 所以必须判断返回值来确保内存分配成功; 4. 用户在使用对象之前必须记住对他初始化, 构造函数不能显示调用初始化(构造函数是由编译器调用), 用户有可能忘记调用初始化函数。new operator new 会返回一个该...
2022-03-06 20:11:44
740
原创 explicit关键字作用
explicit关键字作用 作用:防止构造函数中的隐式类型转换class MyString {public: MyString(const char* str) { } explicit MyString(int a) { mSize = a; } char* mStr; int mSize;};void test006() { MyString str = "abc"; //隐式类型转换 MyStr...
2022-03-06 18:18:48
141
原创 类对象作为类成员的案例
类对象作为类成员的案例 类对象作为类成员, 构造顺序先将类对象一一构造,然后构造自己; 析构顺序与构造的顺序相反,先析构自己,再析构对象。class Phone {public: Phone() { cout << "Phone's default constructor." << endl; } Phone(string name) { m_PhoneName = name; cout << "Phone's par...
2022-03-06 17:55:53
209
原创 初始化列表
初始化列表 初始化列表语法在构造函数后面 + :属性(值、参数),属性(值、参数)class Person005 {public: /*Person005() { }*/ //有参初始化数据 /*Person005(int a, int b, int c) { m_A = a; m_B = b; m_C = c; }*/ Person005() :m_A(10), m_B(20), m...
2022-03-06 17:15:31
224
原创 深拷贝与浅拷贝
深拷贝与浅拷贝“Person05::Person05(char *,int)”: 无法将参数 1 从“const char [5]”转换为“char *” Project1 解决方法:右键项目 -> 属性 -> C/C++ -> 语言 -> 符合模式改成“否”浅拷贝:系统默认提供的拷贝构造,做简单的值拷贝; 如果属性里有指向堆空间的数据,那么简单的浅拷贝会导致重复释放内存的异常。 解决该问题,需要自己提供拷贝构造函数,进行深拷贝。 深拷...
2022-03-06 16:59:45
458
原创 对象的构造和析构
对象的构造和析构1. 对象的初始化和清理 构造函数 和 析构函数 被编译器自动调用完成对象初始化和对象清理工作。2. 构造函数 和 析构函数 构造函数写法与类名相同,没有返回值,不写void(可以有参数) 可以发生重载构造函数由编译器自动调用,而不是手动,且只调用一次。 析构函数写法与~类名相同 类名前面加一个符号“~” 也没有返回值,不写void 不可以有参数(不能)自动调用 只会调用一次 如果没有提供构造和析构,系统会默认提供...
2022-03-06 15:31:36
742
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅