diff --git a/ru/src/SUMMARY.md b/ru/src/SUMMARY.md index d57ee4c077..7831e415a4 100644 --- a/ru/src/SUMMARY.md +++ b/ru/src/SUMMARY.md @@ -2,7 +2,7 @@ [Введение](./preface.md) - [RTFM в примерах](./by-example.md) - - [Атрибут `app](./by-example/app.md) + - [Атрибут `app`](./by-example/app.md) - [Ресурсы](./by-example/resources.md) - [Задачи](./by-example/tasks.md) - [Очередь таймера](./by-example/timer-queue.md) diff --git a/ru/src/by-example.md b/ru/src/by-example.md index 6955f8efe9..c7a2a4ae66 100644 --- a/ru/src/by-example.md +++ b/ru/src/by-example.md @@ -5,12 +5,12 @@ Все примеры в этой книге можно найти в [репозитории] проекта на GitHub, и большинство примеров можно запустить на эмуляторе QEMU, поэтому никакого -специальног оборудования не требуется to follow along. +специального оборудования не требуется их выполнять. [репозитории]: https://github.com/japaric/cortex-m-rtfm -Чтобы запустить примеры на Вашем ноутбуке / PC, Вам нужна программа -`qemu-system-arm`. Посмотрите [the embedded Rust book] на предмет инструкций -как настроить окружение для разработки встраиваемых устройств, в том числе QEMU. +Чтобы запустить примеры на Вашем ноутбуке / ПК, Вам нужна программа +`qemu-system-arm`. Инструкции по настройке окружения для разработки +встраиваемых устройств, в том числе QEMU, Вы можете найти в [the embedded Rust book]. [the embedded Rust book]: https://rust-embedded.github.io/book/intro/install.html diff --git a/ru/src/by-example/resources.md b/ru/src/by-example/resources.md index a117e6ad81..096c803b1b 100644 --- a/ru/src/by-example/resources.md +++ b/ru/src/by-example/resources.md @@ -15,7 +15,7 @@ В примере ниже два обработчика прерываний имеют доступ к одному и тому же ресурсу. Никакого `Mutex` в этом случае не требуется, потому что оба обработчика запускаются -с обним приоритетом и никакого вытеснения быть не может. +с одним приоритетом и никакого вытеснения быть не может. К ресурсу `SHARED` можно получить доступ только из этих двух прерываний. ``` rust diff --git a/ru/src/by-example/singletons.md b/ru/src/by-example/singletons.md index b7131e63fb..23ed167831 100644 --- a/ru/src/by-example/singletons.md +++ b/ru/src/by-example/singletons.md @@ -11,9 +11,9 @@ Заметьте, что когда Вы используете атрибут `Singleton`, Вым нужно иметь `owned_singleton` в зависимостях. -Ниже, в примере, использован атрибут `Singleton` на куске памяти, а затем -использован экземпляр одиночки как фиксированный по размеру пул памяти, -используя одну из абстракций [`alloc-singleton`]. +В примере ниже атрибутом `Singleton` аннотирован массив памяти, +а экземпляр одиночки использован как фиксированный по размеру пул памяти +с помощью одной из абстракций [`alloc-singleton`]. [`alloc-singleton`]: https://crates.io/crates/alloc-singleton diff --git a/ru/src/by-example/tasks.md b/ru/src/by-example/tasks.md index d958d571f0..f0596d3751 100644 --- a/ru/src/by-example/tasks.md +++ b/ru/src/by-example/tasks.md @@ -49,7 +49,7 @@ $ cargo run --example message зарезервирует достаточно памяти для каждого контекста, чтобы можно было вызвать каждую задачу как минимум единожды. Это разумно по умолчанию, но "внутреннюю" ёмкость каждой задачи можно контролировать используя аргумент -`capacicy` атрибута `task`. +`capacity` атрибута `task`. В примере ниже установлена ёмкость программной задачи `foo` на 4. Если ёмкость не определена, тогда второй вызов `spawn.foo` в `UART0` вызовет ошибку. diff --git a/ru/src/by-example/tips.md b/ru/src/by-example/tips.md index 3608dc2faf..ab0f1b570f 100644 --- a/ru/src/by-example/tips.md +++ b/ru/src/by-example/tips.md @@ -1,8 +1,8 @@ # Советы и хитрости -## Generics +## Обобщенное программирование (Generics) -Ресурсы, совместно используемые двумя или более задачами реализуют трейт `Mutex` +Ресурсы, совместно используемые двумя или более задачами, реализуют трейт `Mutex` во *всех* контекстах, даже в тех, где для доступа к данным не требуются критические секции. Это позволяет легко писать обобщенный код оперирующий ресурсами, который можно вызывать из различных задач. Вот такой пример: @@ -20,12 +20,12 @@ $ cargo run --example generics к данным в разделяемых ресурсах, тогда Ваш код продолжит компилироваться, когда Вы измените приоритет задач. -## Запуск задач из RAM +## Запуск задач из ОЗУ Главной целью переноса описания программы на RTFM в атрибуты в RTFM v0.4.x была возможность взаимодействия с другими атрибутами. Напримерe, атрибут `link_section` можно применять к задачам, чтобы разместить -из в RAM; это может улучшить производительность в некоторых случаях. +их в ОЗУ; это может улучшить производительность в некоторых случаях. > **ВАЖНО**: Обычно атрибуты `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 -В примере ниже показано как разместить высокоприоритетную задачу `bar` в RAM. +В примере ниже показано как разместить высокоприоритетную задачу `bar` в ОЗУ. ``` rust {{#include ../../../examples/ramfunc.rs}} @@ -51,7 +51,7 @@ RTFM v0.4.x была возможность взаимодействия с др $ cargo run --example ramfunc {{#include ../../../ci/expected/ramfunc.run}}``` -Можно посмотреть на вывод `cargo-nm`, чтобы убедиться, что `bar` расположен в RAM +Можно посмотреть на вывод `cargo-nm`, чтобы убедиться, что `bar` расположен в ОЗУ (`0x2000_0000`), тогда как `foo` расположен во Flash (`0x0000_0000`). ``` console diff --git a/ru/src/by-example/types-send-sync.md b/ru/src/by-example/types-send-sync.md index 5b3857caca..e470adf7b2 100644 --- a/ru/src/by-example/types-send-sync.md +++ b/ru/src/by-example/types-send-sync.md @@ -18,8 +18,8 @@ ## `Send` -[`Send`] - маркерный трейт для "типов, которые можно передавать через границы -потоков", как это определено в `core`. В контексте RTFM трейт `Send` необходим +[`Send`] - маркерный типаж (trait) для "типов, которые можно передавать через границы +потоков", как это определено в `core`. В контексте RTFM типаж `Send` необходим только там, где возможна передача значения между задачами, запускаемыми на *разных* приоритетах. Это возникает в нескольких случаях: при передаче сообщений, в совместно используемых `static mut` ресурсах и инициализации поздних ресурсов. @@ -27,7 +27,7 @@ [`Send`]: https://doc.rust-lang.org/core/marker/trait.Send.html Атрибут `app` проверит, что `Send` реализован, где необходимо, поэтому Вам не -стоит волноваться об этом. Более важно знать, где Вам *не* нужен трейт `Send`: +стоит волноваться об этом. Более важно знать, где Вам *не* нужен типаж `Send`: в типах, передаваемых между задачами с *одинаковым* приоритетом. Это возникает в двух случаях: при передаче сообщений и в совместно используемых `static mut` ресурсах. @@ -40,9 +40,9 @@ ## `Sync` -Похожая ситуация, [`Sync`] - маркерный трейт для "типов, на которых можно +Похожая ситуация, [`Sync`] - маркерный типаж для "типов, на которых можно ссылаться в разных потоках", как это определено в `core`. В контексте RTFM -трейт `Sync` необходим только там, где возможны две или более задачи, +типаж `Sync` необходим только там, где возможны две или более задачи, запускаемые на разных приоритетах, чтобы захватить разделяемую ссылку на ресурс. Это возникает только совместно используемых `static`-ресурсах.