Программистские задачки и хитрости

Re: Программистские задачки и хитрости

Сообщение Duhas » 19 апр 2020, 13:10

MX_Master писал(а):Гарантированно в разнопроцессорных чипах может быть только по обоюдному согласию.

там шо, память двухпортовая?
Duhas
Мастер
 
Сообщения: 1562
Зарегистрирован: 10 окт 2015, 23:25
Репутация: 237
Настоящее имя: Андрей

Re: Программистские задачки и хитрости

Сообщение UAVpilot » 20 апр 2020, 02:04

MX_Master писал(а):Правда, от третьих лиц она не спасёт, но хорошая.

Какие такие третьи лица?.. Сам программист чтоль? :)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
UAVpilot
Мастер
 
Сообщения: 20268
Зарегистрирован: 17 апр 2012, 14:58
Откуда: Москва
Репутация: 4854
Заслуга: c781c134843e0c1a3de9
Медальки:
Настоящее имя: Сергей

Re: Программистские задачки и хитрости

Сообщение MX_Master » 20 апр 2020, 08:46

Товарищи, задачка с вашей помощью решена успешно ;)

Но появился ещё один вопрос.. Как лучше всего организовать программный spinlock? Простое чтение/запись в одну общую переменную явно атомарной операцией не будет. Возможно, понадобится что-то более хитрое. Конечно, в разных чипах есть "железные" регистры для spinlock механизмов. Но интересен именно программный способ и подводные камни при нём.
Аватара пользователя
MX_Master
Мастер
 
Сообщения: 5832
Зарегистрирован: 27 июн 2015, 19:45
Откуда: Алма-Ата
Репутация: 2601
Медальки:
Настоящее имя: Миша

Re: Программистские задачки и хитрости

Сообщение uralpt » 20 апр 2020, 10:53

MX_Master писал(а):лучше всего организовать программный spinlock

как вариант - также как и механизм устранения коллизий в ethernet. Jam-sigmal (у нас остановка шин или портов), потом задержка, в тактах зависящая от приоритета. Камни - это пустые такты и буфер для поступающих данных (если они непрерывны). Не? (я не делал)

Можно тоже вопрос. Стоит задача максимального ногодрыга real-time, т.е. по таймерам-счетчикам. Мне необходимо хотя бы по 30МГц на каждую из 4 лапок :)). На коленке, ога. И не вникая в прелести ПЛИС.
Есть Cortex M7 (stm32H7) с частотой 400МГц. Прикинув, даже при DMA и минимальной обработке данных вряд ли можно получить больше 20-25МГц на лапу.
Слышал, но не довелось попробовать такую замечательную штуку как распберри. Теперь вопрос. Возможно, не устанавливая на нее ОС, использовать просто как высокочастотный МК? То есть прицепить ST-Link, залить свое ПО и сразу ехать? Какие камни?
Последний раз редактировалось uralpt 20 апр 2020, 11:21, всего редактировалось 1 раз.
Аватара пользователя
uralpt
Мастер
 
Сообщения: 494
Зарегистрирован: 23 ноя 2015, 14:31
Откуда: Миасс
Репутация: 73
Настоящее имя: евгений

Re: Программистские задачки и хитрости

Сообщение UAVpilot » 20 апр 2020, 11:08

MX_Master писал(а):Но появился ещё один вопрос.. Как лучше всего организовать программный spinlock? Простое чтение/запись в одну общую переменную явно атомарной операцией не будет. Возможно, понадобится что-то более хитрое. Конечно, в разных чипах есть "железные" регистры для spinlock механизмов. Но интересен именно программный способ и подводные камни при нём.

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

uralpt писал(а):как вариант - также как и механизм устранения коллизий в ethernet. Jam-sigmal (у нас остановка шин или портов), потом задержка, в тактах зависящая от приоритета.

Однако остаётся нерешённым вопрос: Как обнаружить коллизию?.. :)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
UAVpilot
Мастер
 
Сообщения: 20268
Зарегистрирован: 17 апр 2012, 14:58
Откуда: Москва
Репутация: 4854
Заслуга: c781c134843e0c1a3de9
Медальки:
Настоящее имя: Сергей

Re: Программистские задачки и хитрости

Сообщение uralpt » 20 апр 2020, 11:29

UAVpilot писал(а):Однако остаётся нерешённым вопрос: Как обнаружить коллизию?..

программно. Отправлять пакетами, проверять четность. Как вариант - сверять md5 или хеш-сумму какую. В stm32H7 начиная с 750 (вроде) серии даже шифроватор встроили.
Аватара пользователя
uralpt
Мастер
 
Сообщения: 494
Зарегистрирован: 23 ноя 2015, 14:31
Откуда: Миасс
Репутация: 73
Настоящее имя: евгений

Re: Программистские задачки и хитрости

Сообщение UAVpilot » 20 апр 2020, 11:47

uralpt писал(а):программно. Отправлять пакетами, проверять четность. Как вариант - сверять md5 или хеш-сумму какую.

