Сократите использование ресурсов в режиме ожидания - PullRequest
0 голосов
/ 13 июня 2010

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

Ответы [ 2 ]

3 голосов
/ 13 июня 2010

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

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

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

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

1 голос
/ 13 июня 2010

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

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

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

...