MicroAlloc2 months agohttps://bogdanthegeek.github.io/blog/projects/microalloc/作者通过研究ESP-IDF堆分配器,创建了一个自定义内存分配器(MicroAlloc)。通用堆分配器需要在速度、开销和碎片化之间进行权衡。该实现采用首次适应空闲链表分配器,其元数据结构存储偏移量而非完整指针,以最小化开销(每个分配仅2字节)。嵌入式工程师通常应避免动态分配;静态分配、暂存缓冲区、块分配器和区域分配器是更安全的选择。Free()实现包含合并相邻空闲块的功能,但可通过编译时标志延迟合并以获得更佳性能。
The Rust on ESP Book2 months agohttps://docs.espressif.com/projects/rust/book/本指南介绍了在乐鑫产品上进行嵌入式Rust开发,涵盖软件栈、项目生成和工具工作流程。它面向对嵌入式系统感兴趣的Rust开发者,即使没有相关经验,并建议了一些背景知识的额外资源。稳定模块遵循语义化版本控制,但像esp-hal这样的不稳定组件可能会频繁变化,需要仔细跟踪依赖关系。其他资源包括《Rust程序设计语言》、《嵌入式Rust书》、no_std指南,以及针对乐鑫和通用嵌入式Rust的精选列表。欢迎通过本书的仓库贡献和报告错误,社区支持可在Matrix和GitHub Discussions上获得。
Linux on the Sega 32X. Who needs hardware synchronization primitives anyway?2 months agohttps://cakehonolulu.github.io/linux-on-32x/作者为了提升电路板启动调试技能,决定将Linux移植到Sega 32X平台,这一想法源于过去在联发科手机上调试Android 5.0 Lollipop系统的经历。Sega 32X硬件配备了两个SH2处理器和256KB内存,需要通过创新方案实现移植,例如将闪存卡ROM作为内存使用,并采用软件同步技术支持对称多处理(SMP)。面临的挑战包括工具链问题、内存限制、缺乏硬件同步原语以及缓存一致性问题,最终通过彼得森算法和将68000作为中断路由器得以解决。尽管存在性能限制和大量的调试工作,该项目成功实现了支持SMP的Linux启动,并配备了控制台显示驱动程序和最小化的根文件系统(rootfs)。
An iroh powered smart fan3 months agohttps://www.iroh.computer/blog/an-iroh-powered-smart-fan本文介绍了如何使用ESP32与Iroh创建一个智能风扇,实现无需云端组件的远程温度感应和风扇控制。内容包括:使用Iroh设置ESP32、添加DHT22传感器、实现用于远程通信的IRPC协议,以及开发用于基于浏览器控制的WebAssembly图形用户界面。项目从一个简单的回声服务器演变为具有完整功能的智能风扇,包括用于设置温度阈值的身份验证功能,并包含3D打印的外壳,形成一个成品。
The Age of Personalized Hardware Is Coming3 months agohttps://geastack.com/blog-the-age-of-personalized-hardware-is-coming软件变得越来越个性化,使个人能够为工作和生活构建定制化应用程序。个人硬件设备正在迅速普及,仅可穿戴设备每年就超过6亿台,这得益于ESP32板等廉价组件的推动。关键问题在于谁为这些设备编写软件,因为当前模式限制了用户对设备功能的控制。智能体需要访问设备上的传感器(如摄像头、麦克风)以利用物理环境信息,这要求软件能够在本地运行。越来越多用户需求针对小型、单一用途的个人设备的定制化软件。软件开发平台正变得更加开放,如Pebble的开源手表软件、Meta/Mentra的基于网络的眼镜开发工具,以及谷歌的WebXR技术,这些都使开发变得更加便捷。网络作为构建软件的可靠、成熟基础,通过编码助手降低开发门槛,帮助完成设置和开发工作。当前的嵌入式工具链(如C++、SDK)复杂且不同于网络开发,阻碍了为设备创建更广泛界面的可能性。GEA旨在提升软件边界,允许使用类似网络的开发方式,将其编译为适用于各种平台的本机代码,而无需嵌入式专业知识。硬件挑战(如制造、认证)仍然存在,但重点在于让更多人能够为个人设备编写软件。个性化硬件的未来取决于软件及其开发者,强调用户驱动的开发模式,以实现量身定制的设备。
Lightning Memory-Mapped Database Manager (LMDB) 1.03 months agohttp://www.lmdb.tech/doc/LMDB是一个基于B树的嵌入式数据库管理库,提供类似BerkeleyDB的简化API。它使用内存映射文件进行直接数据访问,避免了获取数据时进行malloc或memcpy的需要,从而实现了高性能和简洁性。该数据库完全支持事务处理,具有ACID语义,是线程感知的,并支持跨多个进程和线程的并发读写访问。数据页采用写时复制机制,防止覆盖,确保在系统崩溃后无需特殊恢复即能抵抗损坏。写入操作被序列化以避免死锁,而读取操作则通过多版本控制实现无锁运行,允许非阻塞的读写并发。与预写日志或仅追加数据库不同,LMDB无需像检查点这样的维护工作,因为它重用空闲页以防止文件无限增长。内存映射可以是只读的(以防止损坏)或读写的(用于更高的写入性能,但存在因应用程序代码错误而带来的风险)。过期的读取事务或损坏的锁文件可能导致问题;解决方法包括使用mdb_reader_check和在BSD系统上处理信号量所有权。