aboutsummaryrefslogtreecommitdiff
path: root/book/ru/src/by-example/new.md
blob: fcf523701a32a4fd9b33d59b626aec77e9d72ad3 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# Создание нового проекта

Теперь, когда Вы изучили основные возможности фреймворка RTIC, Вы можете
попробовать его использовать на Вашем оборудовании следуя этим инструкциям.

1. Создайте экземпляр из шаблона [`cortex-m-quickstart`].

[`cortex-m-quickstart`]: https://github.com/rust-embedded/cortex-m-quickstart#cortex-m-quickstart

``` console
$ # например используя `cargo-generate`
$ cargo generate \
    --git https://github.com/rust-embedded/cortex-m-quickstart \
    --name app

$ # следуйте остальным инструкциям
```

2. Добавьте крейт доступа к периферии (PAC), сгенерированный с помощью[`svd2rust`]
   **v0.14.x**, или крейт отладочной платы, у которой в зависимостях один из таких PAC'ов.
   Убедитесь, что опция `rt` крейта включена.

[`svd2rust`]: https://crates.io/crates/svd2rust

В этом примере я буду использовать крейт устройства [`lm3s6965`].
Эта библиотека не имеет Cargo-опции `rt`; эта опция всегда включена.

[`lm3s6965`]: https://crates.io/crates/lm3s6965

Этот крейт устройства предоставляет линковочный скрипт с макетом памяти
целевого устройства, поэтому `memory.x` и `build.rs` нужно удалить.

``` console
$ cargo add lm3s6965 --vers 0.1.3

$ rm memory.x build.rs
```

3. Добавьте крейт `cortex-m-rtic` как зависимость.

``` console
$ cargo add cortex-m-rtic --allow-prerelease
```

4. Напишите свою RTIC программу.

Здесь я буду использовать пример `init` из крейта `cortex-m-rtic`.

Примеры находтся в папке `examples`, а содержание `init.rs` показано здесь:

``` console
{{#include ../../../../examples/init.rs}}
```

Пример `init` использует устройство `lm3s6965`. Не забудьте настроить аргумент `device`
в атрибуте макроса app так, чтобы он соответствовал пути к PAC-крейту, если он отличается,
а также добавить перифериб и другие аргументы если необходимо.
Несмотря на то, что в программе могут использоваться псевдонимы типов,
здесь необходимо указать полный путь (из корня крейта). Для многих устройств,
есть общий подход в крейтах реализации HAL (с псевдонимом `hal`) и крейтах поддержки
отладочных плат реекспортиорвать PAC как `pac`, что приводит нас к образцу, аналогичному
приведенному ниже:

```rust
use abcd123_hal as hal;
//...

#[rtic::app(device = crate::hal::pac, peripherals = true, monotonic = rtic::cyccnt::CYCCNT)]
mod app { /*...*/ }
```

Пример `init` также зависит от крейта `panic-semihosting`:

``` console
$ cargo add panic-semihosting
```

5. Соберите его, загрузите в микроконтроллер и запустите.

``` console
$ # ПРИМЕЧАНИЕ: Я раскомментировал опцию `runner` в `.cargo/config`
$ cargo run
{{#include ../../../../ci/expected/init.run}}
```