Конфигурация FreeRTOSMINIMAL_STACK_SIZE

В некоторых демонстрациях для FreeRTOS на микроконтроллерах Cortex M0 configMINIMAL_STACK_SIZE установлено значение 60, а в некоторых других — 70. При использовании программного обеспечения STM32Cube установлено значение 128.

Мой вопрос: каков на самом деле МИНИМАЛЬНЫЙ размер стека?

Глядя в руководство по программированию STM32 Cortex-M0, я вижу, что регистры процессора R0-R12, MSP, PSP, LR, PC, PSR, ASPR, IPSR, EPSR, PRIMASK, CONTROL. Разве это не означает, что МИНИМАЛЬНЫЙ размер стека составляет всего 23 слова? Или есть дополнительная информация, которую необходимо сохранить для переключения контекста?


person evading    schedule 24.10.2014    source источник


Ответы (1)


Согласно описанию здесь: http://www.freertos.org/a00110.html#configMINIMAL_STACK_SIZE что касается RTOS, константа не делает ничего, кроме установки размера стека, используемого бездействующей задачей.

Стек должен быть достаточно большим, чтобы содержать контекст задачи, а также любые обычные элементы стека, используемые задачей (локальные переменные, служебные вызовы функций и т. д.), поэтому требуемый фактический размер зависит от того, что делает незанятая задача. - и будет минимальным, если бездействующая задача ничего не делает. Если, с другой стороны, используется функция обработчика бездействующих задач (http://www.freertos.org/a00016.html), то требуемый размер стека будет зависеть от того, что делает функция ловушки (глубина вызова ее функции и т. д.).

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

person Richard    schedule 24.10.2014