реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Резервирование RSTACK для AVRMega, Нестабильная работа
framer
сообщение Jun 14 2013, 12:06
Сообщение #16


Участник
*

Группа: Свой
Сообщений: 46
Регистрация: 23-09-04
Пользователь №: 709



Цитата(Aeore @ Jun 13 2013, 00:09) *
CODE

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


Видно, что в некоторых местах стек практически весь использован. Да размер стека выделяемый под задачи зависит от платформы так, что на эмуляторе может все работать.
Go to the top of the page
 
+Quote Post
Aeore
сообщение Jun 16 2013, 20:59
Сообщение #17





Группа: Участник
Сообщений: 12
Регистрация: 10-08-07
Из: Odessa
Пользователь №: 29 704



Цитата(desh @ Jun 14 2013, 09:52) *
У вас как на АВР-е определен базовый тип portBASE_TYPE как unsigned char.
В принципе функция uxTaskGetStackHighWaterMark больше 255 вернуть не сможет.
Тут же и ограничение на размер очереди в элементах.


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

Цитата(framer @ Jun 14 2013, 15:06) *
Видно, что в некоторых местах стек практически весь использован. Да размер стека выделяемый под задачи зависит от платформы так, что на эмуляторе может все работать.


Как он может зависеть от платформы, если я сам указываю размеры стеков?
Go to the top of the page
 
+Quote Post
framer
сообщение Jun 17 2013, 06:11
Сообщение #18


Участник
*

Группа: Свой
Сообщений: 46
Регистрация: 23-09-04
Пользователь №: 709



Цитата(Aeore @ Jun 16 2013, 23:59) *
Как он может зависеть от платформы, если я сам указываю размеры стеков?


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

Цитата(Aeore @ Jun 13 2013, 00:09) *
А вот то же самое, но с WIN32. Как видно, на avr uxTaskGetStackHighWaterMark() возвращает всего ничего, а на win32 все нормально:


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



Заняло по 5 блоков(слов) и все. Видно, что стек в задачах не используется. Все зависит от того как перенесено на WIN32. Под win если посмотреть то таски симулитуютя использованием thread. Там нет переключения контекста с изменением указателей стека. Осуществляется это остановкой текущего thread и запуском следующего (можно посмотреть исходники в prvProcessSimulatedInterrupts ). В таком случае локальные перемнные не распологаються в стеке задачи FreeRtos, а используються механизмы win32. Поэтому отладка стека эфективна на конкретной платформе.
Go to the top of the page
 
+Quote Post
Aeore
сообщение Jun 25 2013, 08:11
Сообщение #19





Группа: Участник
Сообщений: 12
Регистрация: 10-08-07
Из: Odessa
Пользователь №: 29 704



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

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 01:58
Рейтинг@Mail.ru


Страница сгенерированна за 0.01395 секунд с 7
ELECTRONIX ©2004-2016