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

 
 
> STM32F407: Ethernet + CHECKSUM_BY_SOFTWARE
k000858
сообщение Apr 28 2017, 08:13
Сообщение #1


Местный
***

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



В проект включены LwIP (1.4.0) и FreeRTOS. Ethernet интерфейс работает на прерывании, которое освобождает семафору. Задача по освобождению семафоры забирается пакеты.

Версия проекта со включенной ETH_CHECKSUM_BY_HARDWARE (в драйвере Ethernet и LwIP стеке) хорошо выдерживает тест на шторм трафика, ничего не виснет
Версия проекта с софтовым расчетом контрольной суммы при тесте на шторм трафика виснет: Ethernet прерывание перестает выстреливать при получении пакетов, LwIP перестает получать пакеты. необходима именно эта версия проекта.

Кто нибудь сталкивался с таким эффектом? есть идеи как можно подебажить проблему?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Axel
сообщение Apr 28 2017, 11:09
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 480
Регистрация: 21-11-04
Пользователь №: 1 188



Фраза:
Цитата(k000858 @ Apr 28 2017, 11:13) *
Версия проекта со включенной ETH_CHECKSUM_BY_HARDWARE (в драйвере Ethernet и LwIP стеке)...

наталкивает на мысль, что доступ к софтовой считалке происxодит из разных потоков. Я бы начал поиск граблей с этого места.
Go to the top of the page
 
+Quote Post
Forger
сообщение Apr 28 2017, 11:39
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(Axel @ Apr 28 2017, 14:09) *
наталкивает на мысль, что доступ к софтовой считалке происxодит из разных потоков. Я бы начал поиск граблей с этого места.

Уже было озвучено sm.gif


Цитата(jcxz @ Apr 28 2017, 13:46) *
Не понял - и для чего это? Что за deadlines и какой от них прок?

Если важна предсказуемость времени доступности ресурса (deadline), то вместо семафора нужно пользовать мьютекс, он как минимум будет бороться с инверсией приоритетов,
когда занятый ресурс ожидают несколько задач с разными приоритетами и может возникнуть взаимоблокировка (deadlock).

В простейших случаях, когда лишь одна задача ожидает объект (например, пришел байт в прерывании, который положили в буфер и просигналили об этом),
как раз лучше использовать семафор (причем, в случае с байтом по uart лучше использовать счетный семафор).

Кстати, во FreeRTOS для этого есть более быстрый метод - уведомление (notify), он жрет заметно меньше ресурсов.

Другими словами: использовать семафор как средство разделения общего ресурса - это неправильно в разных смыслах.
Цитирую: "Мьютекс отличается от семафора тем, что только владеющий им поток может его освободить, т.е. перевести в отмеченное состояние." (из википедии)


Ну, теперь понятно? sm.gif


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 28 2017, 12:02
Сообщение #4


Гуру
******

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



Цитата(Forger @ Apr 28 2017, 13:39) *
Если важна предсказуемость времени доступности ресурса (deadline), то вместо семафора нужно пользовать мьютекс, он как минимум будет бороться с инверсией приоритетов,
когда занятый ресурс ожидают несколько задач с разными приоритетами и может возникнуть взаимоблокировка (deadlock).

Вообще-то - взаимоблокировка - это нечто другое. Взаимоблокировка - это баг в ПО.
Это когда например задача1 владеет неким ресурсом1 и в это время пытается занять ресурс2, занятый задачей2. Она соответственно уходит в ожидание. И в этот время задача2 если попытается занять ресурс1, то вот тут как раз и возникнет deadlock - взаимоблокировка.
Сомневаюсь, что мьютекс спасёт от такого.

А вот уже инверсия приоритетов задач - это уже третье. laughing.gif
И не уверен что мьютекс спасёт от неё.

Цитата(Forger @ Apr 28 2017, 13:39) *
В простейших случаях, когда лишь одна задача ожидает объект (сигнал семафора или освобождение мьютекса), как раз лучше использовать семафор, бинарный (двоичный) семафор.
Другими словами: использовать семафор как средство разделения общего ресурса - это неправильно в разных смыслах.

Уже лет 10 пишу под uCOS-II. Куча разного ПО. И не только я (в группе разработчиков). Почти везде для разделения ресурсов используем семафоры (в некоторых ПО - по несколько десятков семафоров и почти десяток задач), устройств десятки тысяч уже у заказчиков работают - и всё ок. Странно, да? rolleyes.gif

