logo
publist
写文章

简介

该用户还未填写简介

擅长的技术栈

可提供的服务

暂无可提供的服务

C++ 嵌入式开发:从底层对齐到高层架构的“避坑”指南

现代嵌入式开发不再是简单的“点灯”。理解 pragma pack的保护机制、利用 unique_ptr实现解耦与多态、理清定时器的上下文环境,这三步是进阶高级机器人工程师的必经之路。解决生命周期焦虑:全局变量初始化顺序不可控(容易导致 A 初始化时调用了还没初始化的 B)。使用unique_ptr,你可以精准控制对象的创建时机。节省空间而非浪费:对象在栈上太大会导致“栈溢出(Stack Overf

#c++#开发语言
【C++ 硬核】零成本抽象的魔法:CRTP (奇异递归模板模式) 与嵌入式静态多态

CRTP 是 C++ 赋予嵌入式开发者的神兵利器。它证明了“抽象”和“效率”不是反义词。通过 CRTP,我们构建了类型安全的硬件抽象层 (HAL),享受了面向对象的封装与复用,却不需要为之支付任何运行时成本。Zero Overhead Abstraction (零成本抽象),这就是现代 C++ 在嵌入式领域的终极哲学。

#c++#开发语言
【C++ 硬核】打破嵌入式 STL 禁忌:利用 std::pmr 在“栈”上运行 std::vector

std::pmr是 Modern C++ 送给嵌入式开发者的重磅礼物。它打破了“嵌入式不能用 STL”的魔咒。栈上 Vector:利用,把 vector 当作安全的 VLA 用。零碎片:利用,在静态内存中高效复用内存块。代码复用:你的算法代码可以统一接收,无论内存是来自栈、静态区还是外部 SDRAM,算法都不需要修改。别再手写链表和动态数组了,用 PMR 拥抱现代化的内存管理吧。

#c++#jvm#开发语言
【C++ 硬核】摆脱开发板:用 Google Test + Mock 构建嵌入式 TDD (测试驱动开发) 体系

/ 定义 Flash 的抽象行为,不包含任何 STM32 代码public:public:2. 编写业务逻辑 (只依赖接口)// 引用接口,而非具体类public:// 依赖注入:在构造时传入具体的实现// 写入地址 0,模拟 4 字节数据if (!success) {// 如果写入失败,尝试擦除public:// MOCK_METHOD(返回值, 函数名, (参数...), (修饰符));pub

#tdd#驱动开发
【C++ 硬核】消灭 void*:用 std::variant 实现嵌入式“类型安全”的多态 (Type-Safe Union)

是 C++ 给嵌入式开发者的又一份大礼。它彻底解决了void*回调函数的类型安全问题,消灭了手动维护enum标签的繁琐,同时保持了 C 语言union的内存紧凑性和switch的执行效率。下次遇到“既要存A又要存B”的需求,别再写int type;了,试试吧!

#c++#开发语言
【嵌入式硬核】死机不再盲猜:手把手教你编写 ARM Cortex-M 的 HardFault 回溯 (Stack Backtrace)

通过这套汇编跳板 + C 语言打印 + addr2line 分析的组合拳,你拥有了嵌入式开发中的“黑匣子分析”能力。汇编入口:区分 MSP/PSP,获取栈顶指针。C 结构体:解析栈帧,提取 PC 和 LR。addr2line:将由 PC/LR 的十六进制地址翻译成文件名:行号。建议:结合之前的《Flash 崩溃日志》文章,将这个写入 Flash。下次设备从现场寄回来,你只需要读出 Flash 里的

#arm开发
【C++ 硬核】拒绝 strcmp:在嵌入式中实现 O(1) 的“字符串 Switch-Case” (编译期哈希)

C++11 允许我们自定义后缀。我们可以定义一个_hash后缀,让直接变成一个整数。// 定义字面量操作符通过 C++ 的 constexpr和字面量重载,我们成功地将高级语言的“字符串 Switch”特性带入了嵌入式 C++。代码优雅:可读性极高,像脚本语言一样处理字符串。极致性能:将 O(N) 的字符串匹配变成了 O(1) 的整数跳转。零存储:Flash 里不需要存"AT+RST"这些字符串常

#c++#哈希算法#开发语言
【C++ 硬核】告别 Excel 生成数组:利用 constexpr 实现编译期计算查找表 (LUT)

我们要利用std::array(定长数组)来存储结果。// 模板参数 N:表的大小// 初始化i < N;i++) {// 1. 计算角度 (弧度制 0 ~ 2π)// 2. 计算 sin 值 (-1.0 ~ 1.0)// 3. 映射到 0 ~ 4096 (12bit PWM, 中心对齐)// sin_val + 1.0 范围变成 0 ~ 2// * 2047.5 范围变成 0 ~ 4095C++

#c++#开发语言
【架构变革】内存安全的终极承诺:为什么 Rust 是嵌入式开发的未来?从借用检查器到零成本抽象

学习 Rust 的过程是痛苦的。你会觉得在这个语言里,你什么都做不了:不能随意改变量,不能有全局指针,不能在这个函数里用那个函数的引用。你会哪怕为了写一个链表,都要和编译器搏斗三天。但一旦你的代码编译通过了,奇迹就发生了:它通常能直接运行。它没有内存泄漏。它没有数据竞争。它在极端边界条件下依然稳定。C 语言给了你一把锋利的手术刀,你可以切除肿瘤,也经常割破手指。Rust 给了你一套全自动达芬奇手术

#rust#开发语言#后端
【协议心法】拒绝无脑 memcpy:用 C++ 零拷贝 (Zero-Copy) 榨干总线吞吐量的协议解析美学

传统的编程思维,是把内存当作一个个存放积木的“盒子”。我们要用积木,就必须把积木从箱子里搬到自己的盒子里。但在极客的底层架构哲学里:内存只是一片无边无际的荒原。结构体和指针,不过是我们手里的图纸和准星。当这 1 主 8 从的系统全速运转时,那些庞大的 OTA 升级包和高频的 2D 数据流在总线上狂飙。主控节点像一个优雅的交警,不拆开任何一个包裹,仅仅通过强制类型转换“看了一眼”包裹上的标签,就用

#c++#开发语言
    共 16 条
  • 1
  • 2
  • 请选择