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

 
 
> 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, 11:27
Сообщение #2


Гуру
******

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



Я бы никаких критических секций не делал. И даже не сталбы синхронизировать.
массив структур. 1-ая задача заполняет текущую структуру и передаёт сообщением указатель на неё 2-ой задаче.
2-ая отображает.
Если вторая работает быстрее первой, что логично, то по выполнению она засыпает, ожидая нового сообщения. В этом случае, в массиве требуется лишь 2 экземпляра структур.
Если вторая задача работает медленней первой, то количество структур надо рассчитать. Ну и иногда будут пропуски. Это некритично. Можно конечно усыплять и 2 задачи, но я бы не стал. Я придерживаюсь принципа регулярной работы с оборудованием и асинхронной её обработки.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Aug 28 2015, 16:23
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(SasaVitebsk @ Aug 27 2015, 17:27) *
Я бы никаких критических секций не делал. И даже не сталбы синхронизировать.
массив структур. 1-ая задача заполняет текущую структуру и передаёт сообщением указатель на неё 2-ой задаче.
2-ая отображает.
Если вторая работает быстрее первой, что логично, то по выполнению она засыпает, ожидая нового сообщения. В этом случае, в массиве требуется лишь 2 экземпляра структур.
Если вторая задача работает медленней первой, то количество структур надо рассчитать. Ну и иногда будут пропуски. Это некритично. Можно конечно усыплять и 2 задачи, но я бы не стал. Я придерживаюсь принципа регулярной работы с оборудованием и асинхронной её обработки.

Если не синхронизировать взаимодействие двух задач ОС, то рано или поздно из данных получится каша.
Любая задача (или её участок) в общем случае могут работать как быстрее другой так и медленее в зависимости от приоритета и вызываемых функций ОС ожидающих каких-либо событий.
Полагаться, что одна будет всегда быстрее, когда заранее не известен алгоритм работы, нельзя.
Только выполнение внутри критической секции можно считать предопределённым.

В описанном Вами случае, сколько Вы будете резервировать экземпляров структур под передачу?
Как задача 1 узнает что какая-то структура освободилась? Никак? Будет писать в неё наугад в тот момент когда задача 2 как раз обрабатывает данные этой структуры?
Как Вы передаёте сообщения между задачами? С помощью какого-то механизма ОС? Почему он лучше чем семафор/кр.секция?

То что Вы попытались описать называется FIFO (элементарная единица его - упомянутая структура).
Этот механизм можно применять для межзадачной синхронизации (и даже - межпроцессорной что тяжелее), но в данном случае он избыточен и неэффективен для данной задачи.
Если не синхронизировать межзадачный доступ к указателям записи/чтения FIFO, то в один прекрасный момент FIFO переполнится и будет каша.
А синхронизировать их - с помощью тех-же кр.секций или семафоров. rolleyes.gif
Ну или нужно гарантировать что задача 2 всегда успевает вычитать FIFO до его переполнения, тогда не нужна синхронизация доступа к указателям FIFO.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- k000858   STM32F4 Ethernet + Dallas: перетягивание каната   Aug 27 2015, 04:15
- - SasaVitebsk   Есть понятие системного тика. Это время переключен...   Aug 27 2015, 04:59
|- - 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
|- - k000858   Цитата(SasaVitebsk @ Aug 27 2015, 14:27) ...   Aug 28 2015, 02:47
- - 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 Текстовая версия Сейчас: 21st July 2025 - 04:06
Рейтинг@Mail.ru


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