Цитата(Forger @ Apr 28 2017, 13:39) *
Кстати, во FreeRTOS для этого есть более быстрый метод - уведомление (notify), он жрет заметно меньше ресурсов.

В uCOS для этого есть mailbox wink.gif
Go to the top of the page
 
+Quote Post
Forger
сообщение Apr 28 2017, 13:00
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(jcxz @ Apr 28 2017, 15:02) *
Вообще-то - взаимоблокировка - это нечто другое. Взаимоблокировка - это баг в ПО.
Это когда например задача1 владеет неким ресурсом1 и в это время пытается занять ресурс2, занятый задачей2. Она соответственно уходит в ожидание. И в этот время задача2 если попытается занять ресурс1, то вот тут как раз и возникнет deadlock - взаимоблокировка.
Сомневаюсь, что мьютекс спасёт от такого.

Если приоритеты задач разные, то спасет. Но для борьбы с инверсией приоритетов существуют разные методы. Не всякий метод может помочь.
Я лично не сталкивался с таким, т. к. всегда всячески избегал подобных построений проекта.
Но тем не менее, лишь в мьютекс заложен механизм борьбы с подобными бедами.

Цитата
А вот уже инверсия приоритетов задач - это уже третье. laughing.gif

В данном случае первое является лишь причиной, а второе - следствием, но, однако, сути это не меняет wink.gif

Цитата
Уже лет 10 пишу под uCOS-II. Куча разного ПО. И не только я (в группе разработчиков). Почти везде для разделения ресурсов используем семафоры (в некоторых ПО - по несколько десятков семафоров и почти десяток задач), устройств десятки тысяч уже у заказчиков работают - и всё ок. Странно, да? rolleyes.gif

У вас видать были приняты такие непривычные правила, которые со временем переросли в традицию, полагаю, что лет через 20 это превратится уже в некую "религию" ...
Особенно сложно новичкам - они всегда поддаются чужим необычным традициям. Через 10 лет чужая традиция становится как "родная" biggrin.gif


Цитата
В uCOS для этого есть mailbox wink.gif

В uCOS-1 и uCOS-2 очередь сообщений глубиной 1 называется Message Mailbox, остальные - Message Queue
В uCOS-3 Message Mailbox, упразднили и вместо нее нужно уже использовать Message Queue с параметром - один.
Однако, любая очередь сообщений - самый "тяжелый" ресурс в любой RTOS. Т. е. в данном случае это неправильное сравнение.
Я же говорю про примитивное уведомление задачи, в этом случае не создаются никакие объекты, для хранения используется лишь 4 байта внутри TCB задачи, которую нужно "уведомить".
Эта фишка появилась во FreeRTOS сравнительно недавно, она реально экономит ресурсы камня (такты, флеш и озу).
В uCOS такого нет.


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 28 2017, 13:59
Сообщение #6


Гуру
******

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



Цитата(Forger @ Apr 28 2017, 15:00) *
Если приоритеты задач разные, то спасет.

Каким образом? Мьютекс спасёт от программного бага??? wacko.gif Вы уверены, что правильно прочитали мой пример?

Цитата(Forger @ Apr 28 2017, 15:00) *
Но тем не менее, лишь в мьютекс заложен механизм борьбы с подобными бедами.

Имхо - у Вас путаница в терминологии. Я знаю что такое инверсия приоритетов. Это есть и в других ОС. Мьютексы от этого не спасают. Спасает другое.

Цитата(Forger @ Apr 28 2017, 15:00) *
Я же говорю про примитивное уведомление задачи, в этом случае не создаются никакие объекты, для хранения используется лишь 4 байта внутри TCB задачи, которую нужно "уведомить".
Эта фишка появилась во FreeRTOS сравнительно недавно, она реально экономит ресурсы камня (такты, флеш и озу).
В uCOS такого нет.

Я сравнивал исходный код FreeRTOS и uCOS-II. Второй - гораздо компактнее. Можете сами убедиться. Так что не надо сказки рассказывать.
И я не знаю как там в uCOS-III, но mailbox-ы в uCOS-II - это совсем не очереди сообщений. Для них совершенно отдельных набор своих функций существует.
И исходя из чисто функционала, mailBox в uCOS-II - это самый лёгкий тип объекта синхронизации. Что там может быть тяжёлого? Одна переменная для указателя. Если в неё пишется !=NULL - объект переходит в сигнальное состояние. При чтении она обнуляется и переходит в несигнальное состояние. Всё.
Go to the top of the page
 
