0

Я обнаружил, что в ОСРВ uC/OS-II существует незанятая задача, которая запускается, когда другая задача не готова к запуску. Если простаивающая задача может потреблять ресурсы, как ее уменьшить?Уменьшить использование ресурсов для задачи Idle

+0

Что вы пытаетесь уменьшить? незанятая задача по существу 'while (nothing_ready_to_run) {no_op; } 'нечего оптимизировать. – msw

+0

Простая задача может потреблять ресурсы памяти, питания или ввода-вывода. Какой из них нужно сократить? – Gabe

+0

Память и власть. Интересно знать, что ресурсы ввода-вывода используются во время незанятой задачи. Как можно использовать ресурсы ввода-вывода? –

ответ

3

Обычно задача бездействия заключается в том, что процессор переключается в режим низкой мощности (сна), если это маломощная система, и процессор имеет такой режим. Обычно это специальная инструкция по сборке, например, на ARM Cortex M3 вы должны выполнить инструкцию WFI. На других чипах может существовать определенный регистр вне ядра, который управляет мощностью (в отличие от инструкции).

Обратите внимание, что перед входом в режим низкого энергопотребления часто возникают условия (требования, которые необходимо выполнить). Иногда вам нужно, чтобы прерывания были заблокированы, иногда разблокированы, перед сном; проверьте данные вашего чипа.

Обычно перед входом в маломощный режим вы отключите любые периферийные устройства, которые вам не нужны. Опять же, проверьте данные вашего чипа. Также, если вы собираетесь использовать прерывание для пробуждения, убедитесь, что периферийное устройство отключено, а прерывание включено, иначе вы не проснетесь.

Последний вопрос: часто при отладке (например, под управлением устройства JTAG) происходят странные вещи при входе в режим с низким энергопотреблением, поэтому вы хотите отключить «спящий» в незанятой задаче при отладке и выполнять это только при запуске без отладчика. Обычно это решение, используемое во время компиляции (#ifdef ...)

1

Типичный цикл простоя, вероятно, будет иметь очень мало процессорных ворот и, следовательно, потребляет очень мало энергии в ядре, но если это критически важно, вы можете вызвать спящий режим в холостом цикле, так что никакого кода вообще не выполняется - ядро ​​просто останавливается. Однако вполне вероятно, что для поддержания реакции в реальном времени периферийные устройства останутся включенными и способны генерировать прерывания, поэтому на практике преимущество может быть минимальным.

С точки зрения других ресурсов, цикл простоя обычно будет просто ветвью к текущей команде; одна инструкция, никаких данных; он не может стать намного меньше. Исходный код для uC/OS-II предоставляется, поэтому вы можете просто взглянуть!

Конечно, если вы продлили незанятую задачу, изменив ее напрямую или используя крючок, это использование ресурсов полностью находится под вашим контролем, но вы ничего не можете получить.