littlebot
Published on 2025-04-07 / 2 Visits
0

【源码】基于C语言AtomVM框架的嵌入式Erlang虚拟机

项目简介

AtomVM 是专门为嵌入式系统打造的轻量级 Erlang 虚拟机,其目的是把 Erlang 和 Elixir 等函数式编程语言引入资源受限的微控制器(MCU)系统。该项目实现了 Erlang 虚拟机的一个子集,可在 ESP32、STM32 等嵌入式平台运行未经修改的 BEAM 字节码,让开发者能在嵌入式设备编写和运行 Erlang 代码,享受其并发和容错特性。

项目的主要特性和功能

  1. 跨平台支持:支持 ESP32(基于 FreeRTOS)、STM32(基于 LibOpenCM3)以及通用 Unix 系统(如 Linux、macOS、FreeBSD)。
  2. 轻量级虚拟机:实现 Erlang 虚拟机子集,能在资源受限设备运行 BEAM 字节码,支持 Erlang 基本功能和并发模型。
  3. 示例代码:提供“Hello World”和 LED 闪烁等示例代码,助开发者快速上手验证功能。
  4. 模块化设计:便于移植到新硬件平台,开发者通过简单配置和编译步骤就能部署到不同嵌入式设备。
  5. 测试与验证:包含一系列单元测试和示例代码,验证功能和性能,确保在各平台正常工作。

安装使用步骤

1. 下载源代码

从项目的 Git 仓库中下载源代码。

2. 安装依赖

确保系统已安装以下工具和库: - CMake:用于构建项目。 - gperf:用于生成完美哈希函数。 - erlc:用于编译 Erlang 代码。 - zlib(可选):用于支持标准 BEAM 文件的解压缩。

3. 编译 AtomVM

通用 Unix 平台

bash $ mkdir build $ cd build $ cmake .. $ make

ESP32 平台

bash $ cd src/platforms/esp32/ $ make

STM32 平台

bash $ git clone libopencm3 $ cd libopencm3 && make -j4 && cd .. $ mkdir build $ cd build $ cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/arm-toolchain.cmake -DLIBOPENCM3_DIR=../libopencm3 .. $ make

4. 烧录固件

ESP32 平台

bash $ make flash

STM32 平台

bash $ st-flash --reset write atom-vm.bin 0x8000000 $ st-flash --reset write /path/to/your/packed.avm 0x8080000

5. 运行示例代码

Hello World 示例

bash $ $IDF_PATH/components/esptool_py/esptool/esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 115200 --before default_reset --after hard_reset write_flash -u --flash_mode dio --flash_freq 40m --flash_size detect 0x210000 build/examples/erlang/hello_world.avm $ cd src/platforms/esp32 $ make monitor

LED 闪烁示例

bash $ $IDF_PATH/components/esptool_py/esptool/esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 115200 --before default_reset --after hard_reset write_flash -u --flash_mode dio --flash_freq 40m --flash_size detect 0x210000 build/examples/erlang/esp32/blink.avm

6. 查看测试结果

运行测试后,可通过串口监视器查看输出结果,或生成测试报告分析结果。

下载地址

点击下载 【提取码: 4003】【解压密码: www.makuang.net】