自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(55)
  • 收藏
  • 关注

原创 什么是 Linux kernel(内核)?架构解析与实战指南

本文详细介绍了Linux kernel内核的核心功能、架构设计、子系统实现及源代码结构。文章以Linux 3.10.29版本为基础,结合ARM架构特性,为嵌入式开发者提供了全面的学习指导。主要内容包括:内核的五大子系统(进程调度、内存管理、虚拟文件系统、网络子系统、进程间通信)的架构与实现;设备驱动开发流程、设备树应用、系统调用与内存管理机制;内核源代码目录结构解析,涵盖关键目录如include/、kernel/、mm/、fs/、net/等。

2025-05-18 00:15:00 718

原创 面试官问我QT单例模式是什么?我的回答令他沉默,结果他把我的回答写成了这篇文章......

单例模式是确保类全局唯一实例的创建型设计模式,核心特性包括唯一实例、全局访问和私有构造函数,适用于资源优化、统一控制和跨模块共享场景。本文详解两种经典实现:懒汉式(按需创建,需通过双重检查锁定和互斥锁实现线程安全,适合高开销对象延迟初始化)与饿汉式(提前创建,依赖 C++ 静态初始化天然线程安全,适合轻量对象即时访问)。结合 Qt/C++ 实战,演示线程安全实现步骤,对比内存管理方案(如智能指针、Qt 对象树),并总结常见误区(构造函数未私有、忽略线程安全、内存泄漏)及避坑指南。

2025-05-12 11:19:55 1221

原创 嵌入式开发面试题全解析:指针、内存、数据类型关键问题总结

本文对嵌入式开发典型面试题进行深度解析,涵盖多方面关键知识。题目 19 揭示字符指针修改字符串常量的错误操作;题目 20 展现strcpy引发的缓冲区溢出风险;题目 21 体现未初始化数组与strlen结合的不可预测性;题目 22 通过位域与对齐规则计算结构体大小;题目 23 因unsigned char溢出导致循环异常。这些题目全面覆盖指针操作、内存管理、数据类型特性等核心内容,精准指出开发中易疏忽的陷阱,有助于理解编程规范,规避风险,提升代码质量与稳定性,是深入掌握嵌入式开发要点的实用指南。

2025-05-07 09:23:36 1081

原创 嵌入式开发面试题详解:STM32 与嵌入式开发核心知识全面解析

本文围绕 STM32 及嵌入式开发关键知识点展开,涵盖 STM32 基本时钟信号、GPIO 配置模式、DMA 功能及数据传输、启动过程,串行通信方式,I2C 总线信号类型,SPI 接口通信线数,CAN 总线概念,单片机低功耗模式及唤醒方式,HardFault_Handler 成因,以及 MIN 和 swap 宏定义等内容。系统梳理嵌入式开发基础,解析 STM32 特性与常见技术要点,为新手学习、面试备考及实际开发提供清晰知识框架,助力深入理解嵌入式系统原理与应用,掌握关键技术细节与实践要点。

2025-05-06 09:40:07 1479

原创 嵌入式开发面试题全解析:从基础语法到内存操作,手把手教你吃透核心考点

本文围绕嵌入式开发高频面试题展开,聚焦新手必备的核心知识与解题逻辑。通过「函数功能分析」「二维数组定义」「STM32 内存操作」「字符串匹配算法」四大典型题型,详细拆解指针操作、数组规则、字节序原理、内存读写等底层原理。每个题目均配备分步解析、代码示例、易错点提示及知识拓展,帮助读者掌握:① 二维数组列数不可省略等基础语法规则;② volatile关键字在内存操作中的关键作用;③ 小端字节序的存储与访问方式;④ 暴力匹配法实现strstr的双重循环逻辑。文中穿插 STM32 硬件特性与嵌入式场景应用。

2025-05-05 19:45:36 1339

原创 嵌入式开发高频面试题全解析:从基础编程到内存操作核心知识点实战

