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

 
 
> STM32F407: Ethernet, HAL + Lwip
k000858
сообщение Jan 12 2017, 07:11
Сообщение #1


Местный
***

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



Всем привет.

Кто изучал драйвер Ethernet'а, идущий с HAL библиотеками (вариант для FreeRTOS: ETHERNET прерывание релизит семафору, которая парсится в отдельной realtime задаче ОС)? Что будет при переполнении указанного количества приёмных буферов? Ошибка DMA обработается, но не будет ли DMA записывать данные дальше (портить память) или это исключено т.к. указывается в размер буферов в настройках DMA?

Имею следующую ситуацию: устройство с Ethernet в параллельной задаче (с меньшим приоритетом чем Ethernet) копирует данные (memcpy функцией) с внутренней FLASH контроллера. При шторме устройства Ethernet трафиком, в какой то раз данные копируются неправильно (временно нарушается адресация флэш - откуда копировать, но до конца процесса восстанавливается), в результате часть данных получается битыми.

Пока подозрения на ошибку в Ethernet драйверах либо LwIP стеке (v1.4.1).

То есть многократное срабатывание прерывания Ethernet + работа задачи по сохранению принятого по Ethernet пакету приводит к сбою работы memcpy

Нехватка памяти для RTOS и его задач контролируется соответствующими отладочными функция FreeRTOS

Может у кого то будут умные мысли, как можно сузить круг поиска бага?
Как еще подиагностировать. Повторить ситуацию непросто, получается ни каждый раз.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SasaVitebsk
сообщение Jan 16 2017, 14:22
Сообщение #2


Гуру
******

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



В зависимости от текста... Как правило непредсказуемыми последствиями...
Здесь давече была тема про атомарный доступ к таким переменным. Не хочу вступать в полемику, так как в программировании, одну и туже задачу можно десятком способов решить...
Я обычно решаю так:
Есть задачи А, Б, С. Например задача А выставляет какой то запрос флагом фА. Задачи Б и С могут его прочитать, но не сбросить! Задача Б по флагу фА подтверждает запрос выставив флаг фБ. По флагу фБ задача А сбрасывает флаг фА.
То есть Одна задача только читает, вторая только пишет. Найболее яркий пример реализации в протоколе centronix.
Если всё же не избежать взаимных колизий, то использую защищённую секцию, либо средства самой ОС. Ну в зависимости, от частоты события...
===
Ну приведу классическую работу с кольцевым буфером:
1. При поступлении символа либо пакета, в прерывании двигается хвост очереди tail.
2. В задаче, после обработки пакета - двигается голова очереди head.
Вроде всё класс. Но вам требуется определить размер доступных данных... Ну типа так..
len = tail - head;
if(len <0) len += sizebuf;
....
И здесь видно, что во время операции len = tail - head, значение tail может измениться в прерывании (например пришёл пакет, и указатель сдвинулся по кольцу). В результате вы можете получить значение совершенно неверное. Дабы это предотвратить, вы должны например запретить прерывание на эту операцию. Либо приостановить планировщик, если речь не о прерывании, а о задачах.

Для FreeRTOS:
taskENTER_CRITICAL() — вход в критическую секцию
taskEXIT_CRITICAL() — выход из критической секции
vTaskSuspendAll() - Приостановка планировщика
xTaskResumeAll() - возобновления работы планировщика

Если приложение написано верно, то таких мест будет крайне мало... У меня их единицы. Но всё же они есть.


Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- k000858   STM32F407: Ethernet, HAL + Lwip   Jan 12 2017, 07:11
- - pitt   Цитата(k000858 @ Jan 12 2017, 02:11) Пока...   Jan 12 2017, 15:38
- - Мур   Сам долго мучился с HAL, пока не скачал книгу Mas...   Jan 12 2017, 15:51
- - k000858   спасибо за советы. определенный смысл в них конечн...   Jan 13 2017, 03:43
|- - pitt   Цитата(k000858 @ Jan 12 2017, 22:43) спас...   Jan 13 2017, 13:13
- - SasaVitebsk   Насколько вы описали проблему, мне кажется, что пр...   Jan 13 2017, 18:12
|- - k000858   Цитата(SasaVitebsk @ Jan 13 2017, 21:12) ...   Jan 16 2017, 04:44
|- - Forger   Цитата(k000858 @ Jan 16 2017, 07:44) тако...   Jan 16 2017, 14:24
||- - SasaVitebsk   Цитата(Forger @ Jan 16 2017, 17:24) Лично...   Jan 16 2017, 21:16
||- - Aner   QUOTE (Forger @ Jan 16 2017, 18:24) Курим...   Jan 16 2017, 21:51
||- - Сергей Борщ   QUOTE (Aner @ Jan 16 2017, 23:51) С++ и е...   Jan 17 2017, 06:50
||- - SasaVitebsk   Цитата(Сергей Борщ @ Jan 17 2017, 09:50) ...   Jan 17 2017, 07:19
|||- - Forger   Синглтон я указал как самый популярный способ избе...   Jan 17 2017, 08:29
|||- - Сергей Борщ   QUOTE (SasaVitebsk @ Jan 17 2017, 09:19) ...   Jan 17 2017, 12:12
|||- - Forger   Цитата(Сергей Борщ @ Jan 17 2017, 15:12) ...   Jan 17 2017, 14:32
|||- - SasaVitebsk   Цитата(Forger @ Jan 17 2017, 17:32) Конеч...   Jan 17 2017, 15:42
||||- - Forger   Цитата(SasaVitebsk @ Jan 17 2017, 18:42) ...   Jan 17 2017, 15:58
|||- - Сергей Борщ   QUOTE (Forger @ Jan 17 2017, 16:32) Сингл...   Jan 18 2017, 09:18
|||- - Forger   Цитата(Сергей Борщ @ Jan 18 2017, 12:18) ...   Jan 18 2017, 09:48
||- - pitt   Цитата(Сергей Борщ @ Jan 17 2017, 01:50) ...   Jan 17 2017, 14:18
|- - pitt   Цитата(k000858 @ Jan 15 2017, 23:44) тако...   Jan 16 2017, 16:03
- - SasaVitebsk   Стиль написания, конструирование программы и язык ...   Jan 17 2017, 22:21
|- - Forger   Цитата(SasaVitebsk @ Jan 18 2017, 01:21) ...   Jan 17 2017, 23:00
|- - SasaVitebsk   Цитата(Forger @ Jan 18 2017, 02:00) По ст...   Jan 19 2017, 12:47
|- - scifi   Цитата(SasaVitebsk @ Jan 19 2017, 15:47) ...   Jan 19 2017, 12:59
|- - Forger   Цитата(SasaVitebsk @ Jan 19 2017, 15:47) ...   Jan 19 2017, 13:04
- - SasaVitebsk   Посмотрите с чего начиналась тема. Начали гнать на...   Jan 17 2017, 23:48
|- - Forger   Цитата(SasaVitebsk @ Jan 18 2017, 02:48) ...   Jan 18 2017, 00:13
|- - pitt   Цитата(Forger @ Jan 17 2017, 19:13) На С+...   Jan 18 2017, 13:43
|- - Forger   Цитата(pitt @ Jan 18 2017, 16:43) Вообще,...   Jan 18 2017, 19:31
|- - pitt   Цитата(Forger @ Jan 18 2017, 14:31) На са...   Jan 19 2017, 04:35
|- - Forger   Цитата(pitt @ Jan 19 2017, 07:35) Блажен,...   Jan 19 2017, 06:52
|- - pitt   Цитата(Forger @ Jan 19 2017, 01:52) А дру...   Jan 19 2017, 13:28
|- - Forger   Классика жанра: вопрос -> холивар -> срач -...   Jan 19 2017, 13:34
- - SasaVitebsk   На счёт грамотного проектирования - ктож с вами сп...   Jan 18 2017, 08:32
- - k000858   не соглашусь темы подобного рода создаю в части с...   Jan 19 2017, 16:31
|- - Forger   Цитата(k000858 @ Jan 19 2017, 19:24) не с...   Jan 19 2017, 16:34
|- - SasaVitebsk   Цитата(k000858 @ Jan 19 2017, 19:31) проб...   Jan 19 2017, 20:19
|- - k000858   Цитата(SasaVitebsk @ Jan 19 2017, 23:19) ...   Jan 20 2017, 05:54
|- - Forger   Цитата(k000858 @ Jan 20 2017, 08:54) В пр...   Jan 20 2017, 06:00
- - SasaVitebsk   Ну в принципе, здесь возможны 4 ошибки. 1. класси...   Jan 20 2017, 08:08
|- - Forger   Если проектировать код похожим образом (на C++ без...   Jan 20 2017, 08:20
- - SasaVitebsk   Уважаемый Forger. Мы вас уже поняли. Надо проект о...   Jan 20 2017, 12:22
|- - pitt   Цитата(SasaVitebsk @ Jan 20 2017, 07:22) ...   Jan 20 2017, 13:22
|- - Forger   Навеяло (ничего личного) ...   Jan 20 2017, 17:38
|- - pitt   Цитата(Forger @ Jan 20 2017, 12:38) Навея...   Jan 20 2017, 22:11
|- - Forger   Цитата(pitt @ Jan 21 2017, 01:11) По-види...   Jan 20 2017, 22:19
|- - pitt   Цитата(Forger @ Jan 20 2017, 17:19) Не ст...   Jan 21 2017, 04:19
- - k000858   все оказалось проще: в одной задаче действительно ...   Jan 23 2017, 07:09


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

 


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


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