- 博客(11)
- 收藏
- 关注
原创 Linux 环境下静态链接库 (.a) & 动态链接库 (.so) 完整实例(含嵌入式适配)
静态库 (.a)gcc -c 生成.o→ar rcs 打包为.a→gcc 编译测试程序 -I/-L/-l;特性:无外部依赖、体积大、更新需重编译,嵌入式首选;动态库 (.so)gcc -c -fPIC 生成.o→gcc -shared 生成.so→gcc 编译测试程序 -I/-L/-l -Wl,-rpath;特性:依赖外部库、体积小、支持热更新,PC/Linux 服务器首选;嵌入式适配只需替换为 ARM 编译器,并添加架构参数(-mcpu-mthumb。
2026-01-23 20:54:21
659
原创 C 语言 静态链接库 (.a/.lib) & 动态链接库 (.so/.dll) 制作与使用(嵌入式 / PC 端全流程,附代码 + 命令)
静态库:编译时嵌入可执行文件,独立运行、体积大、更新需重编译,嵌入式首选;动态库:运行时加载,体积小、更新方便、多进程共享,PC 端高频更新模块首选;编译.o文件→打包/链接为库→指定头文件/库路径调用;命名规范:Linux / 嵌入式,Windows。掌握库的制作和使用,是从 “零散代码” 到 “工程化开发” 的关键,比如你可以把 PID、滤波、通信协议等通用逻辑封装成静态库,在多个 STM32 项目中复用,既提高效率,又保护核心代码!
2026-01-23 14:54:52
793
原创 C 语言 带参函数、带参宏、inline 内联函数 核心区别(嵌入式开发必懂,效率 + 场景 + 坑点全解析)
用函数名(参数列表)定义,调用时传递实参,编译器为函数生成独立的指令块,调用时会发生 “栈帧创建、参数拷贝、指令跳转、返回值传递” 等操作。// 带参函数:ADC滤波(基础类型传参)// 一阶低通滤波// 调用用#define 宏名(参数) 替换文本定义,预处理阶段直接把 “宏调用处” 替换成宏体的文本,没有函数调用过程。// 带参宏:ADC滤波(注意:宏体必须用括号包裹,避免运算符优先级坑)last;})// 调用(预处理后,宏体代码直接替换到这里)({})
2026-01-21 22:22:43
1111
原创 彻底吃透 C 语言 offsetof 和 container_of 宏(内核 / 嵌入式高频)
offsetof是 C 标准库<stddef.h>中提供的一个宏,作用:计算一个结构体的成员变量,相对于结构体首地址的字节偏移量。参数说明:type:结构体的类型名(比如member:该结构体中的成员变量名(比如中的age返回值:无符号整数(实际是size_t类型),表示该成员相对于结构体首地址的字节偏移量。是Linux 内核源码中定义的核心宏(没有纳入 C 标准库,但所有嵌入式 / C 开发都会用到),它是offsetof的逆运算,也是 C 语言的黑科技之一。✅核心作用(划重点,背下来)
2026-01-19 12:54:04
1025
原创 C 语言 枚举 (enum) 完整定义与使用(超详细,零基础易懂)
枚举(enum,全称)是C 语言的一种自定义数据类型用一组「有意义的名字」来替代「整型数字」,本质是给整型常量起别名。✅ 核心本质(重中之重):C 语言的枚举,所有枚举成员本质都是int类型的常量,枚举的本质就是「整型常量的集合」,这是和 Java 枚举最大的区别(Java 枚举是类)。用见名知意的单词替代无意义的数字(比如用SPRING替代0,用MALE替代1),让代码可读性暴增;约束变量的取值范围,让代码逻辑更清晰;相比宏定义#define有更强的类型关联性。
2026-01-17 22:10:22
1000
原创 C 语言 「值传参」「指针传参」「结构体传参」 三者核心区别(嵌入式开发必懂,含传参本质 + 效率 + 场景 + 坑点)
✔ 定义函数形参为基础数据类型(int/char/short/float/uint8_t/uint16_t等),调用时传入变量本身。// 形参是基础类型x,实参传变量a// 调用int a = 5;func(a);✔ 核心原理调用函数时,把「实参变量的数值」拷贝一份 给形参,形参和实参是 内存中两块完全独立的地址。✔ 核心特点✅ 优点:语法最简单、内存开销极小(最多 4 字节)、绝对安全,函数内修改形参,完全不会影响主调函数的实参原值;
2026-01-17 18:00:03
1419
原创 关于大小端模式的彻底讲解
计算机内存的存储规则是「按字节为最小存储单位」的,内存地址是从低到高线性排列的(比如 0x100 → 0x101 → 0x102 → 0x103)。而我们程序中使用的多字节数据(short2 字节、int4 字节、long long8 字节),在存入内存时,字节的存放顺序有两种完全相反的规则,这两种规则就是:✅大端模式 (Big-Endian)✅小端模式 (Little-Endian)定义数据的高位字节,存放在内存的低地址处;数据的低位字节,存放在内存的高地址处。高字节在前,低字节在后。
2026-01-15 11:41:43
1041
原创 内存完整分区详解(栈 / 堆 / 全局 / 常量 / 代码区,最全版)
你想了解内存中栈、堆之外的完整内存分区,这个问题特别关键 —— 编程中 90% 的内存溢出、野指针、内存泄漏问题,本质都是没搞懂内存分区的规则,不管是 C/C++/Java/Go 这类编译型语言,还是 Python/JS 这类解释型语言,底层的内存分区逻辑完全一致,这篇内容一次性讲透所有细节。程序运行时的内存是严格分区的,核心 5 区:栈区、堆区、全局 / 静态区、常量区、代码区,按地址从高到低排列;✅ 存放内容:局部变量(方法 / 函数内定义的变量)、函数的形参、函数调用时的返回地址、方法的栈帧数据。
2026-01-15 11:39:21
526
原创 Linux 下常用的进程间通信技术有哪些?
摘要:进程间通信(IPC)是独立进程间实现数据交换和资源共享的技术手段。Linux下常用IPC技术分为7类:1)无名管道(父子进程通信);2)有名管道(任意进程通信)★;3)信号(轻量级通知)★★★;4)消息队列(异步通信)★★★★;5)共享内存(高速数据传输)★★★;6)信号量(进程同步);7)套接字(通用通信)★★★★。嵌入式开发中,有名管道、信号和消息队列最为常用,其中信号机制可实现线程优雅退出,套接字则支持跨网络通信。
2026-01-13 23:57:06
409
原创 嵌入式STM32面试常见问题
GPIO、串口、定时器、DMA这四个外设是重中之重,必须吃透所有考点,这是面试的及格线;这三个外设是项目核心,掌握后能区分你和应届生的差距;中断优先级、外设初始化流程、DMA 的搭配应用,这三个点是面试官的加分项,答好就能拿高薪;避坑关键:所有外设的时钟使能是最容易忘记的点,面试中如果被问到外设无响应,第一时间说「是否开启时钟」,绝对加分。以上内容覆盖了 STM32 面试中95% 的外设相关考点,全部是面试官的原题,背熟 + 理解后,应对所有 STM32 面试都足够了!祝你面试顺利!🎉。
2026-01-10 17:43:26
1145
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