精品专栏
文章平均质量分 78
精品专栏
余额抵扣
助学金抵扣
还需支付
¥99.90
¥299.90
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
琅琊心不在焉的榴莲
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
嵌入式预处理链接脚本lds和map文件
但通过预处理器的特性(如宏定义、条件编译、文件包含等)使得链接脚本更加灵活和可配置。原创 2025-05-25 22:44:49 · 751 阅读 · 0 评论
-
LTO优化详解
LTO 是嵌入式开发中优化代码体积和性能的有效手段,尤其适合资源受限的场景。但需权衡编译时间(LTO 会增加链接时间)和潜在的调试复杂性(优化后代码可能与源码差异较大)。通常建议结合-Os和 LTO 以达到最佳 Size 优化效果。如果我想优化bin文件的size,我需要打开lto吗?好的,用户之前已经询问过LTO优化在嵌入式开发中的作用,现在他问是否需要开启LTO来优化bin文件的体积。我需要先回顾之前的对话,确保回答一致。用户可能是在实际项目中遇到了体积过大的问题,想知道LTO是否有效。原创 2025-02-22 22:06:11 · 1670 阅读 · 0 评论
-
看见编译器插装:从 ASan 汇编、GIMPLE 到实战报错
插装”(instrumentation)这个词在不同上下文里含义不同。在 Sanitizer 世界里,它特指:编译器在生成目标代码时,在每条内存访问 / 运算 / 函数调用等处自动插入额外代码,用来在运行时做检查。Sanitizer开关主要检查对象heap/stack/global 越界、use-after-free、double-free整数溢出、除 0、空指针解引用、非法 shift数据竞争未初始化内存读内存泄漏源码不变和运行时才报错。原创 2026-05-02 23:13:05 · 73 阅读 · 0 评论 -
Claude Code 核心概念终极指南:Agents、Commands、Skills 全面解析
Agents、Commands、Skills 构成了 Claude Code 强大的可扩展体系。Agents 是执行者,Commands 是快捷键,Skills 是工具箱——理解它们的分工,就能像搭积木一样灵活构建自己的自动化工作流。原创 2026-03-28 22:15:41 · 151 阅读 · 0 评论 -
C/C++ Weak Symbol
/ 声明一个weak函数// 测试函数,调用weak函数有强符号时:链接器会优先使用强符号b.cpp中定义的强函数被调用无强符号时:链接器会使用 weak 符号a.c中定义的 weak 函数被调用(名称修饰)是 C++ 编译器为了支持函数重载等特性而对函数名进行编码的技术。简单来说,编译器会将人类可读的函数名转换成机器可识别的唯一标识符,这个标识符包含了函数的签名信息。特性CC++❌ 否✅ 是符号名称原始名称编码后的名称函数重载❌ 不支持✅ 支持命名空间。原创 2026-02-28 15:52:21 · 72 阅读 · 0 评论 -
ASAN_OPTIONS和UBSAN_OPTIONS支持的运行时flag
想快速查阅:运行得到当前实际支持的 flag。想理解每个 flag 的用途:阅读 LLVM 官方文档(链接如上)。想看源码定义:浏览 compiler-rt 仓库中的对应.inc文件。原创 2026-02-24 15:20:00 · 63 阅读 · 0 评论 -
Undefined Behavior Sanitizer之UBSAN_OPTIONS
这一点与 ASAN 不同,ASAN 检测到错误后默认会终止程序。通过。原创 2026-02-24 15:13:16 · 57 阅读 · 0 评论 -
AddressSanitizer之ASAN_OPTIONS
是一个环境变量,用于在配置 AddressSanitizer (ASan) 的行为。它允许你调整 ASan 的各种参数,从而影响内存错误的检测方式、报告格式、性能开销等。下面我会详细解释它的用法、常见选项以及注意事项。原创 2026-02-24 15:00:49 · 104 阅读 · 0 评论 -
深入理解 AddressSanitizer 的 Redzone 和 Shadow Memory
问题答案Redzone 大小由谁控制?运行时(非编译器),通过配置配置方式左右 redzone 可独立配置吗?否,两者共享同一配置为什么左侧是 8 个 fa?8 个 fa = 64 字节(因为 1 shadow byte = 8 字节)为什么是 64 字节而不是 16?ASan 自适应策略:分配越大,redzone 越大(malloc(100) → 64 字节)Shadow memory 的作用跟踪每个 8 字节内存单元的可访问性。原创 2026-02-23 23:37:09 · 77 阅读 · 0 评论 -
OpenCode 配置默认模型指南
全局配置:修改中的model字段插件覆盖:如果使用 oh-my-opencode,需要同时修改中的 agents 和 categories 配置模型选择是一个性价比很高的选择希望这篇文章能帮助到你!如果有任何问题,欢迎留言交流。原创 2026-02-17 22:47:16 · 4301 阅读 · 0 评论 -
Python执行的原理和过程
当你执行时,Python 并不是像 C 语言那样直接生成由 CPU 执行的二进制机器码,而是经历了一个“编译 + 解释”的过程。下面我简单梳理一下它的执行原理,以及与 C 语言编译的区别。原创 2026-02-16 00:13:44 · 198 阅读 · 0 评论 -
MISRA C 2012:安全关键系统的C语言编程“交通规则”
MISRA C 2012 不是束缚创造力的枷锁,而是安全关键领域的“安全带”。它代表的是一种工程纪律——在生命攸关的系统中,选择确定性而非灵活性,选择安全而非便利。无论你是否在安全关键领域工作,学习MISRA的思想都能让你的C代码更加健壮。毕竟,在编程的世界里,预防永远比调试更重要。关于作者:本文作者是嵌入式系统开发工程师,在实际项目中多次实施MISRA标准。有任何问题或经验分享,欢迎在评论区交流!标签#MISRA#C语言#嵌入式安全#编码规范#软件工程。原创 2026-02-02 21:27:29 · 471 阅读 · 0 评论 -
OpenCode Skills 使用指南
Skills 是可重用的 AI Agent 能力扩展,通过SKILL.md文件定义,包含 YAML frontmatter(名称和描述)和详细指令。生成发布说明(从 Git 历史)按团队约定创建 PR集成外部工具(Linear、Notion 等)应用特定框架的最佳实践。原创 2026-01-22 12:20:42 · 7889 阅读 · 0 评论 -
Asan结果解析
=251327==:进程ID:检测到堆缓冲区溢出:错误发生的内存地址:程序计数器(Program Counter)地址,指向出错的代码位置:基指针(Base Pointer):栈指针(Stack Pointer):进行了4字节(int大小)的写入操作:写入的目标地址thread T0:在T0线程中发生错误摘要:堆缓冲区溢出,发生在a.c的第14行main函数中第14-34行:影子字节信息AddressSanitizer通过"影子内存"机制检测内存错误。原创 2025-12-23 17:11:40 · 82 阅读 · 0 评论 -
ASAN_OPTIONS for AddressSanitizer (ASan)
是运行时配置的环境变量,它控制着 ASan 检测器在程序运行时的各种行为。原创 2025-12-23 14:40:13 · 133 阅读 · 0 评论 -
Kasan vs Asan
特性ASANKASAN差异影响插桩时机编译时一次性全量插桩编译时插桩,但可分层配置KASAN更适应复杂内核环境灵活性低,全有或全无高,可模块化、分层配置KASAN可在生产环境使用运行时调整有限,通过环境变量丰富,sysfs、启动参数KASAN支持动态调优错误恢复终止进程可能继续运行(配置决定)内核需要更高可用性硬件利用支持(如ARM MTE)更深度支持(多种模式)KASAN与硬件结合更紧密特性ASANKASAN插桩时机编译时全量插桩,固定不变编译时插桩,但可配置灵活性。原创 2025-12-22 21:39:52 · 102 阅读 · 0 评论 -
嵌入式开发中的编译器插桩与库实现
特性编译器插桩插桩后的库实现角色“规则制定者”和“自动工人”“功能提供者”工作阶段编译期链接期、运行期主要行为插入对特定桩函数的调用指令实现被调用的桩函数的具体逻辑输出包含了“空洞”(桩调用)的目标文件填补“空洞”的具体函数库控制方由编译器选项(或源码属性)控制由开发者完全自主编写。原创 2025-12-22 20:22:44 · 87 阅读 · 0 评论 -
GDB中x命令的用法详解
x命令是 GDB 中用于的常用命令,全称是。原创 2025-12-21 19:31:34 · 129 阅读 · 0 评论 -
NuttX SVC系统调用机制深度解析
是NuttX系统调用的核心数据库文件18,定义了所有可以通过SVC从用户空间调用的系统接口19。read在中定义31NuttX的SVC系统操作类型Flat模式Protected模式Kernel模式直接调用SVC调用SVC调用read/write直接调用SVC调用SVC调用直接调用直接调用直接调用任务切换SVC调用SVC调用SVC调用信号处理SVC调用SVC调用SVC调用。原创 2025-12-20 23:13:59 · 213 阅读 · 0 评论 -
SVC指令作用及与函数调用区别
SVC是。原创 2025-12-20 00:42:20 · 407 阅读 · 0 评论 -
ARMv8-M架构IPSR寄存器读取函数解析
这是一个用于 ARMv8-M 架构 的 C 语言内联汇编函数,用于读取 IPSR(中断程序状态寄存器) 的值。:内联函数,编译器会将函数体直接插入调用处,避免函数调用开销:返回32位无符号整数:获取IPSR寄存器值的函数2. 内联汇编部分3. 汇编指令详解:Move from System Register,从系统寄存器读取到通用寄存器:引用第一个操作数(变量):要读取的系统寄存器4. 操作数约束:输出操作数:破坏描述(clobber)在ARMv8-M架构中,IPSR(I原创 2025-12-17 20:49:46 · 679 阅读 · 0 评论 -
Python性能分析工具cProfile与pstats
cProfile: 负责收集详细的性能数据pStats: 负责对收集的数据进行排序、过滤和展示优势: 标准库内置、使用简单、数据准确用途: 性能优化、瓶颈定位、代码调优这两个工具是 Python 开发者进行性能优化的必备利器!您提出的这种用法确实更优雅、更专业!👍 这是我实际工作中更推荐的写法。原创 2025-10-13 00:32:28 · 95 阅读 · 0 评论 -
Python脚本shebang写法推荐
虽然两种语法在大多数情况下都能工作,但为了代码的规范性和兼容性,建议使用。原创 2025-10-05 21:44:48 · 229 阅读 · 0 评论 -
Python staticmethod静态方法的作用与使用
在Python中,是一个装饰器,用于定义。原创 2025-10-06 21:34:48 · 559 阅读 · 0 评论 -
Python f-string 用法详解
f-string 是 Python 3.6 引入的一种字符串格式化方法,它使用前缀f或F,允许在字符串中直接嵌入表达式。原创 2025-10-04 22:30:01 · 522 阅读 · 0 评论 -
Python @装饰器用法详解
自定义装饰器就是创建一个包装函数接受一个函数作为输入添加一些额外功能返回一个新的函数(通常调用原始函数)使用@装饰器名语法来应用这样你就能在不修改原函数的情况下,给函数添加各种通用功能!")")原创 2025-10-06 21:51:53 · 1556 阅读 · 0 评论 -
Git仓库Python文件Pylint静态分析
这个命令是在对Git仓库中的所有Python文件运行Pylint代码分析工具。原创 2025-10-06 20:53:21 · 512 阅读 · 0 评论 -
Python命令行参数解析全面总结
参数类型选择主要操作对象 → 位置参数配置选项 → 选项参数开关标志 →nargs使用指南可选值 →nargs='?多个值 →nargs='*'(可选) 或nargs='+'(至少一个)固定数量 →nargs=Naction使用场景布尔标志 →store_true收集多个值 →append计数 →count其他提示为所有参数添加help描述为常用选项设置合理的默认值使用type参数进行类型验证使用choices限制有效值范围。原创 2025-06-22 16:33:49 · 1123 阅读 · 0 评论 -
Python开启Http Server
用 Python 部署了一个具有 FTP 功能的服务器,电脑在局域网内通过 FTP 下载想要传输的文件。原创 2023-07-09 21:34:23 · 3646 阅读 · 0 评论 -
Python格式化工具推荐
工具适用场景风格决策Black追求极简统一,团队协作首选工具决定autopep8需要渐进式PEP 8合规用户配置yapf需要深度自定义风格用户配置2025年趋势:Black已成为Python社区事实标准,新项目优先推荐使用。大型项目常采用 Black + isort + flake8组合(格式化+导入排序+代码检查)。原创 2025-06-15 19:31:07 · 1128 阅读 · 0 评论 -
vscode code-server
ipad上,在浏览器输入。原创 2025-10-06 23:55:38 · 178 阅读 · 0 评论 -
VSCode CMake debug
不需要使用launch.json,使用UI操作即可。需要确保setting.json中配置的cmake路径是正确的,如果不确定可以临时的注释掉,确保vscode可以用到正确的cmake工具。原创 2025-10-05 00:17:43 · 311 阅读 · 0 评论 -
Ninja构建系统前世今生解析
前世:Ninja 诞生于 Google Chrome 项目对构建速度的极致追求,是为了解决 GNU Make 在超大规模项目中的性能瓶颈而生的“专用赛车”。今生:Ninja 凭借其“做好一件事”的极简哲学和无可匹敌的速度,与 CMake 等元构建系统形成了黄金组合,成为了 C/C++ 领域高性能构建的标杆。现状:如今,几乎所有主流的 C/C++ 项目(无论是开源如 LLVM/Clang, Android NDK,还是商业项目)都推荐或支持使用进行构建。原创 2025-09-16 12:25:36 · 156 阅读 · 0 评论 -
Ninja与Makefile性能比较及CMake优势
特性MakeNinja结果设计目标通用任务运行器极致速度的编译器驱动器Ninja目的纯粹依赖检查需要启动Shell进程,高开销内置检查,几乎零开销Ninja大幅胜出并行构建基础调度器深度优化的智能调度器Ninja更高效文件格式复杂,包含逻辑,解析慢简单,声明式,解析极快Ninja加载更快功能特性强大(函数、条件、变量)极简(仅依赖和命令)Make更灵活适用场景中小型项目,需要灵活性的脚本大型项目(如OS、浏览器),CI/CD根据规模选择。原创 2025-09-10 17:49:34 · 464 阅读 · 0 评论 -
嵌入式Secure Boot安全启动详解
Secure Boot(安全启动)是一种安全机制,其核心目的是确保设备只能运行经过制造商授权和认证的软件代码。你可以把它想象成一个层层递进的安检系统最可信的起点:设备上电后,首先执行的是芯片内部ROM中固化的、无法被修改的一小段代码,称为Boot ROM或ROOT OF TRUST(信任根)。这是整个安全启动链条的绝对信任基础。逐级验证信任根代码会去验证下一阶段要执行的引导程序(例如 Bootloader)的数字签名。验证方式通常是使用非对称加密算法(如RSA、ECC)。信任根里存储了开发者的。原创 2025-09-07 23:11:34 · 833 阅读 · 0 评论 -
nuttx调度策略
特性SCHED_FIFOSCHED_RR中文名先进先出调度轮询调度分时调度核心机制运行至完成时间片轮转动态优先级调整同优先级调度先就绪的先运行,直到它主动放弃轮流运行,时间片用完即切换复杂的动态调整,追求公平是否会强制切换否是(时间片耗尽时)是(由调度算法决定)确定性高高低风险高(易导致同优先级任务饿死)低低(但对实时任务来说是“饿死”)适用场景硬实时任务,要求极确定的响应通用实时任务,最常用非实时后台任务NuttX 像一辆 F1 赛车。原创 2025-09-02 11:57:54 · 176 阅读 · 0 评论 -
ccache编译加速配置
检查配置,输入命令,检查使用的编译器是否为 ~/.tools/cc,是则配置完成,否则检查环境变量是否配置成功which gcc使用ccache首次执行时,需要使用distclean清理中间文件,然后使用 time ./build.sh sim:mirtos -j 进行编译编译完成后 ,可通过ccache -s 查看当前已缓存文件数再次编译时,会自动选择文件缓存,再次使用 ccache -s 可以查看文件缓存的命中率使用注意。原创 2025-09-01 20:25:38 · 150 阅读 · 0 评论 -
JetBrains Mono字体
编码正文:无脑选Regular。这是为代码阅读优化的核心字重。追求更清晰显示:如果你的屏幕分辨率很高(如 4K 或 Mac 的 Retina 屏),可以尝试Medium,它会看起来更扎实。注释与强调:使用Italic(斜体)风格来显示注释,使用Bold(粗体)来强调关键字(通常由你的IDE主题自动管理)。标题与展示:在文档、幻灯片或海报中,可以使用LightExtraLight来做大标题,用ExtraBold来做短小精悍的强调。个性化。原创 2025-08-21 10:13:46 · 525 阅读 · 0 评论 -
XIP (eXecute In Place)
想让 CPU 跑得快,要么用 NOR 直接喂指令,要么把 NAND 的代码先搬到 RAM 这个“高速食堂”再吃!试图在 NAND 上 XIP 会导致 CPU 长时间停滞,性能完全不可接受。这就像 CPU 把 NOR 当作一块慢一点的 RAM 来用。这能节省 RAM 空间,加快启动速度。从存储介质复制到 RAM,而是。原创 2025-06-29 22:33:34 · 491 阅读 · 0 评论 -
python logging模块
以下是 Python 中 模块的基础使用示例和配置说明:进阶配置版(同时输出到控制台和文件)关键配置说明:日志级别(从低到高):常用配置方式:推荐格式元素:最佳实践:根据需求选择适合的配置方式,复杂项目推荐使用进阶配置实现更精细的控制。你提到的 是日志记录中非常重要的一个格式字段,它的值来源于 logger 的名称。具体来说:默认情况:自定义 logger:此时 会显示 或当前模块的 (如 )实际应用场景场景1:直接使用模块函数(root logger)场景2:使用原创 2025-04-05 14:45:23 · 258 阅读 · 1 评论
分享