{"id":19502010,"url":"https://github.com/atomvm/exatomvm","last_synced_at":"2025-04-25T23:31:17.724Z","repository":{"id":40434741,"uuid":"242749549","full_name":"atomvm/exatomvm","owner":"atomvm","description":"Build Elixir projects for your microcontroller","archived":false,"fork":false,"pushed_at":"2024-12-11T23:30:47.000Z","size":139,"stargazers_count":39,"open_issues_count":13,"forks_count":9,"subscribers_count":6,"default_branch":"main","last_synced_at":"2025-04-04T05:11:19.460Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Elixir","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/atomvm.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-02-24T13:55:23.000Z","updated_at":"2025-04-01T12:36:09.000Z","dependencies_parsed_at":"2023-11-18T22:44:56.183Z","dependency_job_id":"8d54107b-458f-4931-b08f-32d9811b5bf8","html_url":"https://github.com/atomvm/exatomvm","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/atomvm%2Fexatomvm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/atomvm%2Fexatomvm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/atomvm%2Fexatomvm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/atomvm%2Fexatomvm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/atomvm","download_url":"https://codeload.github.com/atomvm/exatomvm/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250912660,"owners_count":21506865,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-10T22:14:50.496Z","updated_at":"2025-04-25T23:31:17.399Z","avatar_url":"https://github.com/atomvm.png","language":"Elixir","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ExAtomVM\n\nExAtomVM provide a collection of [Mix](https://hexdocs.pm/mix/1.13/Mix.html) tasks that  greatly simplify development and deployment of Elixir applications targeted for the AtomVM platform.\n\nThe following operations are supported:\n\n* Packing compiled BEAM files into AVM files for use in AtomVM;\n* Flashing AVM files to micro-controllers (Currently, only ESP32 devices are supported).\n\n\u003e Note.  For information about how to use Mix plugins, see the [Mix](https://hexdocs.pm/mix/1.13/Mix.html) documentation.\n\n## Dependencies\n\nTo use this plugin to build packbeam files, you will need\n\n* [Erlang/OTP](https://erlang.org) 21, 22, or 23\n* [Elixir](https://elixir-lang.org) 1.13 (or higher)\n\nTo flash an ExAtomVM project to an ESP32, you will need:\n\n* An ESP32 development module such as the Espressif DevKit C\n* A USB cable to connect the ESP32 development module to your workstation\n* [esptool](https://github.com/espressif/esptool)\n* (Optional) A serial console program, such as `minicom`\n\nConsult your local package manager for installation of these tools.\n\n## Getting Started\n\nStart by creating a Mix project\n\n    shell$ mix new my_project --module MyProject\n    * creating README.md\n    * creating .formatter.exs\n    * creating .gitignore\n    * creating mix.exs\n    * creating lib\n    * creating lib/my_project.ex\n    * creating test\n    * creating test/test_helper.exs\n    * creating test/my_project_test.exs\n\n    Your Mix project was created successfully.\n    You can use \"mix\" to compile it, test it, and more:\n\n        cd my_project\n        mix test\n\n    Run \"mix help\" for more commands.\n\nEdit the generated `mix.exs` to include the ExAtomVM dependency (`{:exatomvm, git: \"https://github.com/atomvm/ExAtomVM/\"}`), and add a properties list using the `atomvm` key containing a `start` and `flash_offset` entry:\n\n    ## elixir\n    defmodule MyProject.MixProject do\n    use Mix.Project\n\n        def project do\n        [\n            app: :my_project,\n            version: \"0.1.0\",\n            elixir: \"~\u003e 1.13\",\n            start_permanent: Mix.env() == :prod,\n            deps: deps(),\n            atomvm: [\n              start: MyProject,\n              flash_offset: 0x210000\n            ]\n        ]\n        end\n\n        # Run \"mix help compile.app\" to learn about applications.\n        def application do\n        [\n            extra_applications: [:logger]\n        ]\n        end\n\n        # Run \"mix help deps\" to learn about dependencies.\n        defp deps do\n        [\n            {:exatomvm, git: \"https://github.com/atomvm/ExAtomVM/\"}\n            # {:dep_from_hexpm, \"~\u003e 0.3.0\"},\n            # {:dep_from_git, git: \"https://github.com/elixir-lang/my_dep.git\", tag: \"0.1.0\"}\n        ]\n        end\n    end\n\n\u003e Note.  By convention, Mix dependencies are encapsulated in the private `deps` function in the project module (`mix.exs`).\n\nEdit the `my_project.ex` file so that it contains a `start` function:\n\n    ## elixir\n    defmodule MyProject do\n      def start do\n        :ok\n      end\n    end\n\nRun `mix deps.get` to download ExAtomVM into your `deps` directory:\n\n    shell$ mix deps.get\n    * Getting exatomvm (https://github.com/atomvm/ExAtomVM/)\n    remote: Enumerating objects: 150, done.\n    remote: Counting objects: 100% (29/29), done.\n    remote: Compressing objects: 100% (17/17), done.\n    remote: Total 150 (delta 14), reused 19 (delta 10), pack-reused 121\n    origin/HEAD set to master\n\nCreate a directory called `avm_deps` in the top level of your project directory:\n\n    shell$ mkdir avm_deps\n\nDownload a copy of the AtomVM-libs from the AtomVM Gitbub [release repository](https://github.com/atomvm/AtomVM/releases/).  Extract the contents of this archive and copy the enclosed AVM files into your `avm_deps` directory.\n\nAfterwards, you should see something like:\n\n    shell$ ls -l avm_deps\n    total 264\n    -rw-rw-r--  1 frege  wheel  11380 May  8 16:32 alisp.avm\n    -rw-rw-r--  1 frege  wheel  48956 May  8 16:32 atomvmlib.avm\n    -rw-rw-r--  1 frege  wheel  23540 May  8 16:32 eavmlib.avm\n    -rw-rw-r--  1 frege  wheel  25456 May  8 16:32 estdlib.avm\n    -rw-rw-r--  1 frege  wheel   1052 May  8 16:32 etest.avm\n    -rw-rw-r--  1 frege  wheel  16356 May  8 16:32 exavmlib.avm\n\nRun the `atomvm.packbeam` Mix task to create a packbeam file:\n\n    shell$ mix atomvm.packbeam\n    ==\u003e exatomvm\n    Compiling 5 files (.ex)\n    Generated exatomvm app\n    ==\u003e my_project\n    Compiling 1 file (.ex)\n    Generated my_project app\n\nThe `my_project.avm` file should be created in the top level directory of your project:\n\n    shell$ ls -l my_project.avm\n    -rw-rw-r--  1 frege  wheel  144148 May  8 16:34 my_project.avm\n\nYou can optionally use the [AtomVM Packbeam](https://github.com/atomvm/atomvm_packbeam) tool to view the contents of this AVM file.\n\n    shell$ packbeam list my_project.avm\n    Elixir.MyProject.beam * [500]\n    Elixir.Mix.Tasks.Atomvm.Check.beam [5684]\n    Elixir.Mix.Tasks.Atomvm.Packbeam.beam [5188]\n    Elixir.ExAtomVM.PackBEAM.beam [3412]\n    Elixir.ExAtomVM.beam [504]\n    Elixir.Mix.Tasks.Atomvm.Esp32.Flash.beam [2048]\n    atomvm.beam [412]\n    console.beam [840]\n    esp.beam [912]\n    gpio.beam [1216]\n    ...\n\nTo flash your project to an ESP32 device, use the `atomvm.esp32.flash` mix task.  You can optionally specify the USB device using the `--port` option:`\n\n    shell% mix atomvm.esp32.flash --port /dev/tty.usbserial\n    Generated my_project app\n    esptool.py v3.2-dev\n    Serial port /dev/tty.usbserial\n    Connecting.........\n    Chip is ESP32-D0WDQ6-V3 (revision 3)\n    Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None\n    Crystal is 40MHz\n    MAC: 30:c6:f7:2a:54:7c\n    Uploading stub...\n    Running stub...\n    Stub running...\n    Configuring flash size...\n    Auto-detected Flash size: 4MB\n    Flash will be erased from 0x00210000 to 0x00233fff...\n    Writing at 0x00210000... (11 %)\n    Writing at 0x00214000... (22 %)\n    Writing at 0x00218000... (33 %)\n    Writing at 0x0021c000... (44 %)\n    Writing at 0x00220000... (55 %)\n    Writing at 0x00224000... (66 %)\n    Writing at 0x00228000... (77 %)\n    Writing at 0x0022c000... (88 %)\n    Writing at 0x00230000... (100 %)\n    Wrote 147456 bytes at 0x00210000 in 13.0 seconds (91.0 kbit/s)...\n    Hash of data verified.\n\n    Leaving...\n    Hard resetting via RTS pin...\n\n\n(Optional) To view the console output of your application, use a serial console program, such as `minicom`:\n\n    shell$ minicom -D /dev/tty.usbserial\n    rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)\n    configsip: 0, SPIWP:0xee\n    clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00\n    mode:DIO, clock div:2\n    load:0x3fff0018,len:4\n    load:0x3fff001c,len:6816\n    ho 0 tail 12 room 4\n    load:0x40078000,len:12108\n    load:0x40080400,len:6664\n    entry 0x40080774\n    I (76) boot: Chip Revision: 3\n    I (77) boot_comm: chip revision: 3, min. bootloader chip revision: 0\n    I (42) boot: ESP-IDF v3.3.4-dirty 2nd stage bootloader\n    I (42) boot: compile time 14:28:14\n    I (42) boot: Enabling RNG early entropy source...\n    I (47) boot: SPI Speed      : 40MHz\n    I (51) boot: SPI Mode       : DIO\n    I (55) boot: SPI Flash Size : 4MB\n    I (59) boot: Partition Table:\n    I (63) boot: ## Label            Usage          Type ST Offset   Length\n    I (70) boot:  0 nvs              WiFi data        01 02 00009000 00006000\n    I (77) boot:  1 phy_init         RF data          01 01 0000f000 00001000\n    I (85) boot:  2 factory          factory app      00 00 00010000 001c0000\n    I (92) boot:  3 lib.avm          RF data          01 01 001d0000 00040000\n    I (100) boot:  4 main.avm         RF data          01 01 00210000 00100000\n    I (107) boot: End of partition table\n    I (112) boot_comm: chip revision: 3, min. application chip revision: 0\n    I (119) esp_image: segment 0: paddr=0x00010020 vaddr=0x3f400020 size=0x2cb14 (183060) map\n    I (194) esp_image: segment 1: paddr=0x0003cb3c vaddr=0x3ffb0000 size=0x034d4 ( 13524) load\n    I (200) esp_image: segment 2: paddr=0x00040018 vaddr=0x400d0018 size=0xd38d8 (866520) map\n    I (516) esp_image: segment 3: paddr=0x001138f8 vaddr=0x3ffb34d4 size=0x01524 (  5412) load\n    I (518) esp_image: segment 4: paddr=0x00114e24 vaddr=0x40080000 size=0x00400 (  1024) load\n    I (523) esp_image: segment 5: paddr=0x0011522c vaddr=0x40080400 size=0x17848 ( 96328) load\n    I (573) esp_image: segment 6: paddr=0x0012ca7c vaddr=0x400c0000 size=0x00064 (   100) load\n    I (573) esp_image: segment 7: paddr=0x0012cae8 vaddr=0x50000000 size=0x00804 (  2052) load\n    I (595) boot: Loaded app from partition at offset 0x10000\n    I (595) boot: Disabling RNG early entropy source...\n    I (596) cpu_start: Pro cpu up.\n    I (599) cpu_start: Application information:\n    I (604) cpu_start: Project name:     atomvvm-esp32\n    I (610) cpu_start: App version:      e34e0ed-dirty\n    I (615) cpu_start: Compile time:     Apr  3 2022 14:28:20\n    I (621) cpu_start: ELF file SHA256:  30205fd9063bc42e...\n    I (627) cpu_start: ESP-IDF:          v3.3.4-dirty\n    I (633) cpu_start: Starting app cpu, entry point is 0x40081410\n    I (0) cpu_start: App cpu up.\n    I (643) heap_init: Initializing. RAM available for dynamic allocation:\n    I (650) heap_init: At 3FFAE6E0 len 00001920 (6 KiB): DRAM\n    I (656) heap_init: At 3FFBAC98 len 00025368 (148 KiB): DRAM\n    I (662) heap_init: At 3FFE0440 len 00003AE0 (14 KiB): D/IRAM\n    I (669) heap_init: At 3FFE4350 len 0001BCB0 (111 KiB): D/IRAM\n    I (675) heap_init: At 40097C48 len 000083B8 (32 KiB): IRAM\n    I (681) cpu_start: Pro cpu start user code\n    I (28) cpu_start: Starting scheduler on PRO CPU.\n    I (0) cpu_start: Starting scheduler on APP CPU.\n\n        ###########################################################\n\n           ###    ########  #######  ##     ## ##     ## ##     ##\n          ## ##      ##    ##     ## ###   ### ##     ## ###   ###\n         ##   ##     ##    ##     ## #### #### ##     ## #### ####\n        ##     ##    ##    ##     ## ## ### ## ##     ## ## ### ##\n        #########    ##    ##     ## ##     ##  ##   ##  ##     ##\n        ##     ##    ##    ##     ## ##     ##   ## ##   ##     ##\n        ##     ##    ##     #######  ##     ##    ###    ##     ##\n\n        ###########################################################\n\n    I (130) AtomVM: Starting AtomVM revision 0.5.0\n    I (130) AtomVM: Loaded BEAM partition main.avm at address 0x210000 (size=1048576 bytes)\n    I (160) atomvm_adc: eFuse Two Point: NOT supported\n    I (160) atomvm_adc: eFuse Vref: Supported\n    I (160) AtomVM: Found startup beam Elixir.MyProject.beam\n    I (160) AtomVM: Loaded BEAM partition lib.avm at address 0x1d0000 (size=262144 bytes)\n    I (170) AtomVM: Starting Elixir.MyProject.beam...\n    ---\n    AtomVM finished with return value: ok\n    I (180) AtomVM: AtomVM application terminated.  Going to sleep forever ...\n\n## Reference\n\n### `mix.exs` Configuration\n\nTo use this Mix plugin, add `ExAtomVM` to the dependencies list in your `mix.exs` project file.\n\n    def project do [\n        ...\n        deps: [\n          ...\n          {:exatomvm, git: \"https://github.com/atomvm/ExAtomVM/\"},\n          ...\n        ],\n        ...\n        atomvm: [\n            start: HelloWorld,\n            flash_offset: 0x210000\n        ]\n      ]\n    end\n\nIn addition, you may specify AtomVM-specific configuration using the `atomvm` tag.  The fields in this properties list are described in more detail below.\n\n### The `atomvm.packbeam` task\n\nThe `atomvm.packbeam` task is used to bundle your application into an AVM file that can be flashed to a micro-controller and executed by the AtomVM virtual machine.\n\nThe `atomvm` properties list in the Mix project file (`mix.exs`) may contain the following entries related to this task:\n\n| Key | Type | Default | Value |\n|-----|------|----------|-------|\n| `start` | Module | - | The name of the module containing the `start/0` entrypoint function |\n\nProperties in the `mix.exs` file may be over-ridden on the command line using long-style flags (prefixed by `--`) by the same name as the properties key.  For example, you can use the `--start` option to specify or override the `start` property in the above table.\n\nExample:\n\n    shell$ mix atomvm.packbeam --start MyProject\n    ==\u003e exatomvm\n    Compiling 5 files (.ex)\n    Generated exatomvm app\n    ==\u003e my_project\n    Compiling 1 file (.ex)\n    Generated my_project app\n\n### The `atomvm.esp32.flash` task\n\nThe `atomvm.esp32.flash` task is used to flash your application to a micro-controller and executed by the AtomVM virtual machine.\n\n\u003e Note.  Before running this task, you must flash the AtomVM virtual machine to the device.  See the [Getting Started](https://www.atomvm.net/doc/master/getting-started-guide.html) section if the [AtomVM documentation](https://www.atomvm.net/doc/master/) for information about how to flash the AtomVM image to a device.\n\nThe `atomvm` properties list in the Mix project file (`mix.exs`) may contain the following entries related to this task:\n\n| Key | Type | Default | Value |\n|-----|------|----------|-------|\n| `flash_offset` | Address in hexademical format | 0x210000 | The name of the module containing the `start/0` entrypoint function |\n| `chip` | `esp32` | `esp32` | Chip type |\n| `port` | device path | `/dev/ttyUSB0` | Port to which device is connected on host computer |\n| `baud` | integer | 115200 | BAUD rate used when flashing to device |\n\nProperties in the `mix.exs` file may be over-ridden on the command line using long-style flags (prefixed by `--`) by the same name as the properties key.  For example, you can use the `--port` option to specify or override the `port` property in the above table.\n\nIf the `IDF_PATH` environment variable is set, then the `esptool.py` from the [IDF SDK](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/index.html) installation will be used to flash the application to the ESP32 device.  Otherwise, this plugin will attempt to use the `esptool.py` program from the user's `PATH` environment variable.  The [ESP Tool](https://github.com/espressif/esptool) Python3 application can be installed from source or via many popular package managers.  Consult your local OS documentation for more information.\n\nExample:\n\n    shell$ mix atomvm.esp32.flash --port /dev/tty.usbserial\n    Generated my_project app\n    esptool.py v3.2-dev\n    Serial port /dev/tty.usbserial\n    Connecting.........\n    Chip is ESP32-D0WDQ6-V3 (revision 3)\n    Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None\n    Crystal is 40MHz\n    MAC: 30:c6:f7:2a:54:7c\n    Uploading stub...\n    Running stub...\n    Stub running...\n    Configuring flash size...\n    Auto-detected Flash size: 4MB\n    Flash will be erased from 0x00210000 to 0x00233fff...\n    Writing at 0x00210000... (11 %)\n    Writing at 0x00214000... (22 %)\n    Writing at 0x00218000... (33 %)\n    Writing at 0x0021c000... (44 %)\n    Writing at 0x00220000... (55 %)\n    Writing at 0x00224000... (66 %)\n    Writing at 0x00228000... (77 %)\n    Writing at 0x0022c000... (88 %)\n    Writing at 0x00230000... (100 %)\n    Wrote 147456 bytes at 0x00210000 in 13.0 seconds (91.0 kbit/s)...\n    Hash of data verified.\n\n    Leaving...\n    Hard resetting via RTS pin...\n\n### The `atomvm.stm32.flash` task\n\nThe `atomvm.stm32.flash` task is used to flash your application to a micro-controller and executed by the AtomVM virtual machine.\n\n\u003e Note.  Before running this task, you must flash the AtomVM virtual machine to the device.  See the [Getting Started](https://www.atomvm.net/doc/master/getting-started-guide.html) section if the [AtomVM documentation](https://www.atomvm.net/doc/master/) for information about how to flash the AtomVM image to a device.\n\nThe `atomvm` properties list in the Mix project file (`mix.exs`) may contain the following entries related to this task:\n\n| Key | Type | Default | Value |\n|-----|------|----------|-------|\n| `stflash_path` | string | undefined | The full path to the `st-flash` utility, if not in users PATH |\n| `flash_offset` | Address in hexademical format | 0x8080000 | The beginning flash address to write to  |\n\nProperties in the `mix.exs` file may be over-ridden on the command line using long-style flags (prefixed by `--`) by the same name as the properties key.  For example, you can use the `--stflash_path` option to specify or override the `stflash_path` property in the above table.\n\nExample:\n\n    shell$ mix atomvm.stm32.flash\n    warning: GPIO.digital_write/2 is undefined (module GPIO is not available or is yet to be defined)\n      lib/Blinky.ex:34\n\n    warning: GPIO.set_pin_mode/2 is undefined (module GPIO is not available or is yet to be defined)\n      lib/Blinky.ex:58\n\n    warning: GPIO.set_pin_mode/2 is undefined (module GPIO is not available or is yet to be defined)\n      lib/Blinky.ex:59\n    \n    warning: GPIO.set_pin_mode/2 is undefined (module GPIO is not available or is yet to be defined)\n      lib/Blinky.ex:65\n\n    warning: :atomvm.platform/0 is undefined (module :atomvm is not available or is yet to be defined)\n      lib/Blinky.ex:48\n\n    warning: :atomvm.platform/0 is undefined (module :atomvm is not available or is yet to be defined)\n      lib/Blinky.ex:57\n\n    st-flash 1.7.0\n    2023-10-31T10:47:20 INFO common.c: F42x/F43x: 256 KiB SRAM, 2048 KiB flash in at least 16 KiB pages.\n    file Blinky.avm md5 checksum: 3dca925a9616d4d65dc9d87fbf19af, stlink checksum: 0x00767ad5\n    2023-10-31T10:47:20 INFO common.c: Attempting to write 156172 (0x2620c) bytes to stm32 address: 134742016 (0x8080000)\n    EraseFlash - Sector:0x8 Size:0x20000 2023-10-31T10:47:22 INFO common.c: Flash page at addr: 0x08080000 erased\n    EraseFlash - Sector:0x9 Size:0x20000 2023-10-31T10:47:24 INFO common.c: Flash page at addr: 0x080a0000 erased\n    2023-10-31T10:47:24 INFO common.c: Finished erasing 2 pages of 131072 (0x20000) bytes\n    2023-10-31T10:47:24 INFO common.c: Starting Flash write for F2/F4/F7/L4\n    2023-10-31T10:47:24 INFO flash_loader.c: Successfully loaded flash loader in sram\n    2023-10-31T10:47:24 INFO flash_loader.c: Clear DFSR\n    2023-10-31T10:47:24 INFO common.c: enabling 32-bit flash writes\n    2023-10-31T10:47:26 INFO common.c: Starting verification of write complete\n    2023-10-31T10:47:27 INFO common.c: Flash written and verified! jolly good!\n\n### The `atomvm.pico.flash` task\n\nThe `atomvm.pico.flash` task is used to flash your application to a micro-controller and executed by the AtomVM virtual machine.\n\n\u003e Note.  Before running this task, you must flash the AtomVM virtual machine to the device.  See the [Getting Started](https://www.atomvm.net/doc/master/getting-started-guide.html) section if the [AtomVM documentation](https://www.atomvm.net/doc/master/) for information about how to flash the AtomVM image to a device.\n\nThe `atomvm` properties list in the Mix project file (`mix.exs`) may contain the following entries related to this task:\n\n| Key | Type | Default | Value |\n|-----|------|----------|-------|\n| `pico_path` | string | \"/run/media/${USER}/RPI-RP2\" on linux; \"/Volumes/RPI-RP2\" on darwin (Mac) | The full path to the pico mount point |\n| `pico_reset` | string |\"/dev/ttyACM*\"  on linux; \"/dev/cu.usbmodem14*\" on darwin | The full path to the pico device to reset if required |\n| `picotool` | string | undefined | The full path to picotool executable (currently optional) |\n\nProperties in the `mix.exs` file may be over-ridden on the command line using long-style flags (prefixed by `--`) by the same name as the properties key.  For example, you can use the `--pico_path` option to specify or override the `pico_path` property in the above table.\n\n### The `atomvm.uf2create` task\n\nThe `atomvm.uf2create` is use to create uf2 files appropriate for pico devices from a packed .avm application file, if the packed file does not exist the `atomvm.packbeam` task will be used to create the file (after compilation in necessary). Normally using this task manually is not required, it is called automatically by the `atomvm.pico.flash` if a uf2 file has not already been created.\n\nThe `atomvm` properties list in the Mix project file (`mix.exs`) may contain the following entries related to this task:\n\n| Key | Type | Default | Value |\n|-----|------|----------|-------|\n| `app_start` | Address in hexademical format | 0x10180000 | The flash address to place the application |\n\nProperties in the `mix.exs` file may be over-ridden on the command line using long-style flags (prefixed by `--`) by the same name as the properties key.  For example, you can use the `--app_start` option to specify or override the `app_start` property in the above table.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fatomvm%2Fexatomvm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fatomvm%2Fexatomvm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fatomvm%2Fexatomvm/lists"}