Easyelectronics.ru

Электроника для всех
Текущее время: 26 май 2019, 12:51

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 25 ] 
Автор Сообщение
 Заголовок сообщения: [РЕШЕНО] FreeRTOS Отладка задач (v9 stm32f1)
СообщениеДобавлено: 23 окт 2017, 19:33 
Заглядывает иногда

Зарегистрирован: 25 апр 2011, 01:46
Сообщения: 121
.


Последний раз редактировалось Qic 22 май 2019, 00:17, всего редактировалось 3 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FreeRTOS Отладка задач
СообщениеДобавлено: 24 окт 2017, 13:10 
Заглядывает иногда

Зарегистрирован: 25 апр 2011, 01:46
Сообщения: 121
.


Последний раз редактировалось Qic 22 май 2019, 00:18, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FreeRTOS Отладка задач
СообщениеДобавлено: 24 окт 2017, 15:41 
Старожил
Аватара пользователя

Зарегистрирован: 23 сен 2012, 20:35
Сообщения: 2471
Qic писал(а):
Есть идеи как её получить?

Насколько я понимаю, стек под задачи распределяется из какого-то общего буфера. Если так, то можно попробовать отсортировать указатели на стек, взять между ними разницу и выровнять ее на какую-то границу (зависит от гранулярности с которой выделяется место под стек). Впрочем, это не гарантирует правильности полученного результата. Например, если гранулярность 1К, задаче выделено 2К и она уже использовала больше 1К, то при вычислении получится ошибка (использованный стек зачтется как пустой следующей задаче). А так самое простое - слегка допилить FreeRTOS и сохранять начальный размер стека в структуре задачи.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FreeRTOS Отладка задач
СообщениеДобавлено: 24 окт 2017, 15:52 
Заглядывает иногда

Зарегистрирован: 25 апр 2011, 01:46
Сообщения: 121
.


Последний раз редактировалось Qic 22 май 2019, 00:18, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FreeRTOS Отладка задач
СообщениеДобавлено: 24 окт 2017, 21:25 
Старожил
Аватара пользователя

Зарегистрирован: 04 окт 2011, 10:19
Сообщения: 1650
Это не то ?
http://www.freertos.org/Stacks-and-stac ... cking.html
http://www.freertos.org/uxTaskGetStackH ... rMark.html
Но размер стека и freertos не очень связаны.
Только при переключении задачи rtos нужно место в стеке.
А потом как вы его будете использовать - дело ваше личное.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FreeRTOS Отладка задач
СообщениеДобавлено: 24 окт 2017, 22:28 
Заглядывает иногда

Зарегистрирован: 25 апр 2011, 01:46
Сообщения: 121
.


Последний раз редактировалось Qic 22 май 2019, 00:16, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FreeRTOS Отладка задач
СообщениеДобавлено: 24 окт 2017, 23:14 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 3112
А вы никогда не интересовались структурой стека задач в частности, и работой аллокатора heap1, heap2 в общности? Откройте браузер памяти, посмотрите. В начале каждого стека задачи идет блок TCB - Task Control Block. Он содержит инфу, определенную в качестве структуры при создании задачи (просмотрите исходники этой ф-ции). Размер TCB постоянен. 72 бйата на ARM. Аллокатор модели heаp1 работает последовательно, выделяя память от начала кучи (heap) и до ее конца, без промежутков. ...кароче, просто откройте браузер памяти и посмотрите.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FreeRTOS Отладка задач
СообщениеДобавлено: 25 окт 2017, 00:12 
Заглядывает иногда

Зарегистрирован: 25 апр 2011, 01:46
Сообщения: 121
.


Последний раз редактировалось Qic 22 май 2019, 00:16, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FreeRTOS Отладка задач
СообщениеДобавлено: 25 окт 2017, 00:30 
Старожил
Аватара пользователя

Зарегистрирован: 29 янв 2010, 15:41
Сообщения: 1127
Откуда: Германия
Qic писал(а):
vApplicationStackOverflowHook обработчик переполнения стека, который вызывается из шедулера при условии что uxTaskGetStackHighWaterMark вернёт нулевой значение - т.е. не осталось больше свободного стека. А uxTaskGetStackHighWaterMark в свою очередь имеет представление о том сколько было стека сразу после инициализации задачи и в обработчике использования стека переменная декрементируется показывая тем самым сколько осталось.
А ищу я как-раз общий размер стека задачи, который ОС не хранит нигде, использует только раз при создании задачи.

Попробуйте "вклиниться" в место, где создается стек, но еще не используется, и забейте весь массив стека значением, которое хорошо видно в дебагере. Обычно это либо 0xAA либо 0x55. Потом, погоняйте программку вашу и остановите ее в дебагере. Зная значение адреса начала стека, можно очень даже и точно определить, до куда стек у вас заполняется, найдя эти самые заветные 0xAA либо 0x55.

Qic писал(а):
Чуть позже допишу и выложу task.c task.h, впрочем переделка там мизерная. Всё ради буковок и циферок в терминале на манер диспетчера задач.
А позднее там появится еще и прогресс бар и даже цветное оформление, но это уже жир :)

P.S. А ведь раньше для меня исходники FreeRTOS были чем-то магическим и суперсложным.

Очередной велосипед?
Приглядитесь к Segger System Viewer. Он показывает, почти в реальном времени, какая задача, сколько выполнялась, сколько стояла, какие прерывания в этот момент вызывались, какие прерывались. Если свой код немного доинструментировать, то можно и ваши собственные ивенты глядеть.
Это все как для безОСовой системы, так и с FreeRTOS (там надо чуток ее доработать, подробно об этом в доке к проге описано), так и с SeggerOS.

Очень рекомендую.
PS. Забыл добавить, что оно, к сожалению, толко с J-Link работает. Но о том, как переделать ST-Link в нормальный J-Link, тут уже пол форума исписано.

_________________
Мои поделки
http://www.fun-electronic.net/


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FreeRTOS Отладка задач
СообщениеДобавлено: 25 окт 2017, 00:34 
Заглядывает иногда

Зарегистрирован: 25 апр 2011, 01:46
Сообщения: 121
.


Последний раз редактировалось Qic 22 май 2019, 00:18, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FreeRTOS Отладка задач
СообщениеДобавлено: 25 окт 2017, 00:36 
Старожил
Аватара пользователя

Зарегистрирован: 29 янв 2010, 15:41
Сообщения: 1127
Откуда: Германия
Qic писал(а):
MasterAlexei писал(а):
Очередной велосипед?

Вот знаете, захотелось чтобы в терминале с железкой по команде "делай раз" железка сообщала состояние.
На счёт Segger пробовал но как-то вскользь, Segger System Viewer не пробовал. Спасибо.

Оличие System Viewer от вашего "по команде "делай раз" " в том, что у вас на это тратится драгоценное время процессора, а у System Viewer затраты минимальные, так как используется SWD интерфейс и RTT механизм, который очень даже незаметно работает, не тратя при этом никакой переферии (ну кроме SWD пинов).

_________________
Мои поделки
http://www.fun-electronic.net/


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FreeRTOS Отладка задач
СообщениеДобавлено: 25 окт 2017, 00:40 
Старожил
Аватара пользователя

Зарегистрирован: 29 янв 2010, 15:41
Сообщения: 1127
Откуда: Германия
Qic писал(а):
Это не вопрос, хоть как измажу. Задача изначально подкупала своей простотой - стырить размер стека из функции его инициализации.

Так и в чем проблема то? Знаете, где стек начинается, знаете, где заканчивается. Знаете, чем он изначально заполнен. Так и "по команде" с конца стека идете пока в нем вдруг не появятся какие то левые значения, отличные от того маркера (0xAA или 0x55), вот вам и место, до куда доходит использование. Вычитываем адрес конца от найденного адреса несоответствия, и получаем процент.

_________________
Мои поделки
http://www.fun-electronic.net/


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FreeRTOS Отладка задач
СообщениеДобавлено: 25 окт 2017, 00:46 
Заглядывает иногда

Зарегистрирован: 25 апр 2011, 01:46
Сообщения: 121
.


Последний раз редактировалось Qic 22 май 2019, 00:16, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FreeRTOS Отладка задач
СообщениеДобавлено: 25 окт 2017, 00:52 
Старожил
Аватара пользователя