Это как раз не программно, а очень даже аппаратно - передающий прямо во время передачи слушает линию и сравнивает получаемый сигнал с тем, что он передаёт. Это первый уровень модели OSI - только на этом уровне возможно детектирование коллизий прямо во время попытки передачи. А всякие чётности и контрольные суммы - это 2-7 уровни, там ты узнаешь о неудаче только после того, как тебе об этом сообщит принимающая сторона, если сможет, - т.е. никакой атомарности тут и близко не лежало.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
UAVpilot
Мастер
 
Сообщения: 20268
Зарегистрирован: 17 апр 2012, 14:58
Откуда: Москва
Репутация: 4854
Заслуга: c781c134843e0c1a3de9
Медальки:
Настоящее имя: Сергей

Re: Программистские задачки и хитрости

Сообщение uralpt » 20 апр 2020, 12:09

UAVpilot писал(а):Это как раз не программно, а очень даже аппаратно... никакой атомарности тут и близко не лежало

тут уж выбирать - или атомарно, или программно :))
Аватара пользователя
uralpt
Мастер
 
Сообщения: 494
Зарегистрирован: 23 ноя 2015, 14:31
Откуда: Миасс
Репутация: 73
Настоящее имя: евгений

Re: Программистские задачки и хитрости

Сообщение UAVpilot » 20 апр 2020, 12:29

А программно более, чем на одном CPU не получится... :)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
UAVpilot
Мастер
 
Сообщения: 20268
Зарегистрирован: 17 апр 2012, 14:58
Откуда: Москва
Репутация: 4854
Заслуга: c781c134843e0c1a3de9
Медальки:
Настоящее имя: Сергей

Re: Программистские задачки и хитрости

Сообщение uralpt » 20 апр 2020, 13:24

UAVpilot писал(а):А программно более, чем на одном CPU не получится... :)

ну... у нас есть второе ядро, и мы для проверки можем гонять по одной шине данные, по второй - хеши. Хоть это уже и не в рамках поставленной задачи, больше напоминает самопальный асинхронный протокол, но зато - "программно" и "более одного CPU".
Ладно-ладно, и так знаю ответ :)) Лучше как линукс-мастер скажи виндовсятнику, можно сотворить или не? (вопрос в #84). На скорую руку ответа не нашел.
Аватара пользователя
uralpt
Мастер
 
Сообщения: 494
Зарегистрирован: 23 ноя 2015, 14:31
Откуда: Миасс
Репутация: 73
Настоящее имя: евгений

Re: Программистские задачки и хитрости

Сообщение MX_Master » 20 апр 2020, 13:28

uralpt писал(а):Стоит задача максимального ногодрыга real-time, т.е. по таймерам-счетчикам. Мне необходимо хотя бы по 30МГц на каждую из 4 лапок ). На коленке, ога. И не вникая в прелести ПЛИС.
Есть Cortex M7 (stm32H7) с частотой 400МГц.

Юзать аппаратный вывод напрямую с таймера (Output Compare или PWM). Минусы - выход привязан строго к одной или паре лапок МК и, чтобы считать импульсы, нужен ещё один аппаратный таймер. Плюсы - ровный вывод и частота в 30 МГц это не предел.
Аватара пользователя
MX_Master
Мастер
 
Сообщения: 5832
Зарегистрирован: 27 июн 2015, 19:45
Откуда: Алма-Ата
Репутация: 2601
Медальки:
Настоящее имя: Миша

Re: Программистские задачки и хитрости

Сообщение uralpt » 20 апр 2020, 13:50

MX_Master писал(а):Юзать аппаратный вывод напрямую с таймера

минусы устраивают.
Своими словами - беру кейл+Cube, подкачиваю необходимые библиотеки, нахожу на ARM11 лапки JTAG, и все это в связке заработает? И Cube поймет пины, и Кейл - мой кривой Си :))? Хоть бы где почитать... я пока даже не понимаю, с какой стороны подходить и какие вопросы спрашивать. Неужели никто не пробовал, камень-то шустрый
Аватара пользователя
uralpt
Мастер
 
Сообщения: 494
Зарегистрирован: 23 ноя 2015, 14:31
Откуда: Миасс
Репутация: 73
Настоящее имя: евгений

Re: Программистские задачки и хитрости

Сообщение MX_Master » 20 апр 2020, 14:40

Я этот способ лично проверял на STM32F103, STM32F407 и на STM32H743. Всё работает как часы. На первых парах код из кубика, канеш, понадобится.
Аватара пользователя
MX_Master
Мастер
 
Сообщения: 5832
Зарегистрирован: 27 июн 2015, 19:45
Откуда: Алма-Ата
Репутация: 2601
Медальки:
Настоящее имя: Миша

Re: Программистские задачки и хитрости

Сообщение UAVpilot » 20 апр 2020, 14:51

uralpt писал(а):ну... у нас есть второе ядро, и мы для проверки можем гонять по одной шине данные, по второй - хеши.

Это уже не программный способ - требуется аппаратная поддержка. Если оной нет (что сомнительно), то гораздо проще процессоры одной лапкой соединить. :)

uralpt писал(а):Можно тоже вопрос. Стоит задача максимального ногодрыга real-time, т.е. по таймерам-счетчикам. Мне необходимо хотя бы по 30МГц на каждую из 4 лапок :)). На коленке, ога. И не вникая в прелести ПЛИС.
Есть Cortex M7 (stm32H7) с частотой 400МГц. Прикинув, даже при DMA и минимальной обработке данных вряд ли можно получить больше 20-25МГц на лапу.
Слышал, но не довелось попробовать такую замечательную штуку как распберри. Теперь вопрос. Возможно, не устанавливая на нее ОС, использовать просто как высокочастотный МК? То есть прицепить ST-Link, залить свое ПО и сразу ехать? Какие камни?

Самый быстрый способ ногодрыга - положить в память нужную последовательность байт и с помощью DMA гнать её в GPIO. Можно дрыгать 16-ю ногами, но в пределах одного порта. :)

uralpt писал(а):Слышал, но не довелось попробовать такую замечательную штуку как распберри. Теперь вопрос. Возможно, не устанавливая на нее ОС, использовать просто как высокочастотный МК? То есть прицепить ST-Link, залить свое ПО и сразу ехать? Какие камни?

stm32mp1xx :)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
UAVpilot
Мастер
 
Сообщения: 20268
Зарегистрирован: 17 апр 2012, 14:58
Откуда: Москва
Репутация: 4854
Заслуга: c781c134843e0c1a3de9
Медальки:
Настоящее имя: Сергей

Re: Программистские задачки и хитрости

Сообщение MX_Master » 20 апр 2020, 15:05

Программный spinlock реализовал пока что так.. В быстром ARM процессоре

Код: Выделить всёРазвернуть
void inline spin_lock()
{
    while ( *small_cpu_lock );
    *big_cpu_lock = 1;
}

void inline spin_unlock()
{
    *big_cpu_lock = 0;
}

А в более медленном сопроцессоре

Код: Выделить всёРазвернуть
void inline spin_lock()
{
    while ( *big_cpu_lock );
    *small_cpu_lock  = 1;
    while ( *big_cpu_lock );
}

void inline spin_unlock()
{
    *small_cpu_lock = 0;
}

Мелкий проц читает и пишет в общую память намного чаще. Какие минусы могут быть на первый взгляд?
Аватара пользователя
MX_Master
Мастер
 
Сообщения: 5832
Зарегистрирован: 27 июн 2015, 19:45
Откуда: Алма-Ата
Репутация: 2601
Медальки:
Настоящее имя: Миша

Re: Программистские задачки и хитрости

Сообщение UAVpilot » 20 апр 2020, 15:15

MX_Master писал(а):Какие минусы могут быть на первый взгляд?

Deadlock.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
UAVpilot
Мастер
 
Сообщения: 20268
Зарегистрирован: 17 апр 2012, 14:58
Откуда: Москва
Репутация: 4854
Заслуга: c781c134843e0c1a3de9
Медальки:
Настоящее имя: Сергей

Re: Программистские задачки и хитрости

Сообщение MX_Master » 20 апр 2020, 15:51

Пока ещё не поймал :hehehe: Скорее всего, потому что в циклах ожидания в сопроцессоре сами циклы не пустые.
Аватара пользователя
MX_Master
Мастер
 
Сообщения: 5832
Зарегистрирован: 27 июн 2015, 19:45
Откуда: Алма-Ата
Репутация: 2601
Медальки:
Настоящее имя: Миша

Re: Программистские задачки и хитрости

Сообщение Duhas » 20 апр 2020, 19:28

дык нужно только ждать посылки? диаграммку бы работы.. собственно я вапще не вижу великой проблемы когда можно организовать направленные буферы

буферы для данных + к каждому флаги "обновил" и "прочитал", чтобы данные не перезаписывались пока вторая сторона не считала и т.д.
Duhas
Мастер
 
Сообщения: 1562
Зарегистрирован: 10 окт 2015, 23:25
Репутация: 237
Настоящее имя: Андрей

Re: Программистские задачки и хитрости

Сообщение MX_Master » 20 апр 2020, 20:17

Два буфера было в предыдущей версии :) В этот раз хочу сделать иначе. Аппаратные spinlock'и тоже попробую для разнообразия ;)
Аватара пользователя
MX_Master
Мастер
 
Сообщения: 5832
Зарегистрирован: 27 июн 2015, 19:45
Откуда: Алма-Ата
Репутация: 2601
Медальки:
Настоящее имя: Миша

Re: Программистские задачки и хитрости

Сообщение Duhas » 20 апр 2020, 21:39

я просто недоосознал надо ли оно )
Duhas
Мастер
 
Сообщения: 1562
Зарегистрирован: 10 окт 2015, 23:25
Репутация: 237
Настоящее имя: Андрей

Пред.След.

Вернуться в Оффтоп

Кто сейчас на конференции

Зарегистрированные пользователи: avmartugin, Bing [Bot], Gestap, Google [Bot], Jack Vo, john1987887, kens, kochevnik, Kupfershcmidt, Lafayette, Leo_1943, NickSon, pegas13, rage, uralpt, Yandex [bot], индеецпетя, шпиндель

Reputation System ©'