aboutsummaryrefslogtreecommitdiff
path: root/ru/src/by-example/tips.md
diff options
context:
space:
mode:
authorAndrey Zgarbul <zgarbul.andrey@gmail.com>2019-02-08 23:18:51 +0300
committerAndrey Zgarbul <zgarbul.andrey@gmail.com>2019-02-08 23:18:51 +0300
commit5ef1f2088a089e9ac731cfc2037282a6033c2c82 (patch)
tree5bad376b2f1d716eda5efb61b7bfcf61a4711e30 /ru/src/by-example/tips.md
parent45659fdbbc1163efd71ed89f892beeeeffd54cee (diff)
russian translation
Diffstat (limited to 'ru/src/by-example/tips.md')
-rw-r--r--ru/src/by-example/tips.md63
1 files changed, 63 insertions, 0 deletions
diff --git a/ru/src/by-example/tips.md b/ru/src/by-example/tips.md
new file mode 100644
index 0000000..3608dc2
--- /dev/null
+++ b/ru/src/by-example/tips.md
@@ -0,0 +1,63 @@
+# Советы и хитрости
+
+## Generics
+
+Ресурсы, совместно используемые двумя или более задачами реализуют трейт `Mutex`
+во *всех* контекстах, даже в тех, где для доступа к данным не требуются
+критические секции. Это позволяет легко писать обобщенный код оперирующий
+ресурсами, который можно вызывать из различных задач. Вот такой пример:
+
+``` rust
+{{#include ../../../examples/generics.rs}}
+```
+
+``` console
+$ cargo run --example generics
+{{#include ../../../ci/expected/generics.run}}```
+
+Это также позволяет Вам изменять статические приоритеты задач без
+переписывания кода. Если Вы единообразно используете `lock`-и для доступа
+к данным в разделяемых ресурсах, тогда Ваш код продолжит компилироваться,
+когда Вы измените приоритет задач.
+
+## Запуск задач из RAM
+
+Главной целью переноса описания программы на RTFM в атрибуты в
+RTFM v0.4.x была возможность взаимодействия с другими атрибутами.
+Напримерe, атрибут `link_section` можно применять к задачам, чтобы разместить
+из в RAM; это может улучшить производительность в некоторых случаях.
+
+> **ВАЖНО**: Обычно атрибуты `link_section`, `export_name` и `no_mangle`
+> очень мощные, но их легко использовать неправильно. Неверное использование
+> любого из этих атрибутов может вызвать неопределенное поведение;
+> Вам следует всегда предпочитать использование безопасных, высокоуровневых
+> атрибутов вокруг них, таких как атрибуты `interrupt` и `exception`
+> из `cortex-m-rt`.
+>
+> В особых случаях функций RAM нет безопасной абстракции в `cortex-m-rt`
+> v0.6.5 но создано [RFC] для добавления атрибута `ramfunc` в будущем релизе.
+
+[RFC]: https://github.com/rust-embedded/cortex-m-rt/pull/100
+
+В примере ниже показано как разместить высокоприоритетную задачу `bar` в RAM.
+
+``` rust
+{{#include ../../../examples/ramfunc.rs}}
+```
+
+Запуск этой программы произведет ожидаемый вывод.
+
+``` console
+$ cargo run --example ramfunc
+{{#include ../../../ci/expected/ramfunc.run}}```
+
+Можно посмотреть на вывод `cargo-nm`, чтобы убедиться, что `bar` расположен в RAM
+(`0x2000_0000`), тогда как `foo` расположен во Flash (`0x0000_0000`).
+
+``` console
+$ cargo nm --example ramfunc --release | grep ' foo::'
+{{#include ../../../ci/expected/ramfunc.grep.foo}}```
+
+``` console
+$ cargo nm --example ramfunc --release | grep ' bar::'
+{{#include ../../../ci/expected/ramfunc.grep.bar}}```