文章摘要
GRiSP Nano成功在16MB硬件上启动Erlang,标志着其在嵌入式系统领域的新里程碑。这一成就基于2024年以来的持续研发,展示了在有限资源下运行复杂系统的能力。
文章总结
GRiSP Nano:在16MB内存中启动Erlang的新里程碑
在2025年6月2日的Code BEAM Light Stockholm会议上,Peer提出了一个问题:BEAM能否在16MB内存中运行? 两天后,GRiSP Nano原型机通过启动Erlang shell给出了肯定的答案。这一成功基于自2024年年中以来的持续努力。
16MB硬件配置
GRiSP Nano搭载了STM32U5 Cortex-M33处理器(3MB内部SRAM)和16MB OctoSPI DRAM。设备配备了micro-SD插槽用于存储,4个PMOD™连接器支持SPI、I²C和UART接口。Micro-USB提供控制台访问,而支持OTG的USB-C接口可作为可编程主机或客户端。电源可通过USB端口或能量收集器提供。
最初计划使用32MB内存,但由于CPU问题,不得不改用16MB的兼容RAM芯片。这一限制虽然未在计划中,但最终塑造了项目的结果。
突破Unicode障碍
在会议当天,原型机能够加载大部分OTP,但未能启动Erlang shell。问题出在Unicode上。两天后,团队通过以下措施解决了问题:
- 添加了
unicode_util_rtems.erl模块,替换了RTEMS上的标准unicode_util。 - 调整了
Makefile以使用该模块。
禁用Unicode后,GRiSP Nano终于在6月4日成功启动。
内存优化步骤
为了在16MB内存中运行Erlang,团队采取了以下优化措施:
- 基线:首次启动仅加载了7个模块,剩余7.4MB内存,加载器很快崩溃。
- 移除Crypto并优化编译/链接标志:移除Crypto(临时)并使用优化标志编译OTP,剩余内存增至8.5MB,加载了45个额外模块。
- 剥离BEAM文件:通过
beam_lib:strip_release/1节省了16kB,加载了2个额外模块。 - RTEMS调整+内部RAM+模块级GC:利用CPU内部RAM并在每个模块加载后强制垃圾回收,剩余内存增至9.4MB,BEAM二进制文件缩减至4.1MB,加载了25个额外模块。
- GC检查:禁用模块级GC,加载了比步骤4多2个模块,内存使用基本不变。
- 分配器调整+RTEMS/libbsd深度优化:启用
ll_alloc并添加分配器调试,禁用每线程分配器,剩余内存增至10.2MB,BEAM二进制文件缩减至2.95MB。
未来计划
虽然启动Erlang shell是一个重要里程碑,但项目尚未结束。团队计划:
- 将部分代码迁移到内部RAM或Flash中,并充分利用内部RAM。
- 发布内核和标准库的“轻量”版本。
- 添加能量感知启动逻辑,支持能量收集场景。
- 启动Kickstarter众筹,为第一批生产提供资金。
- 开发支持常见UTF-8的“Unicode-light”版本,避免使用完整的500kB Unicode表。
团队将继续分享日志、基准测试和经验教训。如果你对在16MB内存中运行Erlang感兴趣,欢迎加入Erlang社区#grisp Slack频道或为GRiSP仓库点赞,你的反馈将帮助塑造项目的未来。
更多详情请访问GRiSP.org或直接联系团队。
评论总结
评论总结:
赞赏与认可
- 评论1对项目的完成速度和成果表示高度赞赏。
- 引用:“This is incredible. Kudos on getting it done, and done so quickly!”(“这太棒了。祝贺你完成了,而且完成得如此迅速!”)
技术细节与背景
- 评论2提到GRiSP平台如何结合Erlang和RTEMS实时操作系统,以克服Erlang虚拟机的软实时限制,实现硬实时事件处理。
- 引用:“This video covers how the GRiSP platform combines Erlang and RTEMS Real-time OS to overcome Erlang VM's soft real-time limitations.”(“这个视频介绍了GRiSP平台如何结合Erlang和RTEMS实时操作系统,以克服Erlang虚拟机的软实时限制。”)
低功耗与能源采集应用
- 评论3讨论了CPU的低功耗特性,并表达了对能源采集应用的兴趣。
- 引用:“The CPU has a 18.6 μA/MHz Run mode at 3.3 V, so 61μW! I wanted to know more about the power harvesting applications though.”(“CPU在3.3V下的运行模式为18.6 μA/MHz,即61μW!不过,我想了解更多关于能源采集应用的信息。”)
总结:评论主要围绕对项目的赞赏、技术实现的细节以及低功耗特性展开,既有对成果的肯定,也有对技术背景和未来应用的深入探讨。