Зарегистрирован: 29 янв 2010, 15:41
Сообщения: 1127
Откуда: Германия
Qic писал(а):
Я не думаю что такое "сканирование памяти" стоит проворачивать постоянно. Проще уж исходники поправить и запоминать явный размер стека при создании задачи.

Я не совсем понимаю вашу проблему, если честно. При создании задачи ваш стек вам и так известен. Это параметр в функцию создания задачи. Вы же сами его туда и записали, при программировании вызова создания задачи.
Этот параметр - это размер стека, который надо умножить на 4, чтоб в байтах получить его.

А процесс использования стека именно конкретной задачи кроме как сканированием, никак больше не узнать. Ну или постоянно считывать регистр указателя стека.
Потому как при каждом вызове любой функции, указатель стека перебегает ближе к концу его, и при выходе из стека - обратно. И чем глубже идет вызов функций (при рекурсивных, особенно), тем дальше идет указатель. Вплоть до выхода за пределы, если вы указали маленький размер стека.

_________________
Мои поделки
http://www.fun-electronic.net/


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FreeRTOS Отладка задач
СообщениеДобавлено: 25 окт 2017, 00:56 
Заглядывает иногда

Зарегистрирован: 25 апр 2011, 01:46
Сообщения: 121
.


Последний раз редактировалось Qic 22 май 2019, 00:16, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FreeRTOS Отладка задач
СообщениеДобавлено: 25 окт 2017, 01:21 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 3112
Не-не, господа, не путайте АРМ-стек функций и стек РТОС. У них разное назначение и разные точки отсчета. Стек РТОС не управляется аппаратно, в отличие от стека ядра. Стеком РТОС управляет менеджер памяти (одна из моделей heap1, heap2 и тд), и "растет" вверх от начала кучи. Я на форуме ранее несколько раз выкладывалскрины стеков, там было наглядно видно.
Во-вторых, все переменные в функции задачи, помеченные как static (либо глобальные), будут размещены не в стеке задачи, а в области статичных переменных, находящейся вне кучи (heap).
Под браузером памяти я имел ввиду другой, который в ПО отладки. И на CoIDE далеко не уедешь...

По поводу вычисления загрузки процессора - она вычисляется как процент времени нахождения в задаче Idle (бездействие). И может быть правильно вычислена только в том случае, если работой проги предусматривается остановка всех задач и нахождение в Idle.
Процент использования памяти из кучи вычисляется как наибольший адрес дескриптора задачи или очереди, семафора, назначаемый при создании, плюс выделяемый размер стека.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FreeRTOS Отладка задач
СообщениеДобавлено: 25 окт 2017, 02:37 
Старожил
Аватара пользователя

Зарегистрирован: 29 янв 2010, 15:41
Сообщения: 1127
Откуда: Германия
BusMaster писал(а):
... Стеком РТОС управляет менеджер памяти (одна из моделей heap1, heap2 и тд), и "растет" вверх от начала кучи.

У меня свой менеджер памяти, из которого FreeRTOS посредством вызова malloc запрашивает для задач области памяти для стека. и в зависимости от того, в какой момент создается задача, этот стек может лежать где угодно в области, которой заправляет мой менеджер памяти.

BusMaster писал(а):
Под браузером памяти я имел ввиду другой, который в ПО отладки. И на CoIDE далеко не уедешь...

Ozone рекомендую. От того же зеггера.

BusMaster писал(а):
Процент использования памяти из кучи вычисляется как наибольший адрес дескриптора задачи или очереди, семафора, назначаемый при создании, плюс выделяемый размер стека.

У меня менеджер памяти так же еще и обратно от проги память принимает, если прога вызвала free. И получается, что в начале кучи могут быть так же свободные куски памяти. И в конце кучи могут быть и занятые куски памяти.

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

_________________
Мои поделки
http://www.fun-electronic.net/


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FreeRTOS Отладка задач
СообщениеДобавлено: 25 окт 2017, 02:45 
Заглядывает иногда

Зарегистрирован: 15 ноя 2015, 12:11
Сообщения: 168
BusMaster писал(а):
Не-не, господа, не путайте АРМ-стек функций и стек РТОС. У них разное назначение и разные точки отсчета. Стек РТОС не управляется аппаратно, в отличие от стека ядра.

Возможно это платформенно-зависимо, но на rx600, к примеру, стеки задач "подсовываются" МК при переключении задач и ему без разницы по какому участку памяти "ходить" - по стеку супервайзора, по пользовательскому или по динамически выделенному стеку задачи. Иными словами, в конкретном случае, - нахожу больше совпадений чем различий. И, кстати, параметр ешё нужно для платформы определять portSTACK_GROWTH - либо отрицательный либо положительный, в зависимости от того как МК работает со стеком - "вверх" или "вниз". В зависимости от этого параметра последовательность выделения памяти для стека задачи и её TCB различается - чтобы стек не "переехал" свой собственный TCB и "патологоанатому" легче было постмортем аутопсиями заниматься в случае чего.
BusMaster писал(а):
Стеком РТОС управляет менеджер памяти (одна из моделей heap1, heap2 и тд), и "растет" вверх от начала кучи.

Вот тут планировщику должно быть обидно, как мне кажется. ;-) И portSTACK_GROWTH так просто из песни не выкинуть.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FreeRTOS Отладка задач
СообщениеДобавлено: 25 окт 2017, 04:24 
Старожил
Аватара пользователя

Зарегистрирован: 04 окт 2011, 10:19
Сообщения: 1650
Любят наши люди на пустом месте дискуссию разводить.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FreeRTOS Отладка задач
СообщениеДобавлено: 25 окт 2017, 09:07 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 3112
MasterAlexei писал(а):
У меня свой менеджер памяти, из которого FreeRTOS посредством вызова malloc запрашивает для задач области памяти для стека. и в зависимости от того, в какой момент создается задача, этот стек может лежать где угодно в области, которой заправляет мой менеджер памяти.
...
И получается, что в начале кучи могут быть так же свободные куски памяти. И в конце кучи могут быть и занятые куски памяти.

Этак получается большая фрагментация памяти, и это может вызывать утечку памяти. То есть, однажды можно получить отказ в выделении памяти, несмотря на то, что свободного места в сумме предостаточно.

siarzhuk писал(а):
Возможно это платформенно-зависимо, но на rx600,.

Вы не путайте платформы. Мы тут обсуждаем ARM-Cortex, конкретно на реализации STM.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FreeRTOS Отладка задач
СообщениеДобавлено: 25 окт 2017, 11:29 
Старожил
Аватара пользователя

Зарегистрирован: 29 янв 2010, 15:41
Сообщения: 1127
Откуда: Германия
BusMaster писал(а):
Этак получается большая фрагментация памяти, и это может вызывать утечку памяти. То есть, однажды можно получить отказ в выделении памяти, несмотря на то, что свободного места в сумме предостаточно.

Не без этого. Но есть компромисс - минимально возможный размер выделяемого места. в зависимости от размера кучи выставляется индивидуально.

_________________
Мои поделки
http://www.fun-electronic.net/


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FreeRTOS Отладка задач
СообщениеДобавлено: 25 окт 2017, 12:18 
Заглядывает иногда

Зарегистрирован: 25 апр 2011, 01:46
Сообщения: 121
.


Последний раз редактировалось Qic 22 май 2019, 00:16, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: [РЕШЕНО] FreeRTOS Отладка задач (v9 stm32f1)
СообщениеДобавлено: 28 окт 2017, 23:51 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 3112
Возвращаясь к теме. Возможно, автора заинтересует простая функция для определения оставшегося свободного места в куче. xPortGetFreeHeapSize() - она возвращает значение свободного места в байтах. Её функционал прописан в файле модели памяти. А так же для модели heap1 есть глобальная переменная xNextFreeByte, содержащая значение занятой памяти в байтах.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: [РЕШЕНО] FreeRTOS Отладка задач (v9 stm32f1)
СообщениеДобавлено: 29 окт 2017, 03:34 
Заглядывает иногда

Зарегистрирован: 25 апр 2011, 01:46
Сообщения: 121
.


Последний раз редактировалось Qic 22 май 2019, 00:16, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: [РЕШЕНО] FreeRTOS Отладка задач (v9 stm32f1)
СообщениеДобавлено: 29 окт 2017, 16:30 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 3112
Да, всё в порядке, это - начальное значение. Используется модель heap2. В процессе работы переменная xFreeBytesRemaining изменяется в меньшую сторону.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 25 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB