Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 17.12.2017, 19:05  
-Alan-
Прописка
 
Аватар для -Alan-
 
Регистрация: 05.12.2008
Адрес: Россия, Омск
Сообщений: 145
Сказал спасибо: 39
Сказали Спасибо 29 раз(а) в 22 сообщении(ях)
-Alan- на пути к лучшему
По умолчанию Re: FreeRTOS?? Разобраться с демо проектом??

Сообщение от AlexWonder Посмотреть сообщение
Нашел 2 параметра для контроля за стеком
uxTaskGetStackHighWaterMark
https://www.freertos.org/uxTaskGetSt...WaterMark.html
vApplicationStackOverflowHook
https://www.freertos.org/Stacks-and-...-checking.html

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

У себя в проекте использую первую функцию для точного измерения требуемой глубины стэка. Получается достаточно удобно - можно запросить данные в процессе реальной работы. Функция возвращает не текущую позицию, а именно самую низкую границу, до куда добирался указатель стэка в процессе работы конкретного потока.

Вторая - vApplicationStackOverflowHook() - это скорее пост-фактум, что всё стало настолько плохо, что стэк был продавлен.

Я бы просто выставил какое-то бОльшее значение, а затем - эпизодически считывал сколько реально было занято.
Функция оказалась действительно удобной.
Реклама:
-Alan- вне форума  
Непрочитано 18.12.2017, 11:21  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 918
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: FreeRTOS?? Разобраться с демо проектом??

Можно вообще написать функцию, которая будет следить за размером стека остальных функций и сохранять максимальное значение. Потом собрать с нее данные и выкинуть из релиза
Easyrider83 вне форума  
Непрочитано 18.12.2017, 16:06  
CERGEI1982
Почётный гражданин KAZUS.RU
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
CERGEI1982 на пути к лучшему
По умолчанию Re: FreeRTOS?? Разобраться с демо проектом??

кто пример напишет
__________________
Глаза боятся,а руки делают.
CERGEI1982 вне форума  
Непрочитано 18.12.2017, 19:45  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 918
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: FreeRTOS?? Разобраться с демо проектом??

Я оказался не прав. Мы фактически не можем контролировать объем стека, используемый конкретной задачей. Есть TaskList команда, которая пишет форматированный вывод в буфер и указывает в том числе и размер стека, но это лишь тот размер, который мы сами указали при создании задачи. Сколько в реальности использовано мы не узнаем никогда. Единственный вариант - это ловить vApplicationStackOverflowHook и по нему находить задачу, которая его вызвала, чтобы добавить ей памяти в будущей. Не самый надежный способ, но честно говоря, у меня никаких проблем с этим нету. Все идеально работает даже с использованием stdio.
Easyrider83 вне форума  
Непрочитано 19.12.2017, 09:49  
NewWriter
Почётный гражданин KAZUS.RU
 
Аватар для NewWriter
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,490
Сказал спасибо: 401
Сказали Спасибо 2,216 раз(а) в 1,314 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию Re: FreeRTOS?? Разобраться с демо проектом??

Можем, можем, вы были правы ) Первая переменная в блоке TCB - ока как раз и указывает на адрес вершины стека. А 13-я переменная в TCB указывает на верхнюю границу стека. Разница между ними - есть оставшееся свободное место.
Первая переменная в TCB - её адрес хранится в переменной дескриптора очереди, поэтому получить доступ к интересующим ячейкам очень просто.
NewWriter вне форума  
Сказали "Спасибо" NewWriter
Easyrider83 (19.12.2017)
Непрочитано 19.12.2017, 12:29  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 918
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: FreeRTOS?? Разобраться с демо проектом??

NewWriter, можно подробнее? Лучше с примером.
Easyrider83 вне форума  
Непрочитано 19.12.2017, 16:34  
NewWriter
Почётный гражданин KAZUS.RU
 
Аватар для NewWriter
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,490
Сказал спасибо: 401
Сказали Спасибо 2,216 раз(а) в 1,314 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию Re: FreeRTOS?? Разобраться с демо проектом??

Я к сожалению щас со смартфона пишу. Но неделю назад мы через электронку общались с CERGEI1982, я ему отправлял там скрины со стеком задачи и блоком TCB и разъяснениями. Попросите Сергея, пусть выложит сюда их и текст пояснений. Сергей, там в письме от 10 декабря, где про процесс создания задачи.
Ну а уж как получить значение переменной по адресу, это уж Easyrider83 и сам умеет делать ))))
Кстати, Easyrider83, загляните в файл tasks.c и разгребите тип структурыtypedef struct tskTaskControlBlock узнаете кое-что интересоне

Последний раз редактировалось NewWriter; 19.12.2017 в 16:39.
NewWriter вне форума  
Сказали "Спасибо" NewWriter
Easyrider83 (19.12.2017)
Непрочитано 19.12.2017, 17:09  
CERGEI1982
Почётный гражданин KAZUS.RU
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
CERGEI1982 на пути к лучшему
По умолчанию Re: FreeRTOS?? Разобраться с демо проектом??

