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

 
 
> 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

Сообщений в этой теме
- 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, 16:59) Каким о...   Apr 28 2017, 14:19
||- - jcxz   Цитата(Forger @ Apr 28 2017, 16:19) мьюте...   Apr 28 2017, 15:43
||- - Forger   Цитата(jcxz @ Apr 28 2017, 18:43) Ещё раз...   Apr 28 2017, 16:18
||- - jcxz   Цитата(Forger @ Apr 28 2017, 18:18) Очень...   Apr 28 2017, 19:58
||- - 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 Текстовая версия Сейчас: 13th August 2025 - 14:53
Рейтинг@Mail.ru


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