Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как отловить переполнение стека, LPC2142.
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > FreeRTOS
DreamTwister
Решаю вопросы по оптимизации работы оперативной памяти, так как ее стало не хватать.
Для начала решил разобраться с использованием стека, но не совсем понимаю принцип работы следующей процедуры, которой настоятельно советуют воспользоваться авторы операционки.

unsigned portSHORT usTaskCheckFreeStackSpace( const unsigned portCHAR *pucStackByte )

Что нужно в нее передавать? Вершину стека?
Откуда вызывать данную функция?
Я так понял, что ее можно вызвать из выполняемой задачи и посмотреть, сколько эта задача "кушает" сетка.

Или я что-то не понимаю.

Компилятор - IAR. Версия ОС - FreeRTOS 4.4.0.
zltigo
Цитата(DreamTwister @ Nov 7 2008, 15:46) *
Или я что-то не понимаю.

Да принцип простой, как лом - стек при инициализации задачи заполняется каким либо значением, далее в совершенно любой момент и из любой задачи можно посмотреть где начинается/кончается заполнение этим самым water mark. На конкретные вопросы не отвечу, поскольку у меня относительно оригинального варианта FreeRTOS это переписано было сразу-же. Но там все очень просто - гляньте исходник....
DreamTwister
Поковырял я исходники, но смысл проблемы особо не изменился.

В функции xTaskCreate объявляется ряд структур, а именно:
pxCurrentTCB
pxNewTCB.

Проблема в том, что они все локальные и никуда не передаются. В них содержаться параметры стека, которые мне нужны. Как их лучше оттуда выковырять?

Или там есть более простой способ?
zltigo
Цитата(DreamTwister @ Nov 10 2008, 08:06) *
Проблема в том, что они все локальные и никуда не передаются.
Как их лучше оттуда выковырять?

Написать некую свою локальную-же функцию, или посмотреть уже готовую функцию/макрос в исходнике. Чем, например Вас не устраивает в первом приближении uxTaskGetStackHighWaterMark( xTaskHandle xTask ) ???
DreamTwister
Странно, но это функции в своей версии ОС я так и не увидел, зато обнаружилась:

vTaskList( portCHAR *pcWriteBuffer );.

Для дебага сойдет, я думаю. Тем более там можно просматривать многие другие параметры задач.
zltigo
Цитата(DreamTwister @ Nov 10 2008, 15:37) *
Странно, но это функции в своей версии ОС я так и не увидел, зато обнаружилась:

Стесняюсь спросить, а какого не взять текущую версию?
Цитата
vTaskList( portCHAR *pcWriteBuffer );.

Ее и переписать в первую очередь, ибо использовать для распечатки отдельный буфер просто не разумно.
DreamTwister
Да уж, использовать лишние 100 байт для мониторинга задач - не есть хорошо.
Но для самопроверки сойдет и такая функция, все равно из конечной прошивки она будет убрана.

Это мой первый опыт работы с операционными системами реального времени, чувствуется сильная нехватка опыта.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.