Jump to content

    

Резервирование RSTACK для AVRMega

[sS]: Controller
SHW CPControllerService::taskStart 52
SHW CPControllerService::onQueueCommandActioned 7 !!!!!
SHW CPStrategyPOSTCommand::start 246
SHW CPControllerService::onQueueCommandActioned 246

 

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

Share this post


Link to post
Share on other sites
У вас как на АВР-е определен базовый тип portBASE_TYPE как unsigned char.

В принципе функция uxTaskGetStackHighWaterMark больше 255 вернуть не сможет.

Тут же и ограничение на размер очереди в элементах.

 

Опс.. да, действительно. По поводу очереди - у меня в каждой очереди по 16 элементов, так что не страшно.

 

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

 

Как он может зависеть от платформы, если я сам указываю размеры стеков?

Share this post


Link to post
Share on other sites
Как он может зависеть от платформы, если я сам указываю размеры стеков?

 

Ну а как обяснить показатели использования стека uxTaskGetStackHighWaterMark под Win32?

 

А вот то же самое, но с WIN32. Как видно, на avr uxTaskGetStackHighWaterMark() возвращает всего ничего, а на win32 все нормально:

ce1fc5afda45.png

 

Т.е. все очень сильно зависит от платформы. Это уже что-то.

 

 

Заняло по 5 блоков(слов) и все. Видно, что стек в задачах не используется. Все зависит от того как перенесено на WIN32. Под win если посмотреть то таски симулитуютя использованием thread. Там нет переключения контекста с изменением указателей стека. Осуществляется это остановкой текущего thread и запуском следующего (можно посмотреть исходники в prvProcessSimulatedInterrupts ). В таком случае локальные перемнные не распологаються в стеке задачи FreeRtos, а используються механизмы win32. Поэтому отладка стека эфективна на конкретной платформе.

Share this post


Link to post
Share on other sites

Да, это так. Я недавно перевел систему из преемптивного в кооперативный режим - глюки исчезли полностью, хотя функция uxTaskGetStackHighWaterMark() в целом возвращает те же значения

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this