Rust — это язык системного программирования, предназначенный для обеспечения безопасности, скорости и параллелизма. Rust имеет множество функций времени и безопасности во время компиляции, чтобы избежать сбоев данных и общих ошибок, все с минимальными издержками до нуля. Язык сфокусирован на безопасной работе с памятью, обеспечивает автоматическое управление памятью и предоставляет средства для достижения высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора и runtime. Автоматическое управление памятью в Rust избавляет разработчика от манипулирования указателями и защищает от проблем, возникающих из-за низкоуровневой работы с памятью, таких как обращение к области памяти после её освобождения, разыменование нулевых указателей, выход за границы буфера и т.п. Для распространения библиотек, обеспечения сборки и управления зависимостями проектом развивается пакетный менеджер Cargo, позволяющий получить нужные для программы библиотеки в один клик.

Rustup — установщик Rust и инструмент для управления версиями. Основным способом установки Rust, который используют разработчики, является Rustup — инструмент для установки и управления версиями Rust.  Для загрузки Rustup и установки Rust на Linux, запустите следующее в вашем терминале и следуйте инструкциям (у меня Linux).

curl —proto ‘=https’ —tlsv1.2 -sSf https://sh.rustup.rs | sh

Cargo: Менеджер пакетов и инструмент сборки для Rust. При установке через Rustup, вы получаете последнюю стабильную версию пакетного менеджера и средства сборки Rust, известного, как Cargo. Cargo делает многие вещи:

  • собирает ваш проект с cargo build
  • запускает ваш проект с cargo run
  • тестирует ваш проект с cargo test
  • собирает документацию для вашего проекта с cargo doc
  • публикует библиотеку на crates.io с cargo publish
    Чтобы удостовериться, что Rust и Cargo установлены, вы можете запустить в терминале следующую команду:
  • cargo —version

Cargo — это инструмент, который позволяет указывать необходимые зависимости для проектов на языке Rust и убедиться, что вы получите воспроизводимые сборки.

Для достижения этих целей, Cargo выполняет следующие действия:

  • Создает два файла с некоторой необходимой информацией о проекте.
  • Получает и собирает зависимости вашего проекта.
  • Запускает rustc или другие инструменты сборки со всеми необходимыми параметрами для правильной сборки вашего проекта.
  • Предоставляет все необходимые условия, чтобы работа с проектами на Rust стала проще.

Для тех у кого zsh, добавьте следующие строки в файл zshrc.

Для программирования на Rust хороший редактор VS Code.

Определите платформу кросс-компиляции для необходимого аппратного обеспечения.

  • Использовать thumbv6m-none-eabi для ARM Cortex-M0 and Cortex-M0+
  • Использовать thumbv7m-none-eabi для ARM Cortex-M3
  • Использовать thumbv7em-none-eabi для ARM Cortex-M4 и Cortex-M7 (без FPU )
  • Использовать thumbv7em-none-eabihf для ARM Cortex-M4F и Cortex-M7F (с FPU )

Установите компонент rust-std для вашей аппаратной платформы

$ rustup target add thumbv7em-none-eabihf

Минимально достаточный проект для Cortex M7 (у меня devkit stm32f746g-disco)

Rust экосистема для embedded микроконтроллеров.

Cargo.toml

Синтаксис TOML основан на парах ключ = «значение», [разделах] и # комментариях. Этот файл называется манифестом и содержит в себе все метаданные, которые необходимы Cargo, чтобы скомпилировать ваш проект.

.cargo/config

В этом файле мы обозначаем цель компиляции (аппаратная платформа) , а так же флаги компиляции. Все конфигурационные файлы хранятся в TOML формате (как манифесты), в простом формате ключ-значение, которые хранятся внутри секций (таблиц), а потом будут объединены. Ключи для значений, которые указывают на определенную программу, могут быть в формате абсолютного пути, относительного, а также можно просто указать название программы. Абсолютные пути и название программ используются как есть. Относительные пути используются исходя из родительской директории, в которой расположена директория .cargo, в которой находится конфигурационный файл.

memory.x

Пакет cortex-m-rt требует от нас создать файл «memory.x» в корневом каталоге проекта. В нём указывается распределение адресного пространства микроконтроллера:

.vscode/tasks.json

VS Code содержит понятие “сборки проекта”. Редактор можно настроить таким образом, чтобы сборка Rust-проекта происходила необходимым нам способом.

Добавьте task (задание) в файл tasks.json в директории .vscode в корне вашего проекта:

.vscode/launch.json

В каталоге проекта создаётся  папка .vscode, в которой создаётся файл с конфигурациями отладки launch.json.

src/main.rs

Самая простая программа для микроконтроллера пустой цикл с nop.

С помощью cortex_m_log нам доступен механизм отладки. В пакете предусмотрены следующие пункты назначения для записи: Dummy — пункт назначения noop, который не выполняет запись. Полезный режим Itm — использует Cortex-M Itm для отправки вывода. Обратите внимание, что он доступен только на ARMv7-M и более новых версиях ядра Cortex,  Semihosting — использует Cortex-M Semihosting для отправки вывода.

Необходимые пакеты для VS Code (все кроме C/C++).

Исходники демо проекта на https://github.com/mcuby/rust-embedded-example

Отправить ответ

avatar

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

  Subscribe  
Уведомлять о