本文围绕嵌入式开发常见面试题,系统解析五大核心模块:数组操作、字符串处理、数据转换、代码规范及结构体位域与内存操作。通过「3x3 数组求和」「字符串去数字排序」「罗马数字转整数」等经典例题,详解数组遍历、字符判断、映射逻辑等基础编程技巧;结合代码规范章节,强调缩进、注释、命名等工程化要点,提升代码可读性。针对嵌入式特有的内存操作场景,通过结构体位域例题,深入分析位域存储规则、小端模式影响及内存布局,帮助新手掌握寄存器配置、协议解析等底层开发能力。每部分均配备分步解析与代码示例,兼顾知识点全面性与实战指导性

2025-05-01 00:00:00 1033

原创 嵌入式开发面试常见编程题解析:pthread_join 与 pthread_detach 详解

在 POSIX 多线程编程中,pthread_join与pthread_detach是管理线程资源的核心函数。二者核心区别体现在阻塞性、资源回收方式及线程状态控制:pthread_join为阻塞函数,需主动等待目标线程终止并回收资源,支持获取线程返回值,适用于依赖子线程执行结果或需顺序同步的场景;pthread_detach为非阻塞函数,将线程设置为分离状态,使其结束时自动释放资源,无需手动回收,但无法获取返回值,适合后台任务、高并发场景以避免主线程阻塞。二者互斥,线程只能处于 “可结合” 或 “分离” 状

2025-04-30 00:00:00 1910

原创 超详细!Ubuntu 系统更新全攻略

Ubuntu 系统更新是保障安全、性能与功能的关键操作。本文提供全流程指南:更新前需备份数据、检查版本并确保网络稳定;基础操作包括更新软件包索引(sudo apt update)、升级已安装包(sudo apt upgrade)及清理缓存(sudo apt autoclean)。版本升级分常规(sudo do-release-upgrade)与开发版(加-d参数),需注意配置文件冲突处理。依赖问题可通过apt-get -f install自动修复,或手动查找缺失包。高级技巧涵盖离线升级、第三方源管理及软件源

2025-04-29 00:00:00 1665

原创 嵌入式开发面试典型编程题解析:排序算法、指针操作、字符处理、递归原理等基础原理的深度解析。

在嵌入式开发面试中,编程题是检验基础能力与逻辑思维的关键环节。本文聚焦新手常见的 4 类典型编程题,通过分步解析、代码示例、知识点详解、易错点警示及拓展应用,帮助读者系统掌握核心考点。内容涵盖:交换法排序:通过双重循环实现成绩降序排列,解析循环逻辑与数组操作细节;指针应用:利用指针作为函数参数实现整数排序,深入理解地址传递与解引用机制;字符类型判断:修正条件判断错误,掌握 ASCII 码范围、逻辑运算符及库函数的正确用法;递归求阶乘:拆解递归两大要素,对比递归与迭代实现,警惕栈溢出与整数溢出问题。

2025-04-28 09:31:56 911

原创 STM32(M4)入门:定时器延时与系统滴答(价值 3w + 的嵌入式开发指南)

【STM32 系统滴答(SysTick)开发全解析:从延时实现到系统级应用】【STM32 定时器延时开发指南:从基础原理到 TIM7 实战应用】嵌入式开发中如何利用硬件定时器实现精准延时?本文深度解析 STM32 定时器体系,以基本定时器 TIM7 为例,手把手教您掌握延时控制核心技术!嵌入式开发中如何实现高精度延时与系统级时间管理?本文深度解析 Cortex-M 内核级定时器 SysTick,带您从原理到实战掌握 24 位计数器的核心应用!

2025-04-27 13:46:48 3333

原创 嵌入式 C 语言面试核心知识点全面解析:基础语法、运算符与实战技巧

本文系统梳理了嵌入式 C 语言面试的核心知识点,结合典型例题与实战场景,帮助读者快速掌握高频考点与应试技巧。内容涵盖:基础语法与运算符:变量作用域、类型转换、运算符优先级(如逻辑运算符短路特性、位运算优化)。控制结构:do-while循环的执行逻辑、continue语句的应用场景。预处理与内存管理:宏定义(#define)的陷阱与优化、静态内存分配的实战技巧。指针与高级特性:指针运算、内存对齐、结构体嵌套与位域操作。嵌入式系统级优化:volatile 关键字的硬件交互场景、编译器优化对代码的影响。

2025-04-26 00:00:00 1028

原创 嵌入式面试核心考点:从 C 语言基础到芯片资源深度剖析

本文围绕嵌入式面试高频题展开,全面剖析相关知识点。涵盖 C 语言基础语法,如变量类型内存占用、逻辑运算与条件编译,详细解释代码执行过程与潜在问题。还介绍标准库函数,包括输入输出、字符串处理、内存管理等常用函数的功能及用法。此外,对嵌入式芯片如 STM32F405RGT6 的性能指标、资源分布、技术优势和应用领域进行深入分析,帮助新手系统掌握嵌入式开发面试要点,提升应对能力与知识储备。

2025-04-25 00:50:49 824

原创 嵌入式面试高频考点深度解析:内存管理、指针操作与结构体实战指南

本文围绕嵌入式面试中最核心的内存管理、指针操作及结构体与联合体应用展开,系统解析四大高频题型(PC 系统结构体地址计算、指针数组操作、联合体与结构体大小计算),涵盖以下关键知识点:内存对齐机制、指针操作核心逻辑、联合体与结构体内存布局、高低地址与字节序。

2025-04-24 11:38:45 800

原创 嵌入式面试题:指针与内存管理

本文聚焦嵌入式面试核心难点,深度解析指针与内存管理(野指针、内存泄漏)、数据类型溢出、中断处理误区、寄存器操作规范等高频易错点,结合典型代码示例逐步拆解问题本质与解决思路。同时为新手规划清晰学习路径,从基础语法巩固、指针与内存专题突破,到调试技能培养及项目实战提升,全方位助力读者构建扎实知识体系,规避开发陷阱,从容应对面试挑战,实现从理论到实践的高效进阶。

2025-04-23 06:00:00 851

原创 Linux 网络编程:select、poll 与 epoll 深度解析 —— 从基础到高并发实战

在 Linux 网络编程中,select、poll 和 epoll 是实现 I/O 多路复用的核心技术,用于高效处理多客户端并发连接。本文从基础原理到实战应用,深度解析三者的差异与适用场景:select:经典入门接口,通过 fd_set 位掩码监听文件描述符,支持水平触发(LT),但受限于 1024 个 FD 上限,适合小规模并发场景,胜在跨平台兼容性。poll:改进 select 的 FD 数量限制,使用 struct pollfd 数组动态管理事件,事件类型更清晰。epoll:通过红黑树管理 FD、链

2025-04-22 15:44:38 1936

原创 Linux 入门十一:Linux 网络编程

Linux 网络编程是实现跨主机进程通信的核心技术,基于 TCP/IP 四层模型(网络接口层、网络层、传输层、应用层),通过套接字(Socket)接口实现数据交互。核心要素包括:IP 地址(标识主机)、端口号(区分进程)、套接字(IP + 端口 + 协议)。

2025-04-22 00:00:00 1276

原创 Linux 入门十:Linux多线程

Linux 入门十:Linux多线程一、线程基础操作:创建与控制。二、线程同步机制:互斥锁(Mutex)条件变量信号量(Semaphore)三、线程属性与进阶分离属性:优先级调度

2025-04-21 00:30:00 738

原创 STM32(M4)入门:GPIO与位带操作(价值 3w + 的嵌入式开发指南)

STM32(M4)入门:GPIO与位带操作(价值 3w + 的嵌入式开发指南)

2025-04-20 16:29:05 3162

原创 嵌入式面试题解析:二维数组,内容与总线,存储格式

嵌入式面试题解析:二维数组,内容与总线,存储格式

2025-04-20 15:03:51 613

原创 嵌入式面试题解析:常见基础知识点详解

原码 / 反码 / 补码:计算机数字表示法,补码简化加减运算,负数用反码加 1 表示。大端 / 小端模式:字节存储顺序,大端高位低地址,小端低位低地址,影响跨平台数据交互。volatile:禁止编译器优化,确保变量值被实时读取(如外设寄存器、中断标志)。int/unsigned int:前者有符号(含符号位),后者无符号,范围分别为正负区间和非负区间。位操作:通过&(清零)、|(置位)、^(取反)精准操作二进制位,是寄存器配置核心技能。这些知识是嵌入式开发的底层基石,贯穿数据表示、存储、操作及硬件

2025-04-19 09:46:38 571

原创 嵌入式面试常见算法题解析:数组元素移动与二分查找

嵌入式面试常见算法题解析:数组元素移动与二分查找

2025-04-18 09:32:45 806

原创 嵌入式面试高频考点全解析:内存存储、数据结构与算法(附代码示例)

本文针对嵌入式开发面试中的七大核心考点(内存存储、队列 / 栈 / 数组 / 链表区别、死循环机制、冒泡排序),以步骤化教学和实战代码为核心,帮助新手快速掌握高频面试题的解题逻辑与拓展知识。

2025-04-17 09:20:42 862

原创 Linux 入门九:Linux 进程间通信

本章聚焦 Linux 进程间通信(IPC)核心机制,涵盖以下重点:管道(Pipe):分为无名管道(亲缘进程、半双工,pipe函数创建)和有名管道(任意进程、文件持久化,mkfifo创建),支持read/write操作,标准流管道通过popen/pclose简化命令交互。信号(Signal):异步通知机制,进程可通过signal函数自定义处理逻辑(如捕获SIGCHLD回收僵尸进程),或忽略、使用默认行为,kill/raise用于发送信号。System V 信号量:通过 PV 操作(P 申请、V 释放)实

2025-04-16 14:32:25 871

原创 嵌入式面试题:内存管理与指针安全类

嵌入式面试题:涉及知识点解释:数组名与指针运算: 在 C 语言中,数组名 代表数组首元素的地址(即 )。 是指针算术运算,由于 是 类型数组,每个元素占 字节(通常为 4 字节),因此 指向 的地址。 解引用该地址,获取 的值,结果为 。数组地址与指针操作: 表示取整个数组的地址,其类型为 (指向包含 5 个 元素的数组的指针)。 会跳过整个数组 的内存空间(偏移量为 )。将 强制转换为 并赋值给 后, 指向数组最后一个

2025-04-16 09:23:23 539

原创 C 语言内存分配详解:C语言入门必备

全局(静态)区是 C 语言中存储长期数据的核心区域,合理使用全局变量和静态变量可简化代码逻辑,但需注意作用域限制和初始化问题。结合extern和static关键字,能有效管理跨文件数据共享与封装。通过以上内容,读者可全面掌握全局(静态)区的原理、用法及注意事项,为后续学习 C 语言内存管理打下坚实基础。// 全局常量(存于 .rodata 段)return 0;常量区是 C 语言中存储只读数据的核心区域,合理使用字符串常量和const变量可提高代码安全性和效率。禁止修改常量区数据,避免运行时错误。

2025-04-15 10:25:47 1294

原创 嵌入式面试题:C 语言基础重点总结

知识点extern关键字的作用、变量声明与定义的区别、跨文件引用全局变量的流程。详细解答extern关键字用于声明一个全局变量,它的作用是告知编译器该变量已在其他地方定义,此时编译器不会为其分配内存空间。而变量的定义则是为变量分配内存并赋予初始值的过程。步骤与例子新建data.c,定义全局变量:// data.c// 定义全局变量,为其分配内存并初始化为 50新建main.c,通过extern声明后使用:// main.c// 声明 global_var,告知编译器它在其他文件中定义。

2025-04-15 09:51:18 504

原创 STM32(M4)入门: 概述、keil5安装与模板建立(价值 3w + 的嵌入式开发指南)

stm32(m4)入门。ARM(Advanced RISC Machine)是一家微处理器行业的知名企业,该企业设计了大量高性能、廉价、低功耗的 RISC(精简指令集计算机)处理器。ARM 公司只负责处理器的设计,并不生产芯片,而是将处理器的技术授权给世界上许多半导体公司,如 ST(意法半导体)、三星、高通等,并为这些公司提供技术服务。凡是采用 ARM 内核设计的芯片均可称为 ARM 处理器。ST(意法半导体)推出了以基于 ARM® Cortex™ - M4 为内核的 STM32F4 系列高性能微控制器。

2025-04-14 01:12:31 4726

原创 C++ 入门六:多态 —— 同一接口的多种实现之道

多态是面向对象编程的核心特性,指同一接口在不同对象上表现出不同行为。一个绘图函数draw(),作用于 “圆形” 时绘制圆形,作用于 “矩形” 时绘制矩形。动物类的speak()方法,狗调用时 “汪汪叫”,猫调用时 “喵喵叫”。核心价值:通过基类指针或引用统一管理派生类对象,大幅减少重复代码,提升系统扩展性。例如,用 “动物” 指针数组存储 “狗” 和 “猫”,调用speak()时自动匹配具体行为。

2025-04-14 00:00:00 706

原创 Linux 入门八:Linux 多进程

在 Linux 系统里,进程指的是程序执行的过程。一个程序在被执行时,系统会为其分配必要的资源,像内存、CPU 时间片等,从而形成一个运行中的实例,也就是进程。例如,当你在终端输入 ls 命令时,系统会创建一个新的进程来执行 ls 程序。

2025-04-13 00:00:00 1324

原创 C++ 入门五:继承与派生—— 代码复用的核心机制

继承是面向对象编程的核心特性之一,允许一个类(派生类 / 子类)直接拥有另一个类(基类 / 父类)的属性和方法,同时可以添加新功能或修改原有功能。核心作用代码复用:避免重复编写基类已有的代码。层次化设计:形成 “is-a” 关系(如 “狗是一种动物”)。忘记调用基类构造函数:若基类没有默认构造函数,派生类必须在初始化列表中显式调用,否则编译错误。Derived(int y) : Base(y) {} // 正确,必须显式调用Base(y)

2025-04-13 00:00:00 771

原创 C++ 入门四:类与对象 —— 面向对象编程的核心基石

类是对现实世界中事物的抽象描述,将数据(属性)和操作数据的函数(行为)封装在一起。class 类名 {public: // 共有成员(类外可直接访问)// 共有数据成员(通常为接口函数,而非直接暴露数据)void 成员函数();// 示例:初始化、数据操作等protected: // 保护成员(类内及派生类可访问)// 保护数据成员或函数(用于子类继承扩展)private: // 私有成员(仅类内可访问)// 私有数据成员(核心数据,通过共有接口操作)// 类定义末尾必须加分号。

2025-04-12 00:00:00 675

原创 Linux 入门七:从基础到进阶的文件操作

打开文件:通过open函数设置模式(如O_RDWR)和权限(结合umask计算实际权限)。读写数据:使用readwrite直接操作文件描述符,适合高性能场景(如大文件复制)。特殊描述符:掌握0(输入)、1(输出)、2(错误)的用途,学会重定向标准流。高级控制lseek实现光标精准定位(开头、当前位置、末尾偏移)。stat家族函数获取文件详细信息(类型、权限、大小、时间等)。通过系统调用,开发者可直接操控文件底层行为,满足高性能、高可靠性场景需求。后续可结合标准 IO 库(如fopenfread。

2025-04-12 00:00:00 996

原创 嵌入式面试题:C 语言核心考点经典例题

通过对这几道嵌入式面试题的分析,我们可以看到嵌入式开发中对 C 语言基础知识的要求较高。掌握按位运算、数据类型转换、变量存储类型、sizeof运算符等知识点,对于解决实际问题和应对面试都非常重要。希望大家通过学习这些内容,能够在嵌入式开发的道路上取得更好的成绩。

2025-04-11 09:31:44 691

原创 linux入门六:Linux Shell 编程

Shell 是 Linux 系统中用户与内核之间的桥梁,作为命令解析器,它负责将用户输入的文本命令转换为计算机可执行的机器指令。本质:Shell 是一个程序(如常见的 Bash、Zsh),而 Shell 脚本则是包含一系列命令的文本文件,通常以.sh结尾(非强制,仅为识别方便)。作用:批量执行重复命令、实现自动化任务、编写复杂逻辑程序。变量赋值空格a = 10错误,必须为a=10。中括号空格[条件]需写成[ 条件 ](如路径问题:执行脚本需用./脚本名,直接输入脚本名会提示 “命令未找到”。

2025-04-11 00:00:00 1216 2

原创 C++ 入门三:函数与模板

核心特性:在编译阶段,内联函数的函数体会直接嵌入到调用它的代码中,避免了普通函数的调用开销(如压栈、跳转、返回)。语法:在函数声明或定义前加inline关键字。" << endl;传统重载需为每种类型写一个函数(如交换intfloat等),代码冗余。模板通过类型参数化实现 “一次定义,多类型适用”。template <typename T1, typename T2> // 支持多个类型参数private:T1 x;T2 y;

2025-04-11 00:00:00 762

原创 嵌入式面试题: 宏定义与运算逻辑考察

通过对这三道题的分析,我们深入理解了宏定义的文本替换特性、字符与 ASCII 码的运算以及函数值传递机制,这些都是 C 语言编程中的基础且重要的知识点。本质是两者 ASCII 码值的差值。通过计算差值并偏移,可得到目标字符。在 C 语言中,字符参与运算时会使用其对应的 ASCII 码值。即主函数传递给被调函数的是实参的副本,被调函数对形参的修改。此时需遵循运算符优先级,先计算乘法。C 语言中,函数参数传递默认是。仅进行简单的文本替换,

2025-04-10 09:18:55 164

原创 Linux 入门五:Makefile—— 从手动编译到工程自动化的蜕变

手动编译的痛点:当工程包含数十个源文件时,每次修改都需重复输入冗长的编译命令(如),且无法自动识别哪些文件需要重新编译。Makefile 的核心价值:通过定义 “目标 - 依赖 - 命令” 规则,实现自动化编译。只需执行make命令,即可根据文件修改时间智能判断编译顺序,避免重复工作,大幅提升开发效率。本质:一个名为Makefile(或makefile)的文本文件,存储编译规则,由make命令解析执行。赋值符号特性示例适用场景递归展开(可引用后续定义的变量)需要动态计算值的场景:=

2025-04-10 08:46:55 1187

原创 C++ 入门二:C++ 编程预备知识

在计算机中找到 Qt Creator 的应用程序图标并双击打开它。如果是首次打开,可能需要进行一些初始化设置,如选择默认的开发环境等。

2025-04-10 00:00:00 1901

原创 linux入门四:Linux 编译器

特点:程序运行时动态加载,多个程序可共享,节省内存,更新方便(无需重新编译程序)。命名规则:lib库名.so(如libadd.so,库名为 add)。特点:库代码在编译时直接嵌入可执行文件,运行时无需依赖库文件,体积较大,更新需重新编译程序。命名规则:lib库名.a(如 libadd.a,库名为 add)。新手入门:先用 GCC 编译简单 C 程序,掌握 -o、-c 等基础选项。进阶学习:理解编译四阶段,学会用 GDB 调试代码,解决编译错误(如头文件缺失、链接失败)。库开发。

2025-04-09 18:43:57 594

原创 一文搞懂 串口、MODBUS、UART、USART、RS232、RS485、SPI、IIC、CAN 总线的区别

本文系统对比工业通信领域常见的 8 大底层协议(UART/USART/RS232/RS485/SPI/IIC/CAN)及 MODBUS 应用层协议,从技术原理、硬件特性、应用场景等维度解析核心区别。

2025-04-09 18:37:50 1986

空空如也

空空如也

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

TA关注的人

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