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

 
 
> STM32F4 Ethernet + Dallas: перетягивание каната
k000858
сообщение Aug 27 2015, 04:15
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978



Всем привет.
Есть девайс : stm + 1-wire шина (реализованная аппаратным UART'ом) + ethernet (обслуживается стеком Lwip), управляется FreeRTOS.

Есть 2 задачи (есть и другие, но они на работу не влияют):
1) Обслуживание Ethernet (приоритет realtime (highest))
2) Обслуживание шины 1 wire. (задача выполняется раз в секунду с osDelay(1000)wink.gif Этапы:
- поиск устройств на шине
- запись инициализирующих данных (для каждого по серийнику из найденных)
- конвертация температуры (для всех)
- osDelay(100);
- конвертация напряжения/тока (для всех СКИП РОМ)
- osDelay(5);
- чтение памяти каждого датчика (по серийнику)

Если приоритет 2й задачи нормал или хай (ниже езернетного таска), езернет работает отлично (пинг без потерь, время ответа 1 мс), однако датчики Даллас работают с перебоем - видимо нарушаются задержки в протоколе общения (задержки аппаратные, т.к. 1-wire шина эмулируется ЮАРТом).
Если приоритет 2й задачи = приоритету езернета, езернет работает неситабильно, регулярно время ответа увеличивается до 10-100мс (при 3 датчика Даллас на шине 1-wire) (в этот момент видимо проц занят работой 2й задачи, по обслуживанию шины 1-wire).

Посоветуйте, плиз, как оптимизировать работу этих 2х задач, что бы задача 1 работала стабильно (с текущим приоритетом), задача 2 так же работала стабильно, выполняясь раз в секунду.



Второй вопрос по тему: FreeRTOS к девайсу прикрутил совсем недавно. Разбираюсь с распределением памяти. На данный момент определяюсь, сколько памяти отдать каждой задачи. Вроде как нужно определить функцию диагностики стэка ОС, которой определять, у какой задачи переполняется стек, увеличивать стек каждой задачи пока не прекратится переполнение. Верно? Как определить такую диагностическую функцию? не могу найти ее в исходниках. Как посчитать (хотя бы ориентировочно), сколько кучи выделить в целом ОС (configTOTAL_HEAP_SIZE) ? И влияет ли размер памяти, выделяемой для Ос на настройки стека/кучи всего Си проекта?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SasaVitebsk
сообщение Aug 27 2015, 04:59
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Есть понятие системного тика. Это время переключения м/у задачами. Чем оно меньше, тем больше накладных расходов на обслуживание ОС, но при этом, более равномерно, так сказать выполняются задачи.
Когда вы формируете задержки, то просто приостанавливается выполнение данной задачи.
Судя по всему, вам надо делать приоритеты задач равными. А системный тик уменьшать. Либо переносить часть работы второй задачи в прерывание (наверное я пошёл бы по этому пути).
Не совсем понятно, почему у вас нарушается работа Ethernet. Если честно.

Теперь по второму вопросу.
в файле FreeRTOSConfig включается опция контроля стека.
#define configCHECK_FOR_STACK_OVERFLOW 2
Можно поставить 0/1/2.
При 0, выключаете. При 1 осуществляется контроль указателя стека при переключении задачи в планировщике. То есть это не гарантирует 100% диагностики, так как стек может залезть а потом вернуться на место и всё будет Ok. При 2 стек заполняется определённым кодом, например 55 и проверяется реальный размер стека в момент переключения.
Рекомендуется выбрать режим 2. Задать заведомо больший размер стека, поработать значительное время в разных режимах и визуально оценить куда добрался стек. Потом подкорректировать его с запасом.
Размер кучи надо (можно) задавать максимально свободный. Если у вас ОС, то куда ещё может пойти эта куча кроме как на Ос? ))
Последнюю вашу фразу я, простите, не осилил.
Если у вас ОСь, то она сама распределяет стеки и сама работает с кучей.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- k000858   STM32F4 Ethernet + Dallas: перетягивание каната   Aug 27 2015, 04:15
|- - k000858   Цитата(SasaVitebsk @ Aug 27 2015, 07:59) ...   Aug 27 2015, 05:09
|- - SasaVitebsk   Цитата(k000858 @ Aug 27 2015, 08:09) При ...   Aug 27 2015, 05:57
- - mantech   Цитата(k000858 @ Aug 27 2015, 07:15) Есть...   Aug 27 2015, 06:17
|- - Сергей Борщ   Цитата(mantech @ Aug 27 2015, 09:17) Личн...   Aug 27 2015, 07:42
|- - jcxz   Цитата(mantech @ Aug 27 2015, 12:17) Личн...   Aug 27 2015, 08:03
- - SasaVitebsk   Как формируются задержки при работе с ОСью. Моё ви...   Aug 27 2015, 06:18
- - scifi   Цитата(k000858 @ Aug 27 2015, 07:15) Если...   Aug 27 2015, 06:23
|- - k000858   Цитата(scifi @ Aug 27 2015, 09:23) Дурдом...   Aug 27 2015, 06:53
|- - scifi   Цитата(k000858 @ Aug 27 2015, 09:53) може...   Aug 27 2015, 07:17
|- - SasaVitebsk   Цитата(k000858 @ Aug 27 2015, 09:53) пока...   Aug 27 2015, 07:39
- - bugdesigner   Проблема с нестабильностью 1-wire скорее всего свя...   Aug 27 2015, 07:07
|- - k000858   Цитата(bugdesigner @ Aug 27 2015, 10:07) ...   Aug 27 2015, 07:21
|- - jcxz   Цитата(k000858 @ Aug 27 2015, 13:21) в ка...   Aug 27 2015, 07:49
- - Сергей Борщ   Цитата(k000858 @ Aug 27 2015, 07:15) одна...   Aug 27 2015, 07:36
- - Сергей Борщ   Добавлено: так у вас там еще и ПДП. Тогда вообще н...   Aug 27 2015, 07:50
- - SasaVitebsk   Вот кидаю вам картинку, где виден плагин FreeRTOS,...   Aug 27 2015, 08:29
|- - k000858   Цитата(SasaVitebsk @ Aug 27 2015, 11:29) ...   Aug 27 2015, 08:33
|- - SasaVitebsk   Цитата(k000858 @ Aug 27 2015, 11:33) вот ...   Aug 27 2015, 08:46
|- - jcxz   Цитата(k000858 @ Aug 27 2015, 14:33) вот ...   Aug 27 2015, 08:53
- - k000858   а теперь вопрос на миллион!!! 1) задач...   Aug 27 2015, 09:02
|- - scifi   Цитата(k000858 @ Aug 27 2015, 12:02) при ...   Aug 27 2015, 09:32
|- - jcxz   Цитата(k000858 @ Aug 27 2015, 15:02) при ...   Aug 27 2015, 09:34
|- - k000858   Цитата(jcxz @ Aug 27 2015, 12:34) Ну если...   Aug 27 2015, 10:41
- - SasaVitebsk   Я бы никаких критических секций не делал. И даже н...   Aug 27 2015, 11:27
|- - k000858   Цитата(SasaVitebsk @ Aug 27 2015, 14:27) ...   Aug 28 2015, 02:47
|- - jcxz   Цитата(SasaVitebsk @ Aug 27 2015, 17:27) ...   Aug 28 2015, 16:23
- - k000858   Что бы не создавать вторую тему, задам вопрос в эт...   Aug 28 2015, 05:47
|- - scifi   Цитата(k000858 @ Aug 28 2015, 08:47) Подо...   Aug 28 2015, 06:37
|- - k000858   Цитата(scifi @ Aug 28 2015, 09:37) Сомнев...   Aug 28 2015, 06:50
|- - scifi   Цитата(k000858 @ Aug 28 2015, 09:50) в пр...   Aug 28 2015, 10:05
|- - kolobok0   Цитата(k000858 @ Aug 28 2015, 09:50) ...в...   Aug 28 2015, 16:31
- - k000858   появился еще вопрос от относительно ФрииРТОС: есть...   Sep 1 2015, 10:54
|- - kolobok0   Цитата(k000858 @ Sep 1 2015, 13:54) ... е...   Sep 1 2015, 11:20
- - SasaVitebsk   Переменные передаваемые при создании задачи служат...   Sep 1 2015, 18:37
- - k000858   весьма информативно. благодарю. исследование работ...   Sep 2 2015, 03:03
- - k000858   в процессе доработки столкнулся с зависанием некот...   Sep 2 2015, 06:50
|- - Сергей Борщ   Цитата(k000858 @ Sep 2 2015, 09:50) задач...   Sep 2 2015, 06:54
|- - jcxz   Цитата(k000858 @ Sep 2 2015, 12:50) Есть ...   Sep 2 2015, 06:59
- - k000858   да это понятное дело, что я могу сам сваять некий ...   Sep 2 2015, 07:02
|- - jcxz   Цитата(k000858 @ Sep 2 2015, 13:02) да эт...   Sep 3 2015, 03:45
- - k000858   Если мне необходимо выполнять некую задачу (наприм...   Sep 3 2015, 07:15
- - SasaVitebsk   Ну я так понимаю, что вам же не надо точно 1 сек? ...   Sep 4 2015, 05:22
|- - k000858   Цитата(SasaVitebsk @ Sep 4 2015, 08:22) Н...   Sep 4 2015, 08:07
- - SasaVitebsk   1. Я не совсем понял ф-ции osSemaphoreRelease/ osS...   Sep 7 2015, 06:01


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

 


RSS Текстовая версия Сейчас: 31st July 2025 - 19:51
Рейтинг@Mail.ru


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