Ваше сообщение

Местоположение в ОЗУ конкретной задачи или очереди можно узнать по переменной дескриптора задачи, очереди, семафора. Значение этой переменной - и есть адрес TCB задачи или очереди. Причем, применительно к задаче, значение переменной по этому адресу (на который указывает переменная-дескриптор) - и есть адрес вершины стека, то есть ближайший свободный адрес, в который может быть что-то записано.

Как вообще выглядит процесс создания задачи? Рассмотрим на примере создания первой задачи в коде.
Вначале аллокатор ядра RTOS ищет ближайший свободный адрес в куче - так получается первый адрес - 0x20003AC8, равный концу стека задачи. Далее, запрашивает из кучи количество байт, равное указанному в параметре при создании размеру, умноженному на 4 - так получается начало стека задачи. На картинке стек задачи, равный 50*4=200 байт, выделен желтым фоном.
Затем, если в куче хватило места (т.е. вернулось не NULL), запрашивается еще некоторое количество байт для TCB. В случае успеха - появляется блок TCB (на картинке обведены красным, начиная от надписи *pxNewTCB). Адрес начала TCB - 0x20003B90, возвращается в переменную дескриптора задачи. Так что именно так можно и определить начало блока TCB.
Далее, в блок TCB записывается имя задачи (на скрине выделено серым фоном, а правее в ANSI-кодировке видно Green LED ). Затем в TCB записываются другие параметры, в частности, приоритет задачи - число 1 правее имени. Ну там еще кое-чего пишется, и указатель вершины стека еще смещается на величину выравнивания.
А затем в стеке задачи производится выделение места под все регистры ядра МК (на скрине выделено синим фоном), из-за чего указатель вершины стека смещается еще на 16 четырехбайтных слов выше. И теперь указатель вершины стека равен 0х20003B44, именно это число мы видим в начале TCB, а как мы помним, на начало TCB указывает дескриптор задачи. Значит, сразу после создания задачи, конкретно для этой задачи мы имеем 32*4=128 байта для нужд функций задачи.

Таким образом, прочитав значение из адреса, на который указывает дескриптор, и сравнив его с концом стека (значение адреса конца стека хранится в TCB, 13-ое слово от начала - выделено ярко-желтым фоном), можно определить, сколько места еще есть в стеке задачи в конкретный момент.
Миниатюры:
Нажмите на изображение для увеличения
Название: Без-имени-1.jpg
Просмотров: 0
Размер:	231.2 Кб
ID:	122954  
__________________
Глаза боятся,а руки делают.
CERGEI1982 вне форума  
Эти 2 пользователя(ей) сказали Спасибо CERGEI1982 за это сообщение:
Easyrider83 (19.12.2017), NewWriter (19.12.2017)
Непрочитано 19.12.2017, 17:22  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 918
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: FreeRTOS?? Разобраться с демо проектом??

Да, это понятно, в ручном режиме через дебаг можно сделать. А как бы это все счастье делать в автоматическом режиме? Например, отработал девайс пару суток, снял логи и определил размер использованного стека. Казалось бы, в чем проблема измерять, на сколько сместился указатель?
Easyrider83 вне форума  
Непрочитано 19.12.2017, 17:35  
CERGEI1982
Почётный гражданин KAZUS.RU
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
CERGEI1982 на пути к лучшему
По умолчанию Re: FreeRTOS?? Разобраться с демо проектом??

А вот трассировка там что то может? не до шел просто до изучения

Также пару картинок из кейла по размещению задач.

Да и еще встретился при изучении очередей и симуляции в кейле : точки останова стирайте и снова ставите в дебагере или кейл застопориться на одном месте.
Миниатюры:
Нажмите на изображение для увеличения
Название: 2017-12-19_21-32-28.png
Просмотров: 0
Размер:	62.1 Кб
ID:	122955   Нажмите на изображение для увеличения
Название: 2017-12-19_21-32-59.png
Просмотров: 0
Размер:	56.0 Кб
ID:	122956  
__________________
Глаза боятся,а руки делают.
CERGEI1982 вне форума  
 

Закладки
Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите разобраться с ОУ (приведение к "земле" напряжения со смещением) pittyalex Электроника - это просто 165 08.04.2015 00:55
Помогите разобраться с Контроллер Beckhoff CX1010-0021 wwwwwwww8 Микроконтроллеры, АЦП, память и т.д 9 20.05.2014 16:15
помогите разобраться в кварцах kobraxxx Информация по радиокомпонентам 9 05.01.2012 17:38
Помогите разобраться с PIC18F4550 и USB john2103 Микроконтроллеры, АЦП, память и т.д 26 02.08.2011 11:52
Как совместить Microblaze.bit с общим проектом ISE.bit? tixonia Цифровые сигнальные процессоры 1 28.12.2007 10:08


Часовой пояс GMT +4, время: 04:11.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot