-
Announcing AtomVM v0.6.3
2024/07/22 Announcing AtomVM v0.6.3
We are pleased to announce the release of v0.6.3 of the AtomVM virtual machine!
This release expands OTP coverage to include the Erlang
sets
andqueue
modules and several ElixirKeyword
functions:Keyword.merge
,Keyword.take
,Keyword.pop(!)
,Keyword.keyword?
, andKeyword.has_key?
. Support for~kp
withio_lib:format/2
andmaps:iterator/2
that were introduced with OTP26 have added, along withmaps:from_keys/2
. Thelists
modules gains support forlists:keytake/3
,lists:keystore/4
, andlists:filtermap/2
. Support forerlang:size/1
anderlang:apply/2
has also been added.A simple http client, that can be used for different use cases, such as downloading OTA updates has been added to
eavmlib
.The channel used in access point mode can now be changed in the
network
driver.This release adds support for ESP32-H2 devices. Support has also been added for USB serial output on ESP32 devices with native USB support (ESP32-S2 for example).
Notable changes include:
- the default size of ESP32 RTC slow memory being bumped from 4086 to 4096, except on ESP32-H2 where it’s 3072 bytes
- updates to
byte_size/1
andbit_size/1
to implement OTP27 match context reuse optimization OTP-18987 - ESP32 network driver messages for event 40 (home channel change events) are now suppressed, but the details for the channel changes can be observed in the console log if “debug” level logging is enabled in ESP-IDF Kconfig options.
Several bugs have been fixed, including the creation of multiple links for the same process and links not being removed at trapped exits. A bug affecting binary pattern matching (for builds with OTP-21) has been fixed, and several memory related bugs have been corrected, as well as a bug that could yield crashes when functions are sent in messages. The error that is raised when a function is undefined has also been fixed.
For the full set of bug fixes, changes and additions consult the Changelog.
Download images and binaries are available for most platforms, except STM32, are available from AtomVM Releases on GitHub. STM32 users as well as anyone needing to build a generic_unix port for a device without release binaries should consult the Build Instructions. MacOS users also have the option of installing with
macports
, and an updated HomeBrew tap should be available in the near future. The “tap” is currently out of date, but a fix has already been submitted.The git repository and tarballs of the AtomVM source release for all platforms can be found on our GitHub AtomVM page.
Documentation for the v0.6.3 release of the AtomVM virtual machine, including a Getting Started Guide, can be found in the AtomVM Documentation.
As always, tools, drivers, and modules are available on the GitHub AtomVM Project page.
Many thanks go to Davide Bettio, for creating and maintaining such a fine work of software. Special thanks also to takasehideki and Mikael Karlsson for their first contributions to the project, along with the rest of the contributors and testers who have helped make this release possible.
The AtomVM team
-
Announcing AtomVM v0.6.2
2024/05/29 Announcing AtomVM v0.6.2
We are pleased to announce the release of v0.6.2 of the AtomVM virtual machine!
This release changes the ssl default from
{active, false}
to{active, true}
in order to have same behavior as OTP, as well as fixing several ssl related bugs. Stacktraces are now enabled by default on the rp2040 platform; so, like the ESP32, when a user application crashes a stacktrace will be emitted to make debugging applications easier.We have added support for the ESP32-C2, as well as DragonFly BSD on the generic_unix platform. Other additions include
esp:deep_sleep_enable_gpio_wakeup/2
to allow wakeup from deep sleep for ESP32C3 and ESP32C6, as well as the ability for WiFi enabled devices to obtain the signal strength of the connection to an access point usingnetwork:sta_rssi/0
. A number of new functions have been added to the proplists module, and guardsis_even
andis_odd
have been added to the Elixir Integer module.For the full set of bug fixes, changes and additions consult the Changelog, and check the Updating Instructions.
Download images and binaries are available for most platforms, except STM32, are available from AtomVM Releases on GitHub. STM32 users as well as anyone needing to build a generic_unix port for a device without release binaries should consult the Build Instructions.
The git repository and tarballs of the AtomVM source release for all platforms can be found on our GitHub AtomVM page.
Documentation for the v0.6.2 pre-release of the AtomVM virtual machine, including a Getting Started Guide, can be found at the AtomVM Documentation page.
As always, tools, drivers, and modules are available on the GitHub AtomVM Project page.
Many thanks go to Davide Bettio, for creating such a fine work of software, as well as the contributors and testers who have helped make this release possible.
The AtomVM team
-
Announcing AtomVM v0.6.1
2024/05/06 Announcing AtomVM v0.6.1
We are pleased to announce the release of v0.6.1 of the AtomVM virtual machine!
This is a small update that introduces a new experimental feature: an optimized GC mode. This mode uses C’s realloc instead of copying data around and can be enabled with the
-DENABLE_REALLOC_GC=On
flag.The other notable changes include several bug fixes:
- A crash on macOS has been addressed by adding a missing call to psa_crypto_init for TLS 1.3.
- Functions such as fun m:f/a are now correctly displayed and converted to lists.
- An issue where the unique integer was truncated on some 32-bit architectures has been fixed, particularly when using
erlang:ref_to_list/1
anderlang:display/1
.
For the full set of bug fixes, changes and additions consult the Changelog, and check the Updating Instructions.
Download images and binaries are available for most platforms, except STM32, are available from AtomVM Releases on GitHub. STM32 users as well as anyone needing to build a generic_unix port for a device without release binaries should consult the Build Instructions.
The git repository and tarballs of the AtomVM source release for all platforms can be found on our GitHub AtomVM page.
Documentation for the v0.6.1 pre-release of the AtomVM virtual machine, including a Getting Started Guide, can be found at the AtomVM Documentation page.
As always, tools, drivers, and modules are available on the GitHub AtomVM Project page.
Many thanks go to Davide Bettio, for creating such a fine work of software, as well as the contributors and testers who have helped make this release possible.
The AtomVM team
-
Announcing AtomVM v0.6.0
2024/03/23 Announcing AtomVM v0.6.0
We missed announcing the last few beta and rc releases that all came in a flurry as we were busy doing tests on hardware and this announcement is actually late, but for anyone who missed it, we are pleased to announce that we have a new v0.6.0 stable release!
In this release SPI, I2C, and UART peripheral configurations have been changed, for details consult the documentation for these modules in the
eavmlib
documentation. There is now an ESP32 API for allowing coexistence of native and Erlang I2C drivers, for example, allowing the use of the nativeatomvm_ssd1306
Display driver, with a pure erlang driver for the SHT3x temperature sensor. GPIO interrupt (currently only supported on ESP32 and STM32 platforms) messages can now be sent to a designated receiver usinggpio:set_int/4
. Support forlists:split/2
has also been added. ESP32 platform now supports retrieving the device’s e-fuse MAC address withesp:get_default_mac/0
.AtomVM now uses UTF-8 encoding for atoms when using
erlang:term_to_binary/1
, in conformance with OTP-26, andbinary_to_atom/1
andatom_to_binary/1
now default to utf8. Support has been added for utf8 encoding to*_to_atom
andatom_to_*
functions.We have made improvements to the rp2040 platform that should make development workflows much smoother. The device will now accept re-flashing a new application using the
atomvm_rebar3_plugin
pico_flash
task after the application has exited. Previously the device would be unresponsive after exiting. There is also a default 20 second timeout, which the device will wait for a USB console connection to be established, before running the application. Previously our default build would start the application immediately, giving the user no time to connect to be able to see the output ofhello_world
before the application exited, and the device became unresponsive.The port call tuple format has been changed to the same format as gen_server, so cast support can be added. This change means older versions of
atomvmlib
will not work, libraries from latest version must be used. Check the Update Instructions for other breaking changes for both BEAM application developers, as well as for contributors, and driver developers using nifs or ports.Under the hood enhancements feature a new atom table, which uses less memory, and has improved performance.
Several memory related bugs have been fixed. A random number generation bug has been fixed on ESP32 and RPi2040, as well as a bug shared by both platforms that would cause invalid GPIO pull directions to be silently set to
floating
without an error.For the full set of bug fixes, changes and additions consult the Changelog, and check the Updating Instructions.
Download images and binaries are available for most platforms, except STM32 (and some generic_unix hosts for this release due to specific Mbed-TLS requirements) are available from AtomVM Releases on GitHub. STM32 users as well as anyone needing to build a generic_unix port for a device without release binaries should consult the Build Instructions.
The git repository and tarballs of the AtomVM source release for all platforms can be found on our GitHub AtomVM page.
Documentation for the v0.6.0 pre-release of the AtomVM virtual machine, including a Getting Started Guide, can be found at the AtomVM Documentation page.
As always, tools, drivers, and modules are available on the GitHub AtomVM Project page.
Many thanks go to Davide Bettio, for creating such a fine work of software, as well as the contributors and testers who have helped make this release possible.
The AtomVM team
-
Announcing AtomVM v0.6.0-beta.1 (Pre-release)
2024/02/29 Announcing AtomVM v0.6.0-beta.1 (Pre-release)
We are pleased to announce that our pre-release of v0.6.0 is now in beta!
Wait! What happened to the v0.6.0-beta.0 release? Our all volunteer QA team (thank you @petermm) discovered a problem with the ESP32S3 builds that caused starting
esp32init.beam
to crash the VM. This is the default network application that will create a wireless AP on an ESP32 that has been flashed with the AtomVM image, but does not have a user application flashed yet. Once connected to the “AtomVM-ESP32” network that is created you can access an alisp console at 192.168.4.1 on port 2323, or connect to http port 8080 to change the network to station mode and connect to a wifi network, where the arepl console will be available on port 2323 on the devices acquired IP address. We have determined the cause of the problem, but it has not been fixed in this release.In this release SPI, I2C, and UART peripheral configurations have been changed, for details consult the documentation for these modules in the
eavmlib
documentation. There is now an ESP32 API for allowing coexistence of native and Erlang I2C drivers, for example, allowing the use of the nativeatomvm_ssd1306
Display driver, with a pure erlang driver for the SHT3x temperature sensor. GPIO interrupt (currently only supported on ESP32 and STM32 platforms) messages can now be sent to a designated receiver usinggpio:set_int/4
. Support forlists:split/2
has also been added. ESP32 platform now supports retrieving the device’s e-fuse MAC address withesp:get_default_mac/0
.AtomVM now uses UTF-8 encoding for atoms when using
erlang:term_to_binary/1
, in conformance with OTP-26, andbinary_to_atom/1
andatom_to_binary/1
now default to utf8. Support has been added for utf8 encoding to*_to_atom
andatom_to_*
functions.We have made improvements to the rp2040 platform that should make development workflows much smoother. The device will now accept re-flashing a new application using the
atomvm_rebar3_plugin
pico_flash
task after the application has exited. Previously the device would be unresponsive after exiting. There is also a default 20 second timeout, which the device will wait for a USB console connection to be established, before running the application. Previously our default build would start the application immediately, giving the user no time to connect to be able to see the output ofhello_world
before the application exited, and the device became unresponsive.The port call tuple format has been changed to the same format as gen_server, so cast support can be added. This change means older versions of
atomvmlib
will not work, libraries from latest version must be used. Check the Update Instructions for other breaking changes for both BEAM application developers, as well as for contributors, and driver developers using nifs or ports.Under the hood enhancements feature a new atom table, which uses less memory, and has improved performance.
Several memory related bugs have been fixed. A random number generation bug has been fixed on ESP32 and RPi2040, as well as a bug shared by both platforms that would cause invalid GPIO pull directions to be silently set to
floating
without an error.For the full set of bug fixes, changes and additions since the v0.6.0-alpha.2 release consult the Changelog, and check the Updating Instructions.
Download images and binaries are available for most platforms, except STM32 (and some generic_unix hosts for this release due to specific Mbed-TLS requirements) are available from AtomVM Releases on GitHub. STM32 users as well as anyone needing to build a generic_unix port for a device without release binaries should consult the Build Instructions.
The git repository and tarballs of the AtomVM source release for all platforms can be found on our GitHub AtomVM page.
Documentation for the v0.6.0-beta.1 pre-release of the AtomVM virtual machine, including a Getting Started Guide, can be found at the AtomVM Documentation page.
As always, tools, drivers, and modules are available on the GitHub AtomVM Project page.
Many thanks go to Davide Bettio, for creating such a fine work of software, as well as the contributors and testers who have helped make this release possible.
The AtomVM team
-
AtomVM `master` branch renamed
2024/02/22 Recent updates to the name of the
master
branch.Earlier this month the name of the AtomVM
master
branch was renamed tomain
. If you have previously made a local clone of the repository, and would like to keep up to date with changes to themain
branch, there are a fewgit
commands that will rename your local copy and update the git configuration to track themain
AtomVM branch on GitHub.From inside your local clone of AtomVM:
shell$ git branch -m master main shell$ git fetch origin shell$ git branch -u origin/main main shell$ git remote set-head origin -a
At this point you now have a local clone that will stay up to date with changes in the upstream AtomVM
main
branch.We have also recently created the
release-0.6
branch, which should be used if you wish to contribute any bug fixes. If you do find a bug, please open an issue on GitHub.If you encounter a feature you think we are lacking, please open an issue for that too. Any contributions of new features should be made on the
main
branch.The AtomVM team
-
Previous Announcements
2023/12/10 Announcing AtomVM v0.6.0-alpha.2 (Pre-release)
This pre-release has a build dependency change from OpenSSL to one on Mbed-TLS to provide cryptographic functions for the generic_unix platform.
Numerous bugs have been fixed since the last release including where guards would raise exceptions instead of just being false, precision of integers used with timers which could yield to halts and wait times smaller than expected, and big endian CPUs are working again.
New features include the introduction of OTP socket interface support, support for
net:getaddrinfo/1,2
, minimal OTPssl
interface support,crypto:strong_rand_bytes/1
using Mbed-TLS on generic_unix, ESP32 and RP2040 platforms, support forcrypto:one_time/4,5
on Unix and Pico as well as forcrypto:hash/2
on Pico. Improvements for the STM32 platform include complete device configuration without the need to edit hardcoded values in the source files, complete GPIO driver support, and improved performance by enabling flash cache and i-cache.For the full set of bug fixes, changes and additions consult the Changelog.
Download images and binaries are available for most platforms, except STM32 (and some generic_unix hosts for this release due to specific Mbed-TLS requirements) are available from AtomVM Releases on GitHub. STM32 users as well as anyone needing to build a generic_unix port for a device without release binaries should consult the Build Instructions.
The git repository and tarballs of the AtomVM source release for all platforms can be found on our GitHub AtomVM page.
Documentation for the v0.6.0-alpha.2 pre-release of the AtomVM virtual machine, including a Getting Started Guide, can be found at the AtomVM Documentation page.
As always, tools, drivers, and modules are available on the GitHub AtomVM Project page.
Many thanks go to Davide Bettio, for creating such a fine work of software, as well as the contributors and testers who have helped make this release possible.
The AtomVM team
2023/10/09 Announcing AtomVM v0.6.0-alpha.1 (Pre-release)
This is a follow up to the recent v0.6.0-alpha.0 release that fixes some bugs and adds a few new features.
The ESP32 port gains support for ULP wakeup, and expands crypto support. Basic wifi support has been added for the RPi Pico W. There is now the ability to select from heap growth strategies as a fine-tuning option to
spawn_opt/2,4
. Several platforms now have the ability to set the system clock withatomvm:posix_clock_settime/2
. A few more standard Erlang functions have been added to the core libraries as well. For a complete list of all the changes consult the Changelog.Download images and binaries are available for most platforms (for now stm32 ports must be build locally) are available from AtomVM Releases on GitHub.
The git repository and tarballs of the AtomVM source release for all platforms can be found on our GitHub AtomVM page.
Documentation for the v0.6.0-alpha.1 pre-release of the AtomVM virtual machine, including a Getting Started Guide, can be found at the AtomVM Documentation page.
We have a growing collection of tools, drivers, and modules available on the GitHub AtomVM Project page.
Many thanks go to Davide Bettio, for creating such a fine work of software, as well as the contributors and testers who have helped make this release possible.
The AtomVM team
2023/09/01 Announcing AtomVM v0.6.0-alpha.0 (Pre-release)
After many months of work, we are happy to announce a pre-release of v0.6.0-alpha.0 of the AtomVM virtual machine, a lightweight implementation of the BEAM for small and cheap micro-controllers!
This pre-view contains many improvements and bug fixes that the AtomVM team has been working on, including SMP support on all multi-core platforms, support for the ESP32-S3, ESP32-C3, and ESP32-S2 chips, and the addition of a very basic rp2040 (a.k.a. Raspberry Pi Pico) port, as well as an emscripten port using nodejs with Wasm to run AtomVM in the browser. See the Changelog for all the improvements, bug fixes, and breaking changes since the 0.5.0 release.
Download images for the ESP32 family are available on the AtomVM Releases GitHub page. Other platforms should consult the Build Instructions for the v0.6.0-alpha.0 release.
The git repository and tarballs of the AtomVM source release for all platforms can be found on our GitHub AtomVM page.
Documentation for the v0.6.0-alpha.0 pre-release of the AtomVM virtual machine, including a Getting Started Guide, can be found at the AtomVM Documentation page.
We have a growing collection of tools, drivers, and modules available on the GitHub AtomVM Project page.
Many thanks go to Davide Bettio, for creating such a fine work of software, as well as the contributors and testers who have helped make this release possible.
The AtomVM team
2022/04/05 AtomVM Example Programs
We have extracted our example programs into a self-contained and growing github repo with minimal dependencies. For example, if you have flashed the AtomVM image to an ESP32 device, you can simply use rebar3 to build and flash your applications, making the compile/flash/debug cycle you experience on embedded devices fairly painless.
Please note that at this stage, support for building Elixir programs is quite far behind that of Erlang, so best to stick with Erlang until further notice.
© 2024 atomvm.net
•
Theme Moonwalk