项目简介
AtomVM 是专门为嵌入式系统打造的轻量级 Erlang 虚拟机,其目的是把 Erlang 和 Elixir 等函数式编程语言引入资源受限的微控制器(MCU)系统。该项目实现了 Erlang 虚拟机的一个子集,可在 ESP32、STM32 等嵌入式平台运行未经修改的 BEAM 字节码,让开发者能在嵌入式设备编写和运行 Erlang 代码,享受其并发和容错特性。
项目的主要特性和功能
- 跨平台支持:支持 ESP32(基于 FreeRTOS)、STM32(基于 LibOpenCM3)以及通用 Unix 系统(如 Linux、macOS、FreeBSD)。
- 轻量级虚拟机:实现 Erlang 虚拟机子集,能在资源受限设备运行 BEAM 字节码,支持 Erlang 基本功能和并发模型。
- 示例代码:提供“Hello World”和 LED 闪烁等示例代码,助开发者快速上手验证功能。
- 模块化设计:便于移植到新硬件平台,开发者通过简单配置和编译步骤就能部署到不同嵌入式设备。
- 测试与验证:包含一系列单元测试和示例代码,验证功能和性能,确保在各平台正常工作。
安装使用步骤
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】