logo
publist
写文章

简介

该用户还未填写简介

擅长的技术栈

可提供的服务

暂无可提供的服务

【STM32硬核调试】打造嵌入式“黑匣子”:系统崩溃时自动保存日志至Flash (附源码)

通过这套机制,我们成功给 STM32 装上了一个“黑匣子”。成本低:不需要外部 EEPROM,利用片上 Flash 即可。效率高:全自动记录,复位后自动汇报。定位快:直接给出文件名和行号,瞬间锁定 BUG。对于经常需要远程维护的物联网设备,这是一个必装的功能模块!

#stm32#嵌入式硬件#单片机
【Linker 硬核】突破 Flash 速度瓶颈:深度解析 LMA/VMA 与“代码驻 RAM”的链接脚本黑魔法

链接器只是规划了地图,它不会自动帮你搬砖。如果在上电瞬间直接调用,CPU 会跳到 RAM 地址去执行,但此时 RAM 里全是随机乱码(因为还没人把代码搬过去),导致 HardFault。我们必须在main()之前,手动把代码从 Flash (LMA) 拷贝到 RAM (VMA)。这通常在或SystemInit中完成。// 引用链接脚本导出的符号// RAM 中的开始地址 (VMA)// RAM 中

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

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

#rust#开发语言#后端
【算法心法】挣脱欧拉角的万向锁诅咒:四元数、IMU 姿态解算与多传感器融合的数学哲学

在做嵌入式或机器人开发时,我们有太多时间被“串口波特率配置”、“DMA 丢包”或“RTOS 优先级”这些底层细节所吞噬。但当你跨越了驱动的门槛,真正让机械结构产生空间运动时,决定系统高度的,永远是数学与算法的内化。把那些易碎的欧拉角和充满噪声的裸数据,转化为优雅的四元数和交叉耦合矩阵。当你看着机械臂在极速转动中精准悬停,丝毫不受万向锁死区和震动噪声影响时,你会真切地感受到,那些干瘪的线性代数公式,

#算法
【内存管理】嵌入式里的禁忌之术:为什么 Malloc 是魔鬼?从堆碎片到确定性内存池的救赎之路

即使用了内存池,忘记Free也会导致泄漏。如何防御?在 PC 上,你可以信任操作系统,反正 RAM 有 32GB。在嵌入式上,信任由于无知,控制源于恐惧。不要把内存管理的权力交给编译器自带的malloc。它既不知道你的业务逻辑,也不在乎你的实时性。构建自己的内存池。知道每一块 RAM 去了哪里。知道分配它需要多少个周期。知道它永远不会碎成渣。只有当你掌控了每一个字节的生老病死,你才能说你真正掌控了

#arm开发
【工程心法】从“在板盲调”到“云端验证”:嵌入式单元测试与 TDD 的工程化革命

很多老板会抱怨:“写测试太浪费时间了,我们应该赶紧去板子上调。写测试是为了走得更快。在板子上调 1 个 Bug = 2 小时。在 PC 上跑 1 个用例 = 2 毫秒。单元测试是嵌入式工程师的“时光机”,它让你能瞬间回到过去任何一个逻辑节点进行验证。当你构建起这套宿主机测试体系时,你就已经脱离了“烧录-重启-看灯”的原始部落,进入了现代工业化软件生产的殿堂。

#单元测试#tdd
【C++ 硬核】拒绝 “return -1“:用 std::optional 重塑嵌入式函数的返回值语义

是 Modern C++ 给嵌入式开发带来的最实用的语法糖之一。安全性:强制程序员处理“失败”的情况(因为你必须解包才能拿到值)。语义化:接口签名就能告诉调用者“这个操作可能会失败”。零开销:仅仅是寄存器传递和一个布尔判断。告别,告别return -1,让你的嵌入式代码像瑞士钟表一样精密运作。

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

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

#c++#jvm#开发语言
【并发之痛】Volatile 的谎言与原子操作的真相:嵌入式多线程数据竞争的底层解剖

并发编程的难点在于,它挑战了我们线性的思维方式。在并发的世界里,顺序是错觉,原子是假象。作为嵌入式架构师,你必须具备“透视眼”: 透过 C 代码看到汇编,透过汇编看到流水线,透过流水线看到总线仲裁。用volatile抑制优化。用处理竞争。用DMB规避乱序。用Mutex避免翻转。只有理解了硅晶片上的微观秩序,你才能构建出宏观上坚不可摧的系统。

#面试#职场和发展
【架构演进】让芯片“开口说话”:TinyML 与嵌入式端侧 AI 的算力榨取艺术

TinyML 的出现,标志着单片机从“自动化”向“智能化”的跨越。作为架构师,你不仅要懂底层的LMA/VMAPendSV 调度,现在你还要懂张量 (Tensor)卷积核 (Kernel)和激活函数 (Activation)。C 语言是你的骨架(底层驱动)。RTOS是你的血液(任务调度)。TinyML将成为你的大脑(端侧智能)。不要再让单片机只做一个冷冰冰的执行器。给它一个神经网络,它就能在这个嘈杂

#人工智能
    共 57 条
  • 1
  • 2
  • 3
  • 6
  • 请选择