|
STM32F4 Ethernet + Dallas: перетягивание каната |
|
|
|
Aug 27 2015, 04:15
|

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

|
Всем привет. Есть девайс : stm + 1-wire шина (реализованная аппаратным UART'ом) + ethernet (обслуживается стеком Lwip), управляется FreeRTOS. Есть 2 задачи (есть и другие, но они на работу не влияют): 1) Обслуживание Ethernet (приоритет realtime (highest)) 2) Обслуживание шины 1 wire. (задача выполняется раз в секунду с osDelay(1000)  Этапы: - поиск устройств на шине - запись инициализирующих данных (для каждого по серийнику из найденных) - конвертация температуры (для всех) - osDelay(100); - конвертация напряжения/тока (для всех СКИП РОМ) - osDelay(5); - чтение памяти каждого датчика (по серийнику) Если приоритет 2й задачи нормал или хай (ниже езернетного таска), езернет работает отлично (пинг без потерь, время ответа 1 мс), однако датчики Даллас работают с перебоем - видимо нарушаются задержки в протоколе общения (задержки аппаратные, т.к. 1-wire шина эмулируется ЮАРТом). Если приоритет 2й задачи = приоритету езернета, езернет работает неситабильно, регулярно время ответа увеличивается до 10-100мс (при 3 датчика Даллас на шине 1-wire) (в этот момент видимо проц занят работой 2й задачи, по обслуживанию шины 1-wire). Посоветуйте, плиз, как оптимизировать работу этих 2х задач, что бы задача 1 работала стабильно (с текущим приоритетом), задача 2 так же работала стабильно, выполняясь раз в секунду. Второй вопрос по тему: FreeRTOS к девайсу прикрутил совсем недавно. Разбираюсь с распределением памяти. На данный момент определяюсь, сколько памяти отдать каждой задачи. Вроде как нужно определить функцию диагностики стэка ОС, которой определять, у какой задачи переполняется стек, увеличивать стек каждой задачи пока не прекратится переполнение. Верно? Как определить такую диагностическую функцию? не могу найти ее в исходниках. Как посчитать (хотя бы ориентировочно), сколько кучи выделить в целом ОС (configTOTAL_HEAP_SIZE) ? И влияет ли размер памяти, выделяемой для Ос на настройки стека/кучи всего Си проекта?
|
|
|
|
|
 |
Ответов
|
Aug 28 2015, 16:23
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(SasaVitebsk @ Aug 27 2015, 17:27)  Я бы никаких критических секций не делал. И даже не сталбы синхронизировать. массив структур. 1-ая задача заполняет текущую структуру и передаёт сообщением указатель на неё 2-ой задаче. 2-ая отображает. Если вторая работает быстрее первой, что логично, то по выполнению она засыпает, ожидая нового сообщения. В этом случае, в массиве требуется лишь 2 экземпляра структур. Если вторая задача работает медленней первой, то количество структур надо рассчитать. Ну и иногда будут пропуски. Это некритично. Можно конечно усыплять и 2 задачи, но я бы не стал. Я придерживаюсь принципа регулярной работы с оборудованием и асинхронной её обработки. Если не синхронизировать взаимодействие двух задач ОС, то рано или поздно из данных получится каша. Любая задача (или её участок) в общем случае могут работать как быстрее другой так и медленее в зависимости от приоритета и вызываемых функций ОС ожидающих каких-либо событий. Полагаться, что одна будет всегда быстрее, когда заранее не известен алгоритм работы, нельзя. Только выполнение внутри критической секции можно считать предопределённым. В описанном Вами случае, сколько Вы будете резервировать экземпляров структур под передачу? Как задача 1 узнает что какая-то структура освободилась? Никак? Будет писать в неё наугад в тот момент когда задача 2 как раз обрабатывает данные этой структуры? Как Вы передаёте сообщения между задачами? С помощью какого-то механизма ОС? Почему он лучше чем семафор/кр.секция? То что Вы попытались описать называется FIFO (элементарная единица его - упомянутая структура). Этот механизм можно применять для межзадачной синхронизации (и даже - межпроцессорной что тяжелее), но в данном случае он избыточен и неэффективен для данной задачи. Если не синхронизировать межзадачный доступ к указателям записи/чтения FIFO, то в один прекрасный момент FIFO переполнится и будет каша. А синхронизировать их - с помощью тех-же кр.секций или семафоров. Ну или нужно гарантировать что задача 2 всегда успевает вычитать FIFO до его переполнения, тогда не нужна синхронизация доступа к указателям FIFO.
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|