DreamTwister 0 7 ноября, 2008 Опубликовано 7 ноября, 2008 · Жалоба Решаю вопросы по оптимизации работы оперативной памяти, так как ее стало не хватать. Для начала решил разобраться с использованием стека, но не совсем понимаю принцип работы следующей процедуры, которой настоятельно советуют воспользоваться авторы операционки. unsigned portSHORT usTaskCheckFreeStackSpace( const unsigned portCHAR *pucStackByte ) Что нужно в нее передавать? Вершину стека? Откуда вызывать данную функция? Я так понял, что ее можно вызвать из выполняемой задачи и посмотреть, сколько эта задача "кушает" сетка. Или я что-то не понимаю. Компилятор - IAR. Версия ОС - FreeRTOS 4.4.0. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 1 7 ноября, 2008 Опубликовано 7 ноября, 2008 · Жалоба Или я что-то не понимаю. Да принцип простой, как лом - стек при инициализации задачи заполняется каким либо значением, далее в совершенно любой момент и из любой задачи можно посмотреть где начинается/кончается заполнение этим самым water mark. На конкретные вопросы не отвечу, поскольку у меня относительно оригинального варианта FreeRTOS это переписано было сразу-же. Но там все очень просто - гляньте исходник.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DreamTwister 0 10 ноября, 2008 Опубликовано 10 ноября, 2008 · Жалоба Поковырял я исходники, но смысл проблемы особо не изменился. В функции xTaskCreate объявляется ряд структур, а именно: pxCurrentTCB pxNewTCB. Проблема в том, что они все локальные и никуда не передаются. В них содержаться параметры стека, которые мне нужны. Как их лучше оттуда выковырять? Или там есть более простой способ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 1 10 ноября, 2008 Опубликовано 10 ноября, 2008 · Жалоба Проблема в том, что они все локальные и никуда не передаются. Как их лучше оттуда выковырять? Написать некую свою локальную-же функцию, или посмотреть уже готовую функцию/макрос в исходнике. Чем, например Вас не устраивает в первом приближении uxTaskGetStackHighWaterMark( xTaskHandle xTask ) ??? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DreamTwister 0 10 ноября, 2008 Опубликовано 10 ноября, 2008 · Жалоба Странно, но это функции в своей версии ОС я так и не увидел, зато обнаружилась: vTaskList( portCHAR *pcWriteBuffer );. Для дебага сойдет, я думаю. Тем более там можно просматривать многие другие параметры задач. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 1 10 ноября, 2008 Опубликовано 10 ноября, 2008 · Жалоба Странно, но это функции в своей версии ОС я так и не увидел, зато обнаружилась: Стесняюсь спросить, а какого не взять текущую версию? vTaskList( portCHAR *pcWriteBuffer );. Ее и переписать в первую очередь, ибо использовать для распечатки отдельный буфер просто не разумно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DreamTwister 0 11 ноября, 2008 Опубликовано 11 ноября, 2008 · Жалоба Да уж, использовать лишние 100 байт для мониторинга задач - не есть хорошо. Но для самопроверки сойдет и такая функция, все равно из конечной прошивки она будет убрана. Это мой первый опыт работы с операционными системами реального времени, чувствуется сильная нехватка опыта. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться