Привет, мир!

Пришло время написать код на Rust для crabik! Для начала создайте новый проект из шаблона, запустите в терминале:

cargo generate --git https://github.com/CrabikBoards/crabik-app-template.git --name hello-crabik

Начнем с открытия ранее созданного проекта, откройте его в VS Code (File > Open Folder в меню VS Code), далее откройте файл main.rs в папке src. В файле вы увидите следующий код:

// Файл с основным кодом программы

// Отключение стандартной "точки старта" от компилятора
#![no_main]
// Отключение модуля std
#![no_std]

// Импорт модуля для платы crabik
use crabik_board::{
    // Модуль содержащий hal для nrf52810
    hal::{
        // Модуль с ранообразными обьявлениями для удобной работы
        prelude::*,
        // Модуль для настройки тактирования микроконтроллера
        Clocks,
    },
    pac::Peripherals,
    CrabikPins,
    Logger,
};

// Импорт модуля для работы с протоколом RTT
use rtt_target::*;

// Макрос предоставляющий "точку старта"
#[cortex_m_rt::entry]
fn main() -> ! {

    // Инициализация канала RTT
    rtt_init_print!(NoBlockSkip, 16384);

    // Получение всей периферии микроконтроллера
    let periph = Peripherals::take().expect("Не удалось получить доступ к периферии микроконтроллера");

    // Получение всей периферии ядра Cortex-M
    let core_periph = cortex_m::Peripherals::take().expect("Не удалось получить доступ к периферии ядра");

    // Установка логгера (обертки поверх RTT)
    log::set_logger(&Logger).expect("Не удалось установить логгер");

    // Установка фильтра логов по умолчанию на Info (Информационные сообщения)
    log::set_max_level(log::LevelFilter::Info);

    // Передача переферии для настройки тактирования микроконтроллера
    let clocks = Clocks::new(periph.CLOCK);

    // Использовать внешний источник (кварц) для тактирования микроконтроллера
    let clocks = clocks.enable_ext_hfosc();

    // Использовать внутренний источник (кварц) для тактирования Rtc (часов)
    let clocks = clocks.set_lfclk_src_rc();

    // Здесь пишем наш код

    // Завершение программы (просто бесконечный цикл)
    crabik_board::exit();
}

Как видите, код имеет много комментариев и можно поверхностно понять что делает каждая строка. В приведенном выше коде происходит получение всей периферии, настройка логирования и настройка тактирования микроконтроллера.

Добавьте после комментария // Здесь пишем наш код, строчку rprintln!("Привет, мир!");.

В итоге, у вас должен получится следующий код:

// Файл с основным кодом программы

// Отключение стандартной "точки старта" от компилятора
#![no_main]
// Отключение модуля std
#![no_std]

// Импорт модуля для платы crabik
use crabik_board::{
    // Модуль содержащий hal для nrf52810
    hal::{
        // Модуль с ранообразными обьявлениями для удобной работы
        prelude::*,
        // Модуль для настройки тактирования микроконтроллера
        Clocks,
    },
    pac::Peripherals,
    CrabikPins,
    Logger,
};

// Импорт модуля для работы с протоколом RTT
use rtt_target::*;

// Макрос предоставляющий "точку старта"
#[cortex_m_rt::entry]
fn main() -> ! {

    // Инициализация канала RTT
    rtt_init_print!(NoBlockSkip, 16384);

    // Получение всей периферии микроконтроллера
    let periph = Peripherals::take().expect("Не удалось получить доступ к периферии микроконтроллера");

    // Получение всей периферии ядра Cortex-M
    let core_periph = cortex_m::Peripherals::take().expect("Не удалось получить доступ к периферии ядра");

    // Установка логгера (обертки поверх RTT)
    log::set_logger(&Logger).expect("Не удалось установить логгер");

    // Установка фильтра логов по умолчанию на Info (Информационные сообщения)
    log::set_max_level(log::LevelFilter::Info);

    // Передача переферии для настройки тактирования микроконтроллера
    let clocks = Clocks::new(periph.CLOCK);

    // Использовать внешний источник (кварц) для тактирования микроконтроллера
    let clocks = clocks.enable_ext_hfosc();

    // Использовать внутренний источник (кварц) для тактирования Rtc (часов)
    let clocks = clocks.set_lfclk_src_rc();

    rprintln!("Привет, мир!");

    // Завершение программы (просто бесконечный цикл)
    crabik_board::exit();
}

В шаблоне проекта уже содержатся настройки для простого запуска программы. Вам нужно только подключить плату к компьютеру и запустить в терминале:

cargo run

Но для удобной и быстрой разработки рекомендуется использовать для запуска команду:

cargo embed --release

В терминале вы увидите текст: Привет, мир!.