+Quote Post
Forger
сообщение Apr 28 2017, 14:19
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(jcxz @ Apr 28 2017, 16:59) *
Каким образом? Мьютекс спасёт от программного бага??? wacko.gif Вы уверены, что правильно прочитали мой пример?

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


Цитата
Имхо - у Вас путаница в терминологии.
У меня как раз все чотко wink.gif
Однако, речь о совсем другом - о разнице в применении мьютекса и семафора: одним делают одно, другим - другое.
По крайней мере так было задумано теми, кто их придумал. Иначе они бы были одним и тем же и назывались одинаково.

Цитата
Я сравнивал исходный код FreeRTOS и uCOS-II. Второй - гораздо компактнее. Можете сами убедиться.
Вполне возможно так и есть.
Я могу сравнить время реакции и размер кода для обычного ресурса и уведомления. Разница существенная. Это в пределах чисто FreeRTOS.
У ТС стоит как раз FreeRTOS, ни о какой uCos речь не велось. При чем здесь она?

Цитата
При чтении она обнуляется и переходит в несигнальное состояние. Всё.

Я не поленился и залез в код os_mbox.c (uCos-2 v2.90).
Нужно объявлять объект "ящика" через OSMboxCreate, заранее создав его экземпляр. Т.е. тратим ОЗУ.
В остальном при передачи и ожидании событий для этого ящика, в соотв. функции нужно передавать указатель на него, что мало чем отличается от семафора или мьютекса.
Во FreeRTOS для использования уведомлений не нужно создавать никаких объектов, кроме самой задачи, которая ждет уведомления.
Передавать можно не только сам факт уведомления (бинарный семафор), но и 4-байтное значение (аналог MailBox в uCos).
Цитируя ваши же слова: "не надо сказки рассказывать" sm.gif


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 28 2017, 15:43
Сообщение #8


Гуру
******

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



Цитата(Forger @ Apr 28 2017, 16:19) *
мьютекс поможет в устранении этого "бага", а вот семафор уже не поможет.

Ещё раз: Каким образом???
Я знаю как это делается например в Win. Но там это свойство - всей системы объектов синхронизации. Вне зависимости от того, что это - мьютекс или event. Т.е. - не зависит от типа объекта.

Цитата(Forger @ Apr 28 2017, 16:19) *
Нужно объявлять объект "ящика" через OSMboxCreate, заранее создав его экземпляр. Т.е. тратим ОЗУ.

Это, к сожалению, так.
Go to the top of the page
 
+Quote Post
Forger
сообщение Apr 28 2017, 16:18
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(jcxz @ Apr 28 2017, 18:43) *
Ещё раз: Каким образом???

Очень просто - средствами самой os, а точнее, встроенными механизмами борьбы с инверсией приоритетов: протокол наследования приоритета (Priority inheritance protocol), протокол увеличения приоритета (Priority ceiling protocol).
Например, вот как это сделано на примере tnkernel.:

Возвращаясь к началу разговора:
Цитата
Мютекс - это объект RTOS, предназначенный для обеспечения конкурентного доступа к общим ресурсам.
Мютекс представляет собой двоичный семафор с дополнительными свойствами (например, протоколы обхода неограниченной инверсии приоритетов).


Цитата(jcxz @ Apr 28 2017, 18:43) *
Это, к сожалению, так.

А чего тогда было спорить? wink.gif


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 28 2017, 19:58
Сообщение #10


Гуру
******

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



Цитата(Forger @ Apr 28 2017, 18:18) *
Очень просто - средствами самой os, а точнее, встроенными механизмами борьбы с инверсией приоритетов:

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

Цитата(Forger @ Apr 28 2017, 18:18) *
А чего тогда было спорить? wink.gif

Спорить о чём? Где я утверждал, что для объектов синхронизации uCOS не нужна ОЗУ??? wacko.gif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- k000858   STM32F407: Ethernet + CHECKSUM_BY_SOFTWARE   Apr 28 2017, 08:13
- - Forger   Цитата(k000858 @ Apr 28 2017, 11:13) осво...   Apr 28 2017, 09:24
|- - jcxz   Цитата(Forger @ Apr 28 2017, 11:24) ...   Apr 28 2017, 09:33
|- - k000858   Цитата(Forger @ Apr 28 2017, 12:24) Очень...   Apr 28 2017, 09:44
|- - Forger   Цитата(k000858 @ Apr 28 2017, 12:44) к со...   Apr 28 2017, 09:58
|- - jcxz   Цитата(Forger @ Apr 28 2017, 11:58) В при...   Apr 28 2017, 10:46
||- - Forger   Цитата(jcxz @ Apr 28 2017, 22:58) Вы утве...   Apr 28 2017, 20:41
||- - jcxz   Цитата(Forger @ Apr 28 2017, 22:41) Переч...   Apr 28 2017, 21:10
||- - Forger   Цитата(jcxz @ Apr 29 2017, 00:10) ....неб...   Apr 28 2017, 22:40
||- - jcxz   Цитата(Forger @ Apr 29 2017, 00:40) Когда...   Apr 29 2017, 08:07
||- - Forger   Цитата(jcxz @ Apr 29 2017, 11:00) Если до...   Apr 29 2017, 08:09
||- - jcxz   Цитата(Forger @ Apr 29 2017, 10:09) Если ...   Apr 29 2017, 08:15
||- - Forger   Цитата(jcxz @ Apr 29 2017, 11:15) Так как...   Apr 29 2017, 08:21
||- - jcxz   Цитата(Forger @ Apr 29 2017, 10:21) Справ...   Apr 29 2017, 08:26
||- - Forger   Цитата(jcxz @ Apr 29 2017, 11:23) Разжуйт...   Apr 29 2017, 08:27
||- - jcxz   Цитата(Forger @ Apr 29 2017, 10:27) У мен...   Apr 29 2017, 09:00
||- - Forger   Цитата(jcxz @ Apr 29 2017, 12:00) Последн...   Apr 29 2017, 09:05
||- - jcxz   Цитата(Forger @ Apr 29 2017, 11:05) Но су...   Apr 29 2017, 09:36
||- - Forger   Цитата(jcxz @ Apr 29 2017, 12:36) Почитал...   Apr 29 2017, 13:20
||- - jcxz   Цитата(Forger @ Apr 29 2017, 15:20) Я рад...   Apr 29 2017, 20:26
||- - Forger   Цитата(jcxz @ Apr 29 2017, 23:26) И утвер...   Apr 29 2017, 21:44
||- - jcxz   Цитата(Forger @ Apr 29 2017, 23:44) Вообщ...   May 3 2017, 09:01
||- - Forger   Цитата(jcxz @ May 3 2017, 12:01) У меня т...   May 3 2017, 09:26
||- - jcxz   Цитата(Forger @ May 3 2017, 11:26) Вот, п...   May 3 2017, 09:46
||- - Forger   Цитата(jcxz @ May 3 2017, 12:46) У меня э...   May 3 2017, 09:56
||- - jcxz   Цитата(Forger @ May 3 2017, 11:56) И как ...   May 3 2017, 10:05
||- - Forger   Цитата(jcxz @ May 3 2017, 13:05) У меня ж...   May 3 2017, 11:07
|- - scifi   Цитата(Axel @ Apr 28 2017, 14:09) наталки...   Apr 28 2017, 13:10
|- - Forger   Цитата(scifi @ Apr 28 2017, 16:10) Знаете...   Apr 28 2017, 13:16
||- - scifi   Цитата(Forger @ Apr 28 2017, 16:16) Дабы ...   Apr 28 2017, 18:40
||- - Forger   Цитата(scifi @ Apr 28 2017, 21:40) Может ...   Apr 28 2017, 19:28
||- - scifi   Цитата(Forger @ Apr 28 2017, 22:28) Кстат...   Apr 29 2017, 04:29
|- - Axel   Цитата(scifi @ Apr 28 2017, 16:10) Знаете...   Apr 28 2017, 14:16
- - k000858   пока удалось выяснить вот что: 1) при шторме UDP т...   May 3 2017, 11:13
|- - Forger   Цитата(k000858 @ May 3 2017, 14:13) пока ...   May 3 2017, 11:22
|- - k000858   Цитата(Forger @ May 3 2017, 14:22) Я бы э...   May 3 2017, 11:29
|- - Forger   Цитата(k000858 @ May 3 2017, 14:29) Ниже ...   May 3 2017, 11:36
|- - jcxz   Цитата(Forger @ May 3 2017, 13:36) Вероят...   May 3 2017, 11:56
- - k000858   Может быть кому то поможет. Нашлось решение пробле...   May 23 2017, 10:15


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

 


RSS Текстовая версия Сейчас: 18th August 2025 - 04:04
Рейтинг@Mail.ru


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