
我的博客
文章平均质量分 66
小米人儿
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C语言字符串格式对齐方法
格式说明符含义灵活性适用场景%10s固定10字符宽度,右对齐低宽度已知且不变时%-10s固定10字符宽度,左对齐低宽度已知且不变时%.5s最多只显示5个字符低需要截断长字符串时%*s宽度由参数width指定高运行时才能确定宽度%-*s左对齐,宽度由参数指定高运行时确定宽度且需左对齐%*.*s宽度和精度(最大字符数)都由参数指定最高需要完全动态控制格式时核心要点%.Ns控制输出内容(截断)。%*s及其变体控制输出格式。原创 2025-08-20 10:02:19 · 431 阅读 · 0 评论 -
GitHub Actions YAML命令使用指南
这段代码是(通常放在中),它的作用是。原创 2025-08-18 10:30:54 · 360 阅读 · 0 评论 -
RTOS YAFFS
它指的就是YAFFS Summary 的创建过程(通常在umount或sync时触发)。加速后续的挂载 (mount) 过程,避免耗时漫长的全 Flash 扫描。需要正常卸载umount) 文件系统,Summary 才会被正确写入。异常掉电会导致上次的 Summary 失效或不完整,挂载时会回退到慢速全扫描模式。启用 Summary 是解决 YAFFS 挂载慢问题的最有效手段(配置选项通常是或类似宏)。可能指某些特定实现中用于增强崩溃恢复的更频繁的状态保存点,但这非常规。原创 2025-08-13 19:53:41 · 887 阅读 · 0 评论 -
Linux系统中mount指令的作用与必要性
在 Linux 系统中,mount指令的作用是,这样用户和应用程序就可以通过统一的路径访问该存储设备中的内容。原创 2025-08-12 20:45:43 · 502 阅读 · 0 评论 -
MTD和FTL的关系
在嵌入式存储系统里,(Memory Technology Device)和(Flash Translation Layer)是上下两层、互相配合的概念。你可以把它想成**“原始硬件接口”“硬盘驱动”**的关系。原创 2025-08-12 18:13:50 · 390 阅读 · 0 评论 -
GDB中线程命令及浮点数使用说明
在调试多进程程序时,表示进程1的线程27。浮点数无效thread后只能跟整数或点分整数对(PID.TID),不可用浮点数。GDB的点分格式是逻辑标识符,非数值计算。在GDB(GNU调试器)中,thread命令用于切换或查看当前调试的线程。多线程程序中有多个线程同时运行,而GDB允许你选择一个特定的线程进行调试操作(例如查看堆栈、变量等)。thread或t命令后面可以跟一个线程ID(通常是一个整数),用于切换到指定的线程。thread 2会切换到ID为2的线程。关于你提到的。原创 2025-08-11 16:10:22 · 737 阅读 · 0 评论 -
Linux alias与func的区别及使用场景
别名是。原创 2025-08-11 11:58:41 · 586 阅读 · 0 评论 -
GDB调试中x命令用法详解
x命令是GDB中非常强大的内存检查工具,通过组合数量、格式和大小,可以灵地查看内存内容。熟练掌握x命令对于调试程序尤其是底层程序(如操作系统、嵌入式系统)非常有帮助。原创 2025-08-11 11:18:56 · 1106 阅读 · 0 评论 -
GDB中thread apply all命令使用指南
命令示例作用打印所有线程的堆栈打印所有线程中变量x的值显示所有线程的局部变量安静模式(减少冗余输出)通过,你可以高效分析多线程程序的全局状态,大幅提升调试效率!在GDB(GNU调试器)中,命令用于将一个命令应用到所有线程上。这个命令非常有用,尤其是当你需要同时查看所有线程的状态(如堆栈跟踪)或者对所有线程执行某个操作时。是一个强大的命令,可以帮助你同时管理或查看多个线程的状态。在调试多线程程序时,这个命令能极大地提高效率。好的,我们来详细解释一下命令在 GDB 中输出的信息。原创 2025-08-08 22:14:32 · 586 阅读 · 0 评论 -
操作系统开发中的setup与teardown详解
目的:保证资源成对分配与释放,避免泄漏和状态污染。对应关系:setup 是“初始化”,teardown 是“清理”。场景:测试框架、驱动加载卸载、模块生命周期管理、子系统启动停止。好处提高代码可维护性和可读性防止内存泄漏或硬件资源未释放让测试或运行环境可重复、可预测如果你愿意,我可以帮你画一张setup/teardown 在 OS 模块生命周期中的流程图,这样更直观地看到它们的作用。这样你在做驱动、内核测试或模块初始化时会一眼明白它们在生命周期中处的位置。原创 2025-08-08 14:31:21 · 840 阅读 · 0 评论 -
pwd与pwd -P命令区别解析
命令路径类型是否解析符号链接使用场景pwd逻辑路径❌ 不解析查看进入目录时的原始路径pwd -P物理路径✅ 解析获取文件/目录的真实磁盘位置。原创 2025-08-07 16:37:09 · 353 阅读 · 0 评论 -
嵌入式开发中强弱符号详解
特性强符号 (Strong Symbol)弱符号 (Weak Symbol)定义有初始化值的全局变量;有函数体的函数未初始化的全局变量;显式声明的弱函数/变量;函数声明唯一性要求必须唯一,链接时出现多个同名强符号则报错可以重复,允许多个同名弱符号存在优先级高:存在同名强符号时,优先使用强符号低:只有没有同名强符号时,弱符号才会被使用链接器行为强制唯一可被强符号覆盖;多个弱符号时链接器任选其一典型场景明确的唯一实现提供默认/可覆盖的实现;库中的可替换函数;暂定定义默认强符号。原创 2025-08-06 11:58:11 · 931 阅读 · 0 评论 -
GCC预处理选项使用指南
在使用 GCC 编译代码时,可以通过 -E来单独执行。该选项会让 GCC 在完成预处理后停止,不进行编译、汇编和链接步骤。原创 2025-08-06 09:16:40 · 714 阅读 · 0 评论 -
嵌入式#define __assert __assert写法解析
我已经定义了__assert,你不要再给我重新定义它。后续如果某个头文件试图再次定义编译器会报重复定义 warning 或 error,从而阻止宏污染。这招本质上是预处理器层的“符号占位保护”。问题用的好处避免头文件宏污染保证调用的是你定义的函数而不是错误的宏避免冲突定义如果后面再定义,会触发编译器警告保持链接符号清晰确保__assert是函数符号,便于链接与覆盖强符号 / 弱符号机制保留函数定义供链接器识别(如 weak 函数)原创 2025-08-05 15:19:25 · 286 阅读 · 0 评论 -
ANSI及其转义序列
ANSI转义序列是用于控制文本终端显示的特殊字符序列,起源于1970年代的终端控制标准。它们以ESC[开头(ESC是ASCII码27的字符),后接参数和指令字母。\033。原创 2025-07-25 12:26:03 · 618 阅读 · 0 评论 -
CMake生成器表达式用法解析
在CMake中,使用了,这是一种在CMake生成构建系统(如Makefile或Ninja文件)时动态求值的特殊语法。原创 2025-07-23 10:14:49 · 1032 阅读 · 0 评论 -
C语言符号可见性控制与工程实践——深入理解 __attribute__((visibility)) 和 -fvisibility=hidden
在共享库(原创 2025-07-22 23:06:54 · 1036 阅读 · 0 评论 -
Linux僵尸进程问题及解决方法
僵尸进程(Zombie Process 或 Defunct Process)是指一个已经执行完毕(终止)的子进程,但其在进程表中的退出状态信息(Exit Status)还没有被其父进程读取(通过wait()系统调用)。此时,内核会保留该进程的进程表项(PID、退出状态、资源使用情况统计等基本信息),直到父进程读取这些信息。进程本身已经停止运行,不消耗 CPU 和内存资源(除了保留进程表项的那一点点内核空间)。进程表(Process Table)中仍然保留着它的条目(Entry),状态通常标记为Z(或。原创 2025-07-21 00:07:19 · 1174 阅读 · 0 评论 -
pthread_detach与pthread_join区别及使用场景
场景示例示例线程类型计算密集型任务后台任务/日志记录是否需要结果需要获取计算结果不关心日志是否成功主线程行为阻塞等待工作线程完成立即继续执行资源回收显式调用 join 回收系统自动回收内存管理主线程负责释放工作线程的内存工作线程必须自己清理所有资源适用场景需要结果汇总的并行计算非关键的后台操作执行顺序主线程等待 → 工作线程完成主线程和工作线程并发执行是否可能阻塞主线程是否。原创 2025-07-21 00:06:46 · 1234 阅读 · 0 评论 -
chown命令与权限继承解析
场景新建文件/目录的所有者新建文件/目录的所属组未设置setgid创建者(如mi创建者的默认组(通常mi设置setgid后创建者(如mi强制继承父目录组(mi建议sudo chown -R mi:mi /home/mi/ssd # 修改现有内容sudo chmod g+s /home/mi/ssd # 确保未来新建内容继承组。原创 2025-07-19 10:16:37 · 171 阅读 · 0 评论 -
嵌入式开发中-fno-builtin选项解析
保障代码行为符合预期,尤其在自定义库、严格硬件约束或深度调试场景下必不可少。,编译器可能忽略你的实现,直接生成优化的内存复制指令(如 ARM 的。是嵌入式开发中的关键编译选项,它。假设在裸机嵌入式代码中自定义了。),导致自定义逻辑失效。在嵌入式软件开发中,原创 2025-07-18 12:37:00 · 324 阅读 · 0 评论 -
Vim复制粘贴位置控制方法
场景推荐命令操作步骤单行快速交换ddpddkP3 键完成多行下移可视模式 +:m '>+1选择后执行命令安装插件后的日常使用[e]e单键交换(需 vim-unimpaired)精确位置交换:m 行号配合行号使用💡专业提示在~/.vimrc添加映射加速操作:" 交换当前行与下一行" 交换当前行与上一行交换后保持光标位置:nnoremap <silent> <leader>d :m .+1<CR>==在 Vim 中处理多行和多列操作非常高效。操作类型选择命令复制命令粘贴命令效果。原创 2025-07-17 12:03:22 · 905 阅读 · 0 评论 -
Vim多列打开不同文件操作指南
在 Vim 中使用Ctrl-w v。原创 2025-07-17 11:50:38 · 535 阅读 · 0 评论 -
C语言宏定义判断方法
在C语言中,要同时判断两个宏是否定义,可以使用预处理指令结合逻辑运算符&&。原创 2025-07-16 10:40:21 · 255 阅读 · 0 评论 -
GCC属性修饰符__attribute__((unused))用途
场景解决方案抑制未使用变量/参数的警告使用跨编译器兼容结合宏和(void)强转保持代码零警告(尤其严格项目)必须处理未使用警告,此属性是重要工具建议:在需要显式表达“有意不使用”的意图时,优先使用此属性,使代码更清晰且避免警告干扰。原创 2025-07-15 22:18:12 · 1142 阅读 · 0 评论 -
Vim多列操作指南
熟练掌握这些操作可显著提升多文件编辑效率!原创 2025-07-15 11:52:09 · 471 阅读 · 0 评论 -
apt-get升级逻辑及解决方法
有可用的更新版本,就只升级它,不要升级其他任何包。命令的正常设计逻辑。这一个包(当它确实有更新时),并且。已经是最新版,它会告诉你无需操作。看到你的问题了,这个行为是。升级其他任何包,你需要使用。原创 2025-07-10 16:01:18 · 267 阅读 · 0 评论 -
Makefile中info函数使用解析
在 Makefile 中,是,不是终端命令。它用于在 Make 执行过程中输出信息到终端。类似的内置函数还有和。原创 2025-07-09 14:32:11 · 368 阅读 · 0 评论 -
C++标准库libstdc++与libc++区别
你说得完全正确!libstdc++libc++libc++libstdc++libc++.solibc++.alibstdc++libc++libstdc++libc++libstdc++libc++libcxxlibc++libcxx下次再看到这两个名字,记住std在中间的是 GNU (libstdc++),只有一个c加两个的是 LLVM (libc++) 就不会弄混了!这是一个非常好的问题!libstdc++(GNU)和libc++(LLVM)都是高质量的实现,但它们的。原创 2025-07-09 09:45:19 · 698 阅读 · 0 评论 -
fd搜索当前目录下特定静态库文件
在 Ubuntu 22.04 环境下,命令使用fd-find工具(通常通过fd命令调用)执行文件搜索。原创 2025-07-08 19:26:21 · 634 阅读 · 0 评论 -
eSIM中0x9000状态字解析
在 eSIM 的上下文中,0x9000就是“操作成功” 的标准响应。当你看到这个值返回时,意味着你(或你使用的系统/手机)向 eSIM 芯片发送的上一条命令已经被芯片正确无误地执行完毕。原创 2025-07-08 17:26:01 · 379 阅读 · 0 评论 -
eval命令用法及风险详解
是一个在多种编程语言和脚本环境(如 Shell 脚本、Python、JavaScript、Perl、PHP 等)中都存在的命令或函数。是一个强大的工具,允许你动态执行字符串形式的代码。清晰地对比“动态执行字符串代码”和“非动态执行代码”确实能帮助你更深刻地理解。Shell 只是把这些字符串数据塞进命令的参数位置。务必优先寻找更安全、更清晰的替代方案(如数组、函数、关联数组、,必须对输入进行极其严格的过滤和验证,并充分意识到其潜在危险。所代表的“动态执行字符串代码”的特殊性和风险!的本质和它要解决的问题。原创 2025-07-06 22:58:44 · 989 阅读 · 0 评论 -
嵌入式开发:主频与晶振详解
所以,PLL 的神奇之处在于:它利用一个稳定的低频参考(晶振),通过闭环反馈控制一个不稳定的高频振荡器(VCO),最终产生一个既高频又稳定的时钟信号,其精度和稳定性归根结底还是来源于那颗小小的晶振。理解了这个闭环反馈控制的思想,就抓住了 PLL 倍频的核心。PLL(锁相环)实现倍频的原理确实很精妙,它并没有“无中生有”地创造频率,而是利用闭环反馈控制和一个。刚开始接触可能会觉得有点抽象,多看手册里的时钟树图,多动手用配置工具尝试修改设置并观察效果,很快就能掌握。上,从而保证输出频率的稳定性和精度。原创 2025-07-01 15:22:28 · 995 阅读 · 0 评论 -
NAND Flash BCH和FTL
BCH和FTL是NAND Flash管理中的两个关键概念,但它们解决的问题完全不同。✅fill:#333;color:#333;color:#333;fill:none;FTL 映射表动态重映射逻辑扇区 LBA 0x1000物理页 PPN 0x3A42逻辑扇区 LBA 0x1001物理页 PPN 0x8B11✅。原创 2025-06-29 23:13:53 · 952 阅读 · 0 评论 -
嵌入式MTD设备与Flash管理解析
是块 Flash 空间,能读能写(要擦除)就够了,不用管它是 NOR 还是 NAND,是 Winbond 还是 Micron。理解MTD是嵌入式系统中处理Flash存储的关键一步!好的,咱们用大白话和例子来说清楚 MTD 是啥,以及它为啥重要。这里通常挂载 JFFS2 文件系统。它是嵌入式存储管理的核心枢纽。你可以把 MTD 理解为。原创 2025-06-29 22:40:14 · 550 阅读 · 0 评论 -
嵌入式开发中.su文件的作用
int确实是 4 字节,但栈使用不仅由局部变量决定。GCC 的栈计算包含额外开销返回地址、帧指针、寄存器保存、对齐填充。在 x86-64 中,栈帧默认按 16 字节对齐。优化级别的影响如果启用优化(如-O2),GCC 可能会减少栈使用(例如省略帧指针)。.su文件中的栈大小是编译器根据 ABI 规则、对齐要求和调试需求综合计算的结果。实际栈使用 = 局部变量 + 编译器额外开销(对齐、寄存器保存等)。x86-64 的 16 字节对齐和调试信息可能会导致栈大小远大于局部变量的理论值。原创 2025-06-27 16:46:44 · 455 阅读 · 0 评论 -
USB枚举过程详解
就像新员工入职第一天需要登记信息、领取工牌、配置电脑一样,USB设备也需要向主机“自我介绍”,告诉主机它是什么、能做什么、需要什么资源,主机才能正确使用它。简单说,USB枚举就是USB世界的“设备自我介绍和注册上岗”流程,是USB设备能被主机识别和使用的必经之路。理解这个过程对于开发和调试USB设备至关重要。USB枚举(Enumeration)是USB设备插入主机时,主机和设备之间自动进行的。原创 2025-06-26 20:52:34 · 1028 阅读 · 0 评论 -
Linux size命令详解
size命令在 Linux 中是的一个实用工具。它从文件(通常是 ELF 格式)的头部信息中提取关键内存区域的大小信息,并以简洁的方式呈现出来。textdatabssbssbss运行sizelslslsdec-A使用 System V 风格的更详细的输出格式。它会列出的段(Section),而不仅仅是textdatabss。原创 2025-06-25 21:22:00 · 1775 阅读 · 0 评论 -
xargs将标准输入(stdin)的数据转换为命令行参数
I何时用xargs:当需要将管道数据转换为命令行参数时(尤其是文件批量操作)。核心价值:解决「命令不支持从 stdin 读取参数」的痛点,实现高效批处理。典型场景:文件批量删除/复制/移动、结合find处理搜索结果、并行任务加速。原创 2025-06-25 17:30:44 · 502 阅读 · 0 评论 -
正则表达式*用法详解
符号含义必须前置元素示例量词(零次或多次)是a*.*匹配任意长度字符串是.*\*字面字符否\*是一个修饰符,需要“修饰”它前面的元素。直接使用会导致语法错误。原创 2025-06-25 17:29:08 · 511 阅读 · 0 评论