- 博客(69)
- 收藏
- 关注
原创 FT5446U 触摸屏移植到安凯平台的实现指南
本文详解 FT5446U 触摸屏(I2C 接口)向安凯平台的移植流程。首先介绍硬件接口(I2C_SDA、I2C_SCL、INT、RST)及驱动文件结构(含供应商提供的 focaltech_touch 文件夹及各组件文件功能),随后分步说明移植操作:部署驱动文件、配置编译选项(Kconfig/Makefile 及 defconfig)、编写设备树节点、适配核心代码(如修改兼容名、关闭自定义电源管理),并涵盖编译测试方法。最后列出故障排查要点,包括 I2C 总线、GPIO 引脚验证及硬件检查。
2025-08-21 11:30:07
3340
原创 Linux 文件共享之 HGFS 共享配置全解析
本文聚焦 Linux(以 Ubuntu 为例)与主机间 HGFS 共享配置,适合初学者。先介绍 VMware 中设置共享文件夹,通过vmware - hgfsclient检查基础状态。接着分情况安装open - vm - dkms或open - vm - tools - dkms软件包,详细演示不同包对应的挂载步骤,含创建挂载目录、执行挂载命令。还讲解通过编辑/etc/fstab实现开机自动挂载,拓展常见问题(如目录非空、依赖缺失、版本适配)及解决办法,助力读者掌握 HGFS 共享,便捷传输文件 。
2025-07-15 11:58:20
1211
原创 Linux 系统重启 reboot与重置reset深度解析
在 Linux 系统管理中,reboot(重启)与reset(重置)是极易混淆的核心操作。本文从命令行工具、内核机制与硬件交互等维度,深度解析两者本质差异:reboot通过软件指令实现系统级循环启动,分软重启(sudo reboot)与硬重启(reboot -f),遵循优雅关闭流程保护数据;reset则涵盖硬件级重置(物理按钮 / IPMI 指令)、系统配置重置(如容器初始化)与终端重置(reset命令修复显示异常),直接清除硬件状态。
2025-07-01 10:24:09
1719
原创 Linux 中的孤儿进程与僵尸进程
在 Linux 进程管理中,孤儿进程与僵尸进程是初学者必须掌握的重要概念。孤儿进程由父进程提前退出产生,会被 init 进程收养并回收资源,本身无危害;而僵尸进程因父进程未调用 wait/waitpid 回收子进程状态,会占用 PID 资源,大量积累易导致系统无法创建新进程。通过代码测试可直观看到,孤儿进程的父进程 ID 会变为 1,僵尸进程状态显示为 Z。解决僵尸进程可采用信号处理机制(捕获 SIGCHLD 信号后调用 waitpid)或两次 fork 技巧,将子进程转为孤儿由 init 处理。理解两者原
2025-06-28 00:45:00
4134
原创 Linux 挂载从入门到精通:mount 命令详解与实战指南
在 Linux 系统中,挂载是连接存储设备与目录树的核心操作,掌握mount命令是高效管理存储资源的关键。本文面向初学者,系统讲解挂载原理与实战技巧,涵盖基础操作到进阶配置。挂载本质:通过挂载点将硬盘、U 盘、ISO 镜像、网络共享等设备接入系统目录,实现统一访问。详细演示mount命令语法,包括-t指定文件系统类型(如 ext4/NTFS/NFS)、-o配置权限(ro/rw)与性能选项(noatime),并结合本地设备、网络共享等场景的分步操作,展示创建挂载点、验证状态及权限处理方法。
2025-06-27 14:06:28
4246
原创 Linux 进程创建探秘:为什么 strace 看不到 fork 调用?
在学习 Linux 系统编程时,用 strace 跟踪调用 fork () 的程序时,输出中往往看不到 fork 系统调用,反而出现 clone (),这让初学者困惑。本文从 Unix 进程模型出发,揭示 fork 与 execve 的组合机制:fork 创建进程副本,execve 替换为新程序。关键在于 Linux 中 glibc 的 fork () 本质是 clone () 的包装器,通过特定标志模拟传统 fork 行为。通过 strace 与 ltrace 对比,解析系统调用与库函数的区别,阐述 cl
2025-06-26 17:30:29
1172
原创 一文搞懂指针和指针变量(适合初学者的保姆级教程)
指针是 C 语言的核心机制,也是初学者的关键难点。本文以保姆级教程形式,从内存地址本质出发,逐步拆解指针与指针变量的核心知识:从定义初始化、取地址与解引用等基础操作,到指针与数组的深度绑定、动态内存分配(malloc/realloc/free);详解野指针、内存泄漏等常见错误及解决方案,结合交换函数、动态数组等实战案例演示指针的应用场景。通过步骤化教学和代码示例,帮助读者理解指针运算逻辑、多级指针原理,建立正确的内存管理思维,是 C 语言指针入门的系统化学习指南。
2025-06-24 00:00:00
1396
原创 Linux 中那些有趣又实用的命令:摸鱼
Linux 命令行并非只有枯燥操作,本文盘点了多个趣味与实用兼具的命令。sl命令会在终端播放火车驶过的动画,治愈手滑误输ls的小尴尬;fortune能随机输出名言或笑话,搭配cowsay可让奶牛、东方龙、Linux 企鹅等萌宠 “开口说话”,ASCII 艺术字生成器figlet则能将文本转为醒目大字。此外,yes命令可自动填充输入、cmatrix模拟黑客帝国代码流效果。这些命令不仅为终端操作增添趣味,还能融入脚本实现可视化提示,适合新手通过轻松场景入门 Linux 命令行,感受系统交互的独特魅力。
2025-06-23 00:00:00
1867
原创 全面解析 typedef:从入门到进阶的详细指南
本文全面解析 C/C++ 中typedef的核心知识,从入门到进阶逐步讲解。开篇阐述typedef为数据类型定义别名的本质,通过基本类型、指针、数组、结构体、枚举等场景的具体示例,展示其简化复杂声明、提升代码可读性的作用。深入分析函数指针与typedef的结合应用,揭秘回调函数、状态机等设计模式的实现技巧。针对初学者常见误区,对比typedef与#define的差异,详解结构体自引用、跨平台兼容性等易错点。最后结合工厂模式、策略模式等实战案例,分享typedef在内存优化、接口封装中的最佳实践,帮助开发者掌
2025-06-22 00:00:00
1335
原创 一文搞懂函数指针与指针函数
详解函数指针与指针函数,帮助新手系统掌握这两个 C 语言核心概念。先回顾指针与函数基础,再从定义、语法、应用场景对比两者差异:函数指针是指向函数的指针变量,常用于回调机制、状态机设计;指针函数是返回指针的函数,需注意动态内存管理避免悬垂指针。文中通过排序、计算器、状态机等实战案例分步教学,结合代码解释参数与逻辑,覆盖类型不匹配、内存泄漏等常见易错点,还拓展至插件系统、嵌入式中断处理等高级应用,最后提供 C++ 替代方案与性能优化建议,是新手从入门到进阶的全面指南。
2025-06-21 00:00:00
768
原创 一文搞懂指针数组与数组指针:从原理到实践
指针数组与数组指针是C语言中两个关键概念。指针数组是存储指针的数组,每个元素指向独立内存块,适用于动态字符串管理等场景;数组指针则指向整个数组,适合处理连续内存数据如矩阵运算。两者在声明语法、内存访问方式及动态分配策略上存在显著差异:指针数组需双重分配/释放内存,而数组指针可单次完成。实际应用中应根据数据特性选择,指针数组适合分散数据,数组指针优化连续访问。需注意常见错误如内存泄漏、野指针及数组越界,建议结合调试工具验证操作。
2025-06-20 00:15:00
755
原创 VS Code 插件生态:从效率杀手到生产力神器的蜕变之路
VS Code 的插件生态之所以强大,在于它不是简单的功能堆砌,而是提供了「定制化开发流水线」的可能。从智能补全到自动化调试,每一款插件都是对开发流程的深度解构。当编辑器能理解你的编码习惯、预测你的需求、自动完成繁琐操作时,开发者才能真正聚焦于问题本身。“不是工具选择开发者,而是开发者定义工具。” 你的效率提升之路,或许就差这几行插件配置。推荐插件列表(20+)分类插件名称核心功能代码补全TabnineAI 驱动的智能代码补全,支持多语言代码格式化强制统一代码风格并检查质量终端集成。
2025-06-20 00:00:00
1531
原创 一文搞懂大端模式与小端模式:从原理到实践
大端与小端模式是计算机存储多字节数据的两种规则:大端将高位字节存于低地址,小端则反之。本文从数据位权与内存地址本质出发,详解端序原理,通过联合体、指针转换等方法检测系统端序,结合htonl/ntohl等函数演示端序转换,并剖析其在网络编程(TCP/IP 协议)、文件格式(BMP/GIF)及跨平台开发中的应用。同时揭示端序导致的数据解析陷阱,提供嵌入式系统配置与性能优化方案,帮助开发者从底层理解并解决端序相关问题,掌握跨平台数据交互的核心技能。
2025-06-19 13:41:15
1842
原创 一文搞懂一级指针、二级指针、三级指针
指针是 C 语言的核心机制,本文从内存地址本质出发,系统拆解一级、二级、三级指针的核心知识。一级指针直接指向普通变量,用于函数传址、数组操作与动态内存管理;二级指针指向一级指针,适用于二维数组、字符串数组及链表头指针修改;三级指针指向二级指针,常用于三维数组、链表的链表等复杂数据结构。文中结合代码示例详解定义、解引用与典型场景,覆盖野指针、类型匹配等常见错误,帮助新手从基础到进阶掌握指针原理与安全实践。
2025-06-19 10:34:29
1626
原创 什么是 Linux kernel(内核)?架构解析与实战指南
本文详细介绍了Linux kernel内核的核心功能、架构设计、子系统实现及源代码结构。文章以Linux 3.10.29版本为基础,结合ARM架构特性,为嵌入式开发者提供了全面的学习指导。主要内容包括:内核的五大子系统(进程调度、内存管理、虚拟文件系统、网络子系统、进程间通信)的架构与实现;设备驱动开发流程、设备树应用、系统调用与内存管理机制;内核源代码目录结构解析,涵盖关键目录如include/、kernel/、mm/、fs/、net/等。
2025-05-18 00:15:00
2112
原创 面试官问我QT单例模式是什么?我的回答令他沉默,结果他把我的回答写成了这篇文章......
单例模式是确保类全局唯一实例的创建型设计模式,核心特性包括唯一实例、全局访问和私有构造函数,适用于资源优化、统一控制和跨模块共享场景。本文详解两种经典实现:懒汉式(按需创建,需通过双重检查锁定和互斥锁实现线程安全,适合高开销对象延迟初始化)与饿汉式(提前创建,依赖 C++ 静态初始化天然线程安全,适合轻量对象即时访问)。结合 Qt/C++ 实战,演示线程安全实现步骤,对比内存管理方案(如智能指针、Qt 对象树),并总结常见误区(构造函数未私有、忽略线程安全、内存泄漏)及避坑指南。
2025-05-12 11:19:55
1345
原创 嵌入式开发面试题全解析:指针、内存、数据类型关键问题总结
本文对嵌入式开发典型面试题进行深度解析,涵盖多方面关键知识。题目 19 揭示字符指针修改字符串常量的错误操作;题目 20 展现strcpy引发的缓冲区溢出风险;题目 21 体现未初始化数组与strlen结合的不可预测性;题目 22 通过位域与对齐规则计算结构体大小;题目 23 因unsigned char溢出导致循环异常。这些题目全面覆盖指针操作、内存管理、数据类型特性等核心内容,精准指出开发中易疏忽的陷阱,有助于理解编程规范,规避风险,提升代码质量与稳定性,是深入掌握嵌入式开发要点的实用指南。
2025-05-07 09:23:36
1224
原创 嵌入式开发面试题详解:STM32 与嵌入式开发核心知识全面解析
本文围绕 STM32 及嵌入式开发关键知识点展开,涵盖 STM32 基本时钟信号、GPIO 配置模式、DMA 功能及数据传输、启动过程,串行通信方式,I2C 总线信号类型,SPI 接口通信线数,CAN 总线概念,单片机低功耗模式及唤醒方式,HardFault_Handler 成因,以及 MIN 和 swap 宏定义等内容。系统梳理嵌入式开发基础,解析 STM32 特性与常见技术要点,为新手学习、面试备考及实际开发提供清晰知识框架,助力深入理解嵌入式系统原理与应用,掌握关键技术细节与实践要点。
2025-05-06 09:40:07
1785
原创 嵌入式开发面试题全解析:从基础语法到内存操作,手把手教你吃透核心考点
本文围绕嵌入式开发高频面试题展开,聚焦新手必备的核心知识与解题逻辑。通过「函数功能分析」「二维数组定义」「STM32 内存操作」「字符串匹配算法」四大典型题型,详细拆解指针操作、数组规则、字节序原理、内存读写等底层原理。每个题目均配备分步解析、代码示例、易错点提示及知识拓展,帮助读者掌握:① 二维数组列数不可省略等基础语法规则;② volatile关键字在内存操作中的关键作用;③ 小端字节序的存储与访问方式;④ 暴力匹配法实现strstr的双重循环逻辑。文中穿插 STM32 硬件特性与嵌入式场景应用。
2025-05-05 19:45:36
1451
原创 嵌入式开发高频面试题全解析:从基础编程到内存操作核心知识点实战
本文围绕嵌入式开发常见面试题,系统解析五大核心模块:数组操作、字符串处理、数据转换、代码规范及结构体位域与内存操作。通过「3x3 数组求和」「字符串去数字排序」「罗马数字转整数」等经典例题,详解数组遍历、字符判断、映射逻辑等基础编程技巧;结合代码规范章节,强调缩进、注释、命名等工程化要点,提升代码可读性。针对嵌入式特有的内存操作场景,通过结构体位域例题,深入分析位域存储规则、小端模式影响及内存布局,帮助新手掌握寄存器配置、协议解析等底层开发能力。每部分均配备分步解析与代码示例,兼顾知识点全面性与实战指导性
2025-05-01 00:00:00
1139
原创 pthread_join 与 pthread_detach 详解
在 POSIX 多线程编程中,pthread_join与pthread_detach是管理线程资源的核心函数。二者核心区别体现在阻塞性、资源回收方式及线程状态控制:pthread_join为阻塞函数,需主动等待目标线程终止并回收资源,支持获取线程返回值,适用于依赖子线程执行结果或需顺序同步的场景;pthread_detach为非阻塞函数,将线程设置为分离状态,使其结束时自动释放资源,无需手动回收,但无法获取返回值,适合后台任务、高并发场景以避免主线程阻塞。二者互斥,线程只能处于 “可结合” 或 “分离” 状
2025-04-30 00:00:00
2855
原创 超详细!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
9281
原创 嵌入式开发面试典型编程题解析:排序算法、指针操作、字符处理、递归原理等基础原理的深度解析。
在嵌入式开发面试中,编程题是检验基础能力与逻辑思维的关键环节。本文聚焦新手常见的 4 类典型编程题,通过分步解析、代码示例、知识点详解、易错点警示及拓展应用,帮助读者系统掌握核心考点。内容涵盖:交换法排序:通过双重循环实现成绩降序排列,解析循环逻辑与数组操作细节;指针应用:利用指针作为函数参数实现整数排序,深入理解地址传递与解引用机制;字符类型判断:修正条件判断错误,掌握 ASCII 码范围、逻辑运算符及库函数的正确用法;递归求阶乘:拆解递归两大要素,对比递归与迭代实现,警惕栈溢出与整数溢出问题。
2025-04-28 09:31:56
1214
原创 STM32(M4)入门:定时器延时与系统滴答(价值 3w + 的嵌入式开发指南)
【STM32 系统滴答(SysTick)开发全解析:从延时实现到系统级应用】【STM32 定时器延时开发指南:从基础原理到 TIM7 实战应用】嵌入式开发中如何利用硬件定时器实现精准延时?本文深度解析 STM32 定时器体系,以基本定时器 TIM7 为例,手把手教您掌握延时控制核心技术!嵌入式开发中如何实现高精度延时与系统级时间管理?本文深度解析 Cortex-M 内核级定时器 SysTick,带您从原理到实战掌握 24 位计数器的核心应用!
2025-04-27 13:46:48
3616
原创 嵌入式 C 语言面试核心知识点全面解析:基础语法、运算符与实战技巧
本文系统梳理了嵌入式 C 语言面试的核心知识点,结合典型例题与实战场景,帮助读者快速掌握高频考点与应试技巧。内容涵盖:基础语法与运算符:变量作用域、类型转换、运算符优先级(如逻辑运算符短路特性、位运算优化)。控制结构:do-while循环的执行逻辑、continue语句的应用场景。预处理与内存管理:宏定义(#define)的陷阱与优化、静态内存分配的实战技巧。指针与高级特性:指针运算、内存对齐、结构体嵌套与位域操作。嵌入式系统级优化:volatile 关键字的硬件交互场景、编译器优化对代码的影响。
2025-04-26 00:00:00
1149
原创 嵌入式面试核心考点:从 C 语言基础到芯片资源深度剖析
本文围绕嵌入式面试高频题展开,全面剖析相关知识点。涵盖 C 语言基础语法,如变量类型内存占用、逻辑运算与条件编译,详细解释代码执行过程与潜在问题。还介绍标准库函数,包括输入输出、字符串处理、内存管理等常用函数的功能及用法。此外,对嵌入式芯片如 STM32F405RGT6 的性能指标、资源分布、技术优势和应用领域进行深入分析,帮助新手系统掌握嵌入式开发面试要点,提升应对能力与知识储备。
2025-04-25 00:50:49
982
原创 嵌入式面试高频考点深度解析:内存管理、指针操作与结构体实战指南
本文围绕嵌入式面试中最核心的内存管理、指针操作及结构体与联合体应用展开,系统解析四大高频题型(PC 系统结构体地址计算、指针数组操作、联合体与结构体大小计算),涵盖以下关键知识点:内存对齐机制、指针操作核心逻辑、联合体与结构体内存布局、高低地址与字节序。
2025-04-24 11:38:45
914
原创 嵌入式面试题:指针与内存管理
本文聚焦嵌入式面试核心难点,深度解析指针与内存管理(野指针、内存泄漏)、数据类型溢出、中断处理误区、寄存器操作规范等高频易错点,结合典型代码示例逐步拆解问题本质与解决思路。同时为新手规划清晰学习路径,从基础语法巩固、指针与内存专题突破,到调试技能培养及项目实战提升,全方位助力读者构建扎实知识体系,规避开发陷阱,从容应对面试挑战,实现从理论到实践的高效进阶。
2025-04-23 06:00:00
1059
原创 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
2150
原创 Linux 入门十一:Linux 网络编程
Linux 网络编程是实现跨主机进程通信的核心技术,基于 TCP/IP 四层模型(网络接口层、网络层、传输层、应用层),通过套接字(Socket)接口实现数据交互。核心要素包括:IP 地址(标识主机)、端口号(区分进程)、套接字(IP + 端口 + 协议)。
2025-04-22 00:00:00
1661
原创 Linux 入门十:Linux多线程
Linux 入门十:Linux多线程一、线程基础操作:创建与控制。二、线程同步机制:互斥锁(Mutex)条件变量信号量(Semaphore)三、线程属性与进阶分离属性:优先级调度
2025-04-21 00:30:00
839
原创 STM32(M4)入门:GPIO与位带操作(价值 3w + 的嵌入式开发指南)
STM32(M4)入门:GPIO与位带操作(价值 3w + 的嵌入式开发指南)
2025-04-20 16:29:05
3397
原创 嵌入式面试题解析:常见基础知识点详解
原码 / 反码 / 补码:计算机数字表示法,补码简化加减运算,负数用反码加 1 表示。大端 / 小端模式:字节存储顺序,大端高位低地址,小端低位低地址,影响跨平台数据交互。volatile:禁止编译器优化,确保变量值被实时读取(如外设寄存器、中断标志)。int/unsigned int:前者有符号(含符号位),后者无符号,范围分别为正负区间和非负区间。位操作:通过&(清零)、|(置位)、^(取反)精准操作二进制位,是寄存器配置核心技能。这些知识是嵌入式开发的底层基石,贯穿数据表示、存储、操作及硬件
2025-04-19 09:46:38
690
原创 嵌入式面试高频考点全解析:内存存储、数据结构与算法(附代码示例)
本文针对嵌入式开发面试中的七大核心考点(内存存储、队列 / 栈 / 数组 / 链表区别、死循环机制、冒泡排序),以步骤化教学和实战代码为核心,帮助新手快速掌握高频面试题的解题逻辑与拓展知识。
2025-04-17 09:20:42
995
原创 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
1037
原创 嵌入式面试题:内存管理与指针安全类
嵌入式面试题:涉及知识点解释:数组名与指针运算: 在 C 语言中,数组名 代表数组首元素的地址(即 )。 是指针算术运算,由于 是 类型数组,每个元素占 字节(通常为 4 字节),因此 指向 的地址。 解引用该地址,获取 的值,结果为 。数组地址与指针操作: 表示取整个数组的地址,其类型为 (指向包含 5 个 元素的数组的指针)。 会跳过整个数组 的内存空间(偏移量为 )。将 强制转换为 并赋值给 后, 指向数组最后一个
2025-04-16 09:23:23
638
原创 C 语言内存分配详解:C语言入门必备
全局(静态)区是 C 语言中存储长期数据的核心区域,合理使用全局变量和静态变量可简化代码逻辑,但需注意作用域限制和初始化问题。结合extern和static关键字,能有效管理跨文件数据共享与封装。通过以上内容,读者可全面掌握全局(静态)区的原理、用法及注意事项,为后续学习 C 语言内存管理打下坚实基础。// 全局常量(存于 .rodata 段)return 0;常量区是 C 语言中存储只读数据的核心区域,合理使用字符串常量和const变量可提高代码安全性和效率。禁止修改常量区数据,避免运行时错误。
2025-04-15 10:25:47
1727
原创 嵌入式面试题:C 语言基础重点总结
知识点extern关键字的作用、变量声明与定义的区别、跨文件引用全局变量的流程。详细解答extern关键字用于声明一个全局变量,它的作用是告知编译器该变量已在其他地方定义,此时编译器不会为其分配内存空间。而变量的定义则是为变量分配内存并赋予初始值的过程。步骤与例子新建data.c,定义全局变量:// data.c// 定义全局变量,为其分配内存并初始化为 50新建main.c,通过extern声明后使用:// main.c// 声明 global_var,告知编译器它在其他文件中定义。
2025-04-15 09:51:18
581
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