mirror of
https://github.com/rtic-rs/rtic.git
synced 2025-01-23 17:49:04 +01:00
(ru) changes according review
This commit is contained in:
parent
5ef1f2088a
commit
0fcc31f58e
7 changed files with 21 additions and 21 deletions
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
[Введение](./preface.md)
|
[Введение](./preface.md)
|
||||||
- [RTFM в примерах](./by-example.md)
|
- [RTFM в примерах](./by-example.md)
|
||||||
- [Атрибут `app](./by-example/app.md)
|
- [Атрибут `app`](./by-example/app.md)
|
||||||
- [Ресурсы](./by-example/resources.md)
|
- [Ресурсы](./by-example/resources.md)
|
||||||
- [Задачи](./by-example/tasks.md)
|
- [Задачи](./by-example/tasks.md)
|
||||||
- [Очередь таймера](./by-example/timer-queue.md)
|
- [Очередь таймера](./by-example/timer-queue.md)
|
||||||
|
|
|
@ -5,12 +5,12 @@
|
||||||
|
|
||||||
Все примеры в этой книге можно найти в [репозитории] проекта на GitHub,
|
Все примеры в этой книге можно найти в [репозитории] проекта на GitHub,
|
||||||
и большинство примеров можно запустить на эмуляторе QEMU, поэтому никакого
|
и большинство примеров можно запустить на эмуляторе QEMU, поэтому никакого
|
||||||
специальног оборудования не требуется to follow along.
|
специального оборудования не требуется их выполнять.
|
||||||
|
|
||||||
[репозитории]: https://github.com/japaric/cortex-m-rtfm
|
[репозитории]: https://github.com/japaric/cortex-m-rtfm
|
||||||
|
|
||||||
Чтобы запустить примеры на Вашем ноутбуке / PC, Вам нужна программа
|
Чтобы запустить примеры на Вашем ноутбуке / ПК, Вам нужна программа
|
||||||
`qemu-system-arm`. Посмотрите [the embedded Rust book] на предмет инструкций
|
`qemu-system-arm`. Инструкции по настройке окружения для разработки
|
||||||
как настроить окружение для разработки встраиваемых устройств, в том числе QEMU.
|
встраиваемых устройств, в том числе QEMU, Вы можете найти в [the embedded Rust book].
|
||||||
|
|
||||||
[the embedded Rust book]: https://rust-embedded.github.io/book/intro/install.html
|
[the embedded Rust book]: https://rust-embedded.github.io/book/intro/install.html
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
|
|
||||||
В примере ниже два обработчика прерываний имеют доступ к одному и тому же ресурсу.
|
В примере ниже два обработчика прерываний имеют доступ к одному и тому же ресурсу.
|
||||||
Никакого `Mutex` в этом случае не требуется, потому что оба обработчика запускаются
|
Никакого `Mutex` в этом случае не требуется, потому что оба обработчика запускаются
|
||||||
с обним приоритетом и никакого вытеснения быть не может.
|
с одним приоритетом и никакого вытеснения быть не может.
|
||||||
К ресурсу `SHARED` можно получить доступ только из этих двух прерываний.
|
К ресурсу `SHARED` можно получить доступ только из этих двух прерываний.
|
||||||
|
|
||||||
``` rust
|
``` rust
|
||||||
|
|
|
@ -11,9 +11,9 @@
|
||||||
Заметьте, что когда Вы используете атрибут `Singleton`, Вым нужно иметь
|
Заметьте, что когда Вы используете атрибут `Singleton`, Вым нужно иметь
|
||||||
`owned_singleton` в зависимостях.
|
`owned_singleton` в зависимостях.
|
||||||
|
|
||||||
Ниже, в примере, использован атрибут `Singleton` на куске памяти, а затем
|
В примере ниже атрибутом `Singleton` аннотирован массив памяти,
|
||||||
использован экземпляр одиночки как фиксированный по размеру пул памяти,
|
а экземпляр одиночки использован как фиксированный по размеру пул памяти
|
||||||
используя одну из абстракций [`alloc-singleton`].
|
с помощью одной из абстракций [`alloc-singleton`].
|
||||||
|
|
||||||
[`alloc-singleton`]: https://crates.io/crates/alloc-singleton
|
[`alloc-singleton`]: https://crates.io/crates/alloc-singleton
|
||||||
|
|
||||||
|
|
|
@ -49,7 +49,7 @@ $ cargo run --example message
|
||||||
зарезервирует достаточно памяти для каждого контекста, чтобы можно было вызвать
|
зарезервирует достаточно памяти для каждого контекста, чтобы можно было вызвать
|
||||||
каждую задачу как минимум единожды. Это разумно по умолчанию, но
|
каждую задачу как минимум единожды. Это разумно по умолчанию, но
|
||||||
"внутреннюю" ёмкость каждой задачи можно контролировать используя аргумент
|
"внутреннюю" ёмкость каждой задачи можно контролировать используя аргумент
|
||||||
`capacicy` атрибута `task`.
|
`capacity` атрибута `task`.
|
||||||
|
|
||||||
В примере ниже установлена ёмкость программной задачи `foo` на 4. Если ёмкость
|
В примере ниже установлена ёмкость программной задачи `foo` на 4. Если ёмкость
|
||||||
не определена, тогда второй вызов `spawn.foo` в `UART0` вызовет ошибку.
|
не определена, тогда второй вызов `spawn.foo` в `UART0` вызовет ошибку.
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
# Советы и хитрости
|
# Советы и хитрости
|
||||||
|
|
||||||
## Generics
|
## Обобщенное программирование (Generics)
|
||||||
|
|
||||||
Ресурсы, совместно используемые двумя или более задачами реализуют трейт `Mutex`
|
Ресурсы, совместно используемые двумя или более задачами, реализуют трейт `Mutex`
|
||||||
во *всех* контекстах, даже в тех, где для доступа к данным не требуются
|
во *всех* контекстах, даже в тех, где для доступа к данным не требуются
|
||||||
критические секции. Это позволяет легко писать обобщенный код оперирующий
|
критические секции. Это позволяет легко писать обобщенный код оперирующий
|
||||||
ресурсами, который можно вызывать из различных задач. Вот такой пример:
|
ресурсами, который можно вызывать из различных задач. Вот такой пример:
|
||||||
|
@ -20,12 +20,12 @@ $ cargo run --example generics
|
||||||
к данным в разделяемых ресурсах, тогда Ваш код продолжит компилироваться,
|
к данным в разделяемых ресурсах, тогда Ваш код продолжит компилироваться,
|
||||||
когда Вы измените приоритет задач.
|
когда Вы измените приоритет задач.
|
||||||
|
|
||||||
## Запуск задач из RAM
|
## Запуск задач из ОЗУ
|
||||||
|
|
||||||
Главной целью переноса описания программы на RTFM в атрибуты в
|
Главной целью переноса описания программы на RTFM в атрибуты в
|
||||||
RTFM v0.4.x была возможность взаимодействия с другими атрибутами.
|
RTFM v0.4.x была возможность взаимодействия с другими атрибутами.
|
||||||
Напримерe, атрибут `link_section` можно применять к задачам, чтобы разместить
|
Напримерe, атрибут `link_section` можно применять к задачам, чтобы разместить
|
||||||
из в RAM; это может улучшить производительность в некоторых случаях.
|
их в ОЗУ; это может улучшить производительность в некоторых случаях.
|
||||||
|
|
||||||
> **ВАЖНО**: Обычно атрибуты `link_section`, `export_name` и `no_mangle`
|
> **ВАЖНО**: Обычно атрибуты `link_section`, `export_name` и `no_mangle`
|
||||||
> очень мощные, но их легко использовать неправильно. Неверное использование
|
> очень мощные, но их легко использовать неправильно. Неверное использование
|
||||||
|
@ -39,7 +39,7 @@ RTFM v0.4.x была возможность взаимодействия с др
|
||||||
|
|
||||||
[RFC]: https://github.com/rust-embedded/cortex-m-rt/pull/100
|
[RFC]: https://github.com/rust-embedded/cortex-m-rt/pull/100
|
||||||
|
|
||||||
В примере ниже показано как разместить высокоприоритетную задачу `bar` в RAM.
|
В примере ниже показано как разместить высокоприоритетную задачу `bar` в ОЗУ.
|
||||||
|
|
||||||
``` rust
|
``` rust
|
||||||
{{#include ../../../examples/ramfunc.rs}}
|
{{#include ../../../examples/ramfunc.rs}}
|
||||||
|
@ -51,7 +51,7 @@ RTFM v0.4.x была возможность взаимодействия с др
|
||||||
$ cargo run --example ramfunc
|
$ cargo run --example ramfunc
|
||||||
{{#include ../../../ci/expected/ramfunc.run}}```
|
{{#include ../../../ci/expected/ramfunc.run}}```
|
||||||
|
|
||||||
Можно посмотреть на вывод `cargo-nm`, чтобы убедиться, что `bar` расположен в RAM
|
Можно посмотреть на вывод `cargo-nm`, чтобы убедиться, что `bar` расположен в ОЗУ
|
||||||
(`0x2000_0000`), тогда как `foo` расположен во Flash (`0x0000_0000`).
|
(`0x2000_0000`), тогда как `foo` расположен во Flash (`0x0000_0000`).
|
||||||
|
|
||||||
``` console
|
``` console
|
||||||
|
|
|
@ -18,8 +18,8 @@
|
||||||
|
|
||||||
## `Send`
|
## `Send`
|
||||||
|
|
||||||
[`Send`] - маркерный трейт для "типов, которые можно передавать через границы
|
[`Send`] - маркерный типаж (trait) для "типов, которые можно передавать через границы
|
||||||
потоков", как это определено в `core`. В контексте RTFM трейт `Send` необходим
|
потоков", как это определено в `core`. В контексте RTFM типаж `Send` необходим
|
||||||
только там, где возможна передача значения между задачами, запускаемыми на
|
только там, где возможна передача значения между задачами, запускаемыми на
|
||||||
*разных* приоритетах. Это возникает в нескольких случаях: при передаче сообщений,
|
*разных* приоритетах. Это возникает в нескольких случаях: при передаче сообщений,
|
||||||
в совместно используемых `static mut` ресурсах и инициализации поздних ресурсов.
|
в совместно используемых `static mut` ресурсах и инициализации поздних ресурсов.
|
||||||
|
@ -27,7 +27,7 @@
|
||||||
[`Send`]: https://doc.rust-lang.org/core/marker/trait.Send.html
|
[`Send`]: https://doc.rust-lang.org/core/marker/trait.Send.html
|
||||||
|
|
||||||
Атрибут `app` проверит, что `Send` реализован, где необходимо, поэтому Вам не
|
Атрибут `app` проверит, что `Send` реализован, где необходимо, поэтому Вам не
|
||||||
стоит волноваться об этом. Более важно знать, где Вам *не* нужен трейт `Send`:
|
стоит волноваться об этом. Более важно знать, где Вам *не* нужен типаж `Send`:
|
||||||
в типах, передаваемых между задачами с *одинаковым* приоритетом. Это возникает
|
в типах, передаваемых между задачами с *одинаковым* приоритетом. Это возникает
|
||||||
в двух случаях: при передаче сообщений и в совместно используемых `static mut`
|
в двух случаях: при передаче сообщений и в совместно используемых `static mut`
|
||||||
ресурсах.
|
ресурсах.
|
||||||
|
@ -40,9 +40,9 @@
|
||||||
|
|
||||||
## `Sync`
|
## `Sync`
|
||||||
|
|
||||||
Похожая ситуация, [`Sync`] - маркерный трейт для "типов, на которых можно
|
Похожая ситуация, [`Sync`] - маркерный типаж для "типов, на которых можно
|
||||||
ссылаться в разных потоках", как это определено в `core`. В контексте RTFM
|
ссылаться в разных потоках", как это определено в `core`. В контексте RTFM
|
||||||
трейт `Sync` необходим только там, где возможны две или более задачи,
|
типаж `Sync` необходим только там, где возможны две или более задачи,
|
||||||
запускаемые на разных приоритетах, чтобы захватить разделяемую ссылку на
|
запускаемые на разных приоритетах, чтобы захватить разделяемую ссылку на
|
||||||
ресурс. Это возникает только совместно используемых `static`-ресурсах.
|
ресурс. Это возникает только совместно используемых `static`-ресурсах.
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue