(ru) changes according review

This commit is contained in:
Andrey Zgarbul 2019-02-09 08:48:12 +03:00
parent 5ef1f2088a
commit 0fcc31f58e
7 changed files with 21 additions and 21 deletions

View file

@ -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)

View file

@ -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

View file

@ -15,7 +15,7 @@
В примере ниже два обработчика прерываний имеют доступ к одному и тому же ресурсу. В примере ниже два обработчика прерываний имеют доступ к одному и тому же ресурсу.
Никакого `Mutex` в этом случае не требуется, потому что оба обработчика запускаются Никакого `Mutex` в этом случае не требуется, потому что оба обработчика запускаются
с обним приоритетом и никакого вытеснения быть не может. с одним приоритетом и никакого вытеснения быть не может.
К ресурсу `SHARED` можно получить доступ только из этих двух прерываний. К ресурсу `SHARED` можно получить доступ только из этих двух прерываний.
``` rust ``` rust

View file

@ -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

View file

@ -49,7 +49,7 @@ $ cargo run --example message
зарезервирует достаточно памяти для каждого контекста, чтобы можно было вызвать зарезервирует достаточно памяти для каждого контекста, чтобы можно было вызвать
каждую задачу как минимум единожды. Это разумно по умолчанию, но каждую задачу как минимум единожды. Это разумно по умолчанию, но
"внутреннюю" ёмкость каждой задачи можно контролировать используя аргумент "внутреннюю" ёмкость каждой задачи можно контролировать используя аргумент
`capacicy` атрибута `task`. `capacity` атрибута `task`.
В примере ниже установлена ёмкость программной задачи `foo` на 4. Если ёмкость В примере ниже установлена ёмкость программной задачи `foo` на 4. Если ёмкость
не определена, тогда второй вызов `spawn.foo` в `UART0` вызовет ошибку. не определена, тогда второй вызов `spawn.foo` в `UART0` вызовет ошибку.

View file

@ -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

View file

@ -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`-ресурсах.