diff options
Diffstat (limited to 'ru/src/by-example/tasks.md')
| -rw-r--r-- | ru/src/by-example/tasks.md | 63 |
1 files changed, 0 insertions, 63 deletions
diff --git a/ru/src/by-example/tasks.md b/ru/src/by-example/tasks.md deleted file mode 100644 index f0596d3..0000000 --- a/ru/src/by-example/tasks.md +++ /dev/null @@ -1,63 +0,0 @@ -# Программные задачи - -RTFM обрабатывает прерывания и исключения как *аппаратные* задачи. Аппаратные -задачи могут вызываться устройством в ответ на события, такие как нажатие кнопки. -RTFM также поддерживает *программные* задачи, порождаемые программой из любого -контекста выполнения. - -Программным задачам также можно назначать приоритет и диспетчеризовать из -обработчиков прерываний. RTFM требует определения свободных прерываний в блоке -`extern`, когда используются программные задачи; эти свободные прерывания будут использованы, чтобы диспетчеризовать программные задачи. Преимущество программных -задач перед аппаратными в том, что на один обработчик прерывания можно назначить -множество задач. - -Программные задачи определяются заданием функциям атрибута `task`. Чтобы было -возможно вызывать программные задачи, имя задачи нужно передать в аргументе -`spawn` контекста атрибута (`init`, `idle`, `interrupt`, etc.). - -В примере ниже продемонстрированы три программных задачи, запускаемые на 2-х -разных приоритетах. Трем задачам назначены 2 обработчика прерываний. - -``` rust -{{#include ../../../examples/task.rs}} -``` - -``` console -$ cargo run --example task -{{#include ../../../ci/expected/task.run}}``` - -## Передача сообщений - -Другое преимущество программных задач - возможность передавать сообщения задачам -во время их вызова. Тип полезной нагрузки сообщения должен быть определен в -сигнатуре обработчика задачи. - -Пример ниже демонстрирует три задачи, две из которых ожидают сообщения. - -``` rust -{{#include ../../../examples/message.rs}} -``` - -``` console -$ cargo run --example message -{{#include ../../../ci/expected/message.run}}``` - -## Ёмкость - -Диспетчеры задач *не* используют динамическое выделение памяти. Память -необходимая для размещения сообщений, резервируется статически. Фреймворк -зарезервирует достаточно памяти для каждого контекста, чтобы можно было вызвать -каждую задачу как минимум единожды. Это разумно по умолчанию, но -"внутреннюю" ёмкость каждой задачи можно контролировать используя аргумент -`capacity` атрибута `task`. - -В примере ниже установлена ёмкость программной задачи `foo` на 4. Если ёмкость -не определена, тогда второй вызов `spawn.foo` в `UART0` вызовет ошибку. - -``` rust -{{#include ../../../examples/capacity.rs}} -``` - -``` console -$ cargo run --example capacity -{{#include ../../../ci/expected/capacity.run}}``` |
