Второе ядро Raspberry Pi 2040

Пользовательские блоки не подходящее под другие разделы
Правила форума
Рекомендации по размещению блоков:
Автор блока создает подробное описание блока, отличие от подобных(если есть на данный момент).Сложные блоки очень желательно с примерами.
При выходе новых версий редактирует/дополняет свой первый пост с указанием даты, версии, причины.
В каждой теме обсуждается только выложенный автором блок - баги, возможность (или предложение) доработки и прочие хотелки.
Свои блоки, переработанные, с другими библиотеками, протоколами и т.д.- размещаем либо сами отдельно, либо обсуждаем и дорабатываем в форуме Разработка блоков.
Пользователи улучшив блок автора и проверив его работоспособность - могут обратиться к автору или модераторам с просьбой добавить их версию блока в первое сообщение темы.
Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Второе ядро Raspberry Pi 2040

#1

Сообщение Dryundel » 18.08.2022{, 15:35}

Второе ядро Raspberry Pi 2040
Набор блоков для запуска части программы на втором ядре Raspberry Pi 2040
3.jpg
3.jpg (8.62 КБ) 2147 просмотров
5.jpg
5.jpg (21.41 КБ) 2147 просмотров
Размещение блоков в проектеПоказать
4.jpg
Описание примененияПоказать
START_CORE2 for Raspberry Pi 2040
Стартовый блок для запуска части программы на втором ядре Raspberry Pi 2040
- Разместить блок на отдельной перед кодом выполняемым на втором ядре

END_CORE2 for Raspberry Pi 2040
Финишный блок для запуска части программы на втором ядре Raspberry Pi 2040
- Разместить блок на отдельной плате сразу после кода выполняемого на втором ядре

Все что размещено на платах между блоками
START_CORE2 for Raspberry Pi 2040 и END_CORE2 for Raspberry Pi 2040
будет работать на втором ядре Raspberry Pi 2040.
.
Актуальная версия
Второе ядро Raspberry Pi 2040.ubl
(18.02 КБ) 51 скачивание
- Исправлен баг #Пост23
Разработано в соавторстве с Phazz.
.
.
История версий: .
ВНИМАНИЕ! Работает только на библиотеке контроллера Raspberry Pi Pico by Earle F.Philhower

Описание контроллеров Raspberry Pi 2040 берем здесь. Спасибо DrMario.
Библиотеку контроллера устанавливаем эту.Показать
1.jpg

ecoins
Полковник
Сообщения: 2930
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 453
Откуда: Шатура
Имя: Энвер

Второе ядро Raspberry Pi 2040

#2

Сообщение ecoins » 18.08.2022{, 19:36}

Хорошее решение, буду пользоваться, спасибо.
---------
А для ESP32 простого решения использования другого ядра не найти?

Аватара пользователя
Phazz
Полковник
Сообщения: 2552
Зарегистрирован: 17.10.2016{, 15:38}
Репутация: 367
Откуда: Сургут
Имя: Анатолий

Второе ядро Raspberry Pi 2040

#3

Сообщение Phazz » 18.08.2022{, 19:59}

ecoins, Есть блок но использование delay для переключения все убивает (

ecoins
Полковник
Сообщения: 2930
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 453
Откуда: Шатура
Имя: Энвер

Второе ядро Raspberry Pi 2040

#4

Сообщение ecoins » 18.08.2022{, 20:15}

Phazz писал(а):
18.08.2022{, 19:59}
ecoins, Есть блок но использование delay для переключения все убивает (
Это по ESP32? Посмотреть бы...

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Второе ядро Raspberry Pi 2040

#5

Сообщение Dryundel » 18.08.2022{, 20:16}

ecoins писал(а):
18.08.2022{, 19:36}
А для ESP32 простого решения использования другого ядра не найти?
Думаем. Но там все слишком запутано и простых решений совместимых с FLProg пока не вижу. ESP32 хоть и не плохой контроллер, но создатели ядра под него как то не особо заботятся о совместимости. Слишком много отклонений в стандартных функциях. Это слегка напрягает и разочаровывает.
============
Еще думаю есть ли смысл разделять Setup() в ПБ для RPi. В основном влияет только на скорость загрузки. Однако появились идеи разделять конфигурацию и проверку на выход в рабочие параметры на одном ядре, а старт выполнения на другом. Но это пока только бурные фантазии. :)

Вижу что пока публике не зашло второе ядро RPi. :D Мало кто скачивает.
Либо мало у кого есть данный контроллер, либо осознание прелести простого использования сразу двух ядер еще не достигла общественного сознания.

Первые впечатления от Raspberry Pi Pico
При своей стоимости, характеристики весьма впечатляют.
Из минусов - не много специфических библиотек и примеров для данного процессора под Arduino IDE.
Однако развитие идет семимильными шагами. Контроллеры весьма перспективные.

ecoins
Полковник
Сообщения: 2930
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 453
Откуда: Шатура
Имя: Энвер

Второе ядро Raspberry Pi 2040

#6

Сообщение ecoins » 18.08.2022{, 20:31}

Dryundel писал(а):
18.08.2022{, 20:16}
При своей стоимости, характеристики весьма впечатляют.
Из минусов - не много специфических библиотек и примеров для данного процессора под Arduino IDE.
Пока удалось укомплектоваться библиотеками.
-------
Dryundel писал(а):
18.08.2022{, 20:16}
Еще думаю есть ли смысл разделять Setup() в ПБ для RPi. В основном влияет только на скорость загрузки. Однако появились идеи разделять конфигурацию и проверку на выход в рабочие параметры на одном ядре, а старт выполнения на другом. Но это пока только бурные фантазии.
При построении своих библиотек мы практически отказались от setup(). А есть ли простой способ добавления setup1() с учетом FLProg?
Dryundel писал(а):
18.08.2022{, 20:16}
При своей стоимости, характеристики весьма впечатляют.
Да, конечно. Но как ни странно STM32F411 раза в 2 быстрее.
Но с ним сложнее работать, у него одно ядро. И он дороже...

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Второе ядро Raspberry Pi 2040

#7

Сообщение Dryundel » 18.08.2022{, 20:43}

ecoins писал(а):
18.08.2022{, 20:31}
А есть ли простой способ добавления setup1() с учетом FLProg?
А где в FLProg используется setup()? Его просто нет в открытом доступе. Все setup() только в блоках. А что мешает при создании ПБ поступить аналогичным образом. Просто вставляем в секцию } void setup1() { и пишем дальше то, что хотим сетапить на втором ядре.
Я так думаю. Хотя и не пробовал. Ведь в этом случае setup1() окажется перед loop(), а не перед loop1(). Короче надо пробовать.
ecoins писал(а):
18.08.2022{, 20:31}
Да, конечно. Но как ни странно STM32F411 раза в 2 быстрее.
Ну и что? Если умножить скорость на два ядра, получим тот же результат, но с разделением на важные(быстрые) и прочие задачи. Так что здесь можно поспорить об общем быстродействии.

ecoins
Полковник
Сообщения: 2930
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 453
Откуда: Шатура
Имя: Энвер

Второе ядро Raspberry Pi 2040

#8

Сообщение ecoins » 18.08.2022{, 21:06}

Dryundel писал(а):
18.08.2022{, 20:43}
Я так думаю. Хотя и не пробовал. Ведь в этом случае setup1() окажется перед loop(), а не перед loop1(). Короче надо пробовать.
ecoins писал(а): ↑24 минуты назад
Да, конечно. Но как ни странно STM32F411 раза в 2 быстрее.
Ну и что? Если умножить скорость на два ядра, получим тот же результат, но с разделением на важные(быстрые) и прочие задачи. Так что здесь можно поспорить об общем быстродействии
Да, конечно.
У Raspberry Pi Pico - много достоинств. С ним почти также просто работать, как с MEGA2560 - быстро компилируется, быстро грузится.
Из недостатков - логика 3.3в.
Для i2c мы эту проблему решаем просто - изготовили конверторы.
i2c_5v_3v.jpg
В них есть два дополнительных канала.

Аватара пользователя
Phazz
Полковник
Сообщения: 2552
Зарегистрирован: 17.10.2016{, 15:38}
Репутация: 367
Откуда: Сургут
Имя: Анатолий

Второе ядро Raspberry Pi 2040

#9

Сообщение Phazz » 19.08.2022{, 05:03}

ecoins писал(а):
18.08.2022{, 20:15}
Phazz писал(а):
18.08.2022{, 19:59}
ecoins, Есть блок но использование delay для переключения все убивает (
Это по ESP32? Посмотреть бы...
viewtopic.php?f=194&t=7566

ecoins
Полковник
Сообщения: 2930
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 453
Откуда: Шатура
Имя: Энвер

Второе ядро Raspberry Pi 2040

#10

Сообщение ecoins » 19.08.2022{, 05:43}

Phazz писал(а):
19.08.2022{, 05:03}
ecoins писал(а): ↑Вчера{, 17:15}
Phazz писал(а): ↑Вчера{, 16:59}
ecoins, Есть блок но использование delay для переключения все убивает (
Это по ESP32? Посмотреть бы...
viewtopic.php?f=194&t=7566
Посмотрел. Спасибо.
Немного сумбурное представление сложилось по реализации запуска задач на разных ядрах, но наверное работает.
Не достает объективных замеров по времени с учетом работающего WiFi.
Предложенный подход интересен. Со временем попробую наверное.

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Второе ядро Raspberry Pi 2040

#11

Сообщение Dryundel » 19.08.2022{, 11:56}

Phazz писал(а):
18.08.2022{, 19:59}
ecoins, Есть блок но использование delay для переключения все убивает (
Выкиньте этот delay из закрывающего блока вместе с параметром. И дело с концом.
Он там вообще не нужен.
С другой стороны, этот delay практически не мешает выполнению другого кода, кроме того который между блоками.

Отправлено спустя 9 минут 31 секунду:
ecoins писал(а):
19.08.2022{, 05:43}
Посмотрел. Спасибо.
Что увидели?
Что то среднее между вашим планировщиком и FreeRTOS.Не правда ли? :)
ecoins, а может вам посмотреть в сторону FreeRTOS и его внедрением в FLProg? Там все гораздо интереснее. Очереди, семафоры, мьютексы...

Аватара пользователя
Phazz
Полковник
Сообщения: 2552
Зарегистрирован: 17.10.2016{, 15:38}
Репутация: 367
Откуда: Сургут
Имя: Анатолий

Второе ядро Raspberry Pi 2040

#12

Сообщение Phazz » 19.08.2022{, 12:17}

Dryundel, там рекомендован delay 1ms, а это очень много

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Второе ядро Raspberry Pi 2040

#13

Сообщение Dryundel » 19.08.2022{, 12:31}

ecoins писал(а):
19.08.2022{, 05:43}
Немного сумбурное представление сложилось по реализации запуска задач на разных ядрах, но наверное работает.
В случае с RPi и loop1() вообще никаких проблем не вижу пока. Просто куски кода выполняются на разных ядрах и все.
Единственный затык в том, как например там Serial.print в один порт будет с разных ядер выполняться. Не будут ли мешать друг другу подобные функции.
На ESP32 их xTaskCreatePinnedToCore похоже учитывает и планирует задачи в соответствии с приоритетом и параметрами.
В RPi тоже есть подобная система. Вот только инфы пока мало. В основном все ориентировано на Питон.

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Второе ядро Raspberry Pi 2040

#14

Сообщение Dryundel » 19.08.2022{, 13:10}

Phazz писал(а):
19.08.2022{, 12:17}
Dryundel, там рекомендован delay 1ms, а это очень много
Где рекомендован? Можно инфу? Я как то не заметил проблем без delay.
С другой стороны, даже если и будет этот delay в функции (задаче). Как я уже писал ОН НЕ МЕШАЕТ ВЫПОЛНЕНИЮ ОСТАЛЬНОЙ ПРОГРАММЫ!
Функции которые в блоке являются частью этакой своей FreeRTOS от создателей ядра для ESP32.
Вы можете создать десяток каких задач (надо только слегка блок допилить). В каждой задаче свой delay хоть на 5секунд. Запустить все задачи на одном ядре и они не будут друг другу мешать.
Вот пример - Три разных блинка c delay() на одном ядре (0).
3_Task.ino
(1.92 КБ) 35 скачиваний
Наслаждайтесь FreeRTOS от ESP32 :)

artemka19
Лейтенант
Сообщения: 540
Зарегистрирован: 03.09.2020{, 15:41}
Репутация: 216
Откуда: Питер
Имя: Артем

Второе ядро Raspberry Pi 2040

#15

Сообщение artemka19 » 19.08.2022{, 15:01}

эта rtos как мнимум для esp32
для той же нано/уно порт rtos носил развлекательный
характер.
СпойлерПоказать
"...Пробовал я FreeRTOS на нане. Помигал диодиком. Вывел на экран ПРИВЕТ МИР. Здесь память кончилась. Ничего больше из задач добавить не получилось. Ушёл на STM32. Там получилось поднять 6 задач. В том числе сеть и CD карту и тачь. Меги у меня нет. Про неё ничего не скажу, но на более мелких FreeRTOS это игрушка..."
Отправлено спустя 6 минут :
простой пример:
-вывод в юарт
-две задачи
-в rtos для Каждой задачи нужно будет запускать Свой экземпляр Serial.begin

Отправлено спустя 4 минуты 3 секунды:
*ну и сам факт переписывания всех библиотек arduino под rtos не добавляет оптимизма)))

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Второе ядро Raspberry Pi 2040

#16

Сообщение Dryundel » 19.08.2022{, 15:23}

artemka19 писал(а):
19.08.2022{, 15:11}
эта rtos как мнимум для esp32
Да ладно! Вы тоже это заметили? :D
А о чем мы здесь еще по вашему?
artemka19 писал(а):
19.08.2022{, 15:11}
*ну и сам факт переписывания всех библиотек arduino под rtos не добавляет оптимизма)))
Прям таки всех? Класс! А зачем? Что изменилось то?

artemka19
Лейтенант
Сообщения: 540
Зарегистрирован: 03.09.2020{, 15:41}
Репутация: 216
Откуда: Питер
Имя: Артем

Второе ядро Raspberry Pi 2040

#17

Сообщение artemka19 » 19.08.2022{, 16:05}

Dryundel писал(а):
19.08.2022{, 12:06}
ecoins, а может вам посмотреть в сторону FreeRTOS и его внедрением в FLProg
вот тут нет ничего про esp 😁😁😁

Отправлено спустя 1 минуту 31 секунду:
artemka19 писал(а):
19.08.2022{, 16:05}
Прям таки всех? Класс! А зачем? Что изменилось то
когда будет пример - обсудим.
Теорию с uart я уже привел выше.

Можно попробовать с spi)))) подожду результата тестов...

Отправлено спустя 3 минуты 14 секунд:
ну и не стоит забывать, что некоторые библиотеки Прямо запрещают использование прерываний.

т.е. не переписывая эти библиотеки - ни о каком rtos не может быть и речи в среде ардуино ide

Отправлено спустя 2 минуты 31 секунду:
поэтому система от ecoins наиболее жизнеспособна в рамках ардуино ide (а значит и флпрог)

***ИМХО конечно

ecoins
Полковник
Сообщения: 2930
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 453
Откуда: Шатура
Имя: Энвер

Второе ядро Raspberry Pi 2040

#18

Сообщение ecoins » 19.08.2022{, 16:39}

Dryundel писал(а):
19.08.2022{, 12:06}
Что то среднее между вашим планировщиком и FreeRTOS.Не правда ли?
ecoins, а может вам посмотреть в сторону FreeRTOS и его внедрением в FLProg? Там все гораздо интереснее. Очереди, семафоры, мьютексы...
Собственно первые наметки начал делать.
На новых контроллерах ESP стало нормой устанавливать адресный светодиод типа ws2812.
Библиотеки управления все основаны на FreeRTOS. И это понятно в силу особенности управления такими светодиодами.
Как бы полезно было бы сделать штатно такую функцию. Это в планах.
На STM32, RP2040 схожая ситуация, freertos присутствует.
-------------
Когда несколько лет мы начали изучать проблему почему тормозят проекты на FLProg мы начинали с рассматривания системы реального времени.
После того как появилось управления выполнения по платам по условиям, появилось то, что мы назвали значимо "Диспетчер задач", которая фактически является достаточно удачным переключателем между задачами.
Появление "Диспетчера" не решило проблемы, поскольку любая "тормозящая" задача может свести на нет результаты оптимизации по времени - например АЦП, почти все библиотеки работы с внешними устройствами, и даже алгоритм преобразования
float в int от FLProg в ModBus и пр.(последнее в контроллерах AVR очень тормозит).
Большинство библиотек от Arduino IDE написано с удобной для пользователя логикой - одна функция (строка) сразу приносит желаемый результат.
А внутри delay(), обмен через коммуникации, иногда громоздкие вычисления и прочие "плюшки", приводящие к задержкам.
Были разработаны методы проектирования библиотек - все библиотеки от ecoins построены на микрооперация - законченное конечное действие, после которого можно вернуть управление внешнему диспетчеру, сейчас это "Диспетчер задач".
Методы достаточно отработаны и уницифированы в том числе с учетом некоторых особенностей проектирования на FLProg.

По поводу семафоров и пр. - по моему мнению лучше всего этого избегать, иначе сложность управления этими процессами сами по себе поглощают ресурсы, в том числе и по быстродействию.
Могут возникать и конфликты - например при попытки нескольких задач одновременно использовать одну и ту же шину i2c.
К слову в непростой библиотеке LCD ecoins используется механизм блокировки вывода по флагу занятого дисплея.
---------------------
Тема очень интересная - если от разных участников форума будут локальные тестовые наработки, их можно будет объединить в универсальный результат.
При это все и по отдельности, и в связке будет полезно - "Диспетчер задач", многоядерность (там где она присутствует), и FreeRTOS.
------------------
Всем желаю успехов в развитии такой тематики.
Со своей стороны примем посильное участие.

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Второе ядро Raspberry Pi 2040

#19

Сообщение Dryundel » 19.08.2022{, 17:18}

ecoins писал(а):
19.08.2022{, 16:39}
Могут возникать и конфликты - например при попытки нескольких задач одновременно использовать одну и ту же шину i2c.
К слову в непростой библиотеке LCD ecoins используется механизм блокировки вывода по флагу занятого дисплея.
Ну так это же практически в чистом виде мьютексы. :D
Снова изобретаем велосипед?

ecoins
Полковник
Сообщения: 2930
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 453
Откуда: Шатура
Имя: Энвер

Второе ядро Raspberry Pi 2040

#20

Сообщение ecoins » 19.08.2022{, 17:46}

Dryundel писал(а):
19.08.2022{, 17:18}
Ну так это же практически в чистом виде мьютексы.
Снова изобретаем велосипед?
Прекрасно, когда присутствует теоретик, который все может объяснить... мьютекс...

Это как к старику-пастуху лектор приезжает и читает лекцию "Как пасти баранов".
Старик слушает, удивляется обилию нового и значимости своего дела, лектор уезжает и пастух продолжает пасти баранов - а это шерсть, мясо, кюрдюк, копыта для хаша(холодца), навоз и прочее, прочее полезное в практическом смысле...

О мьютексе... Раньше не использовал этот термин. Посмотрел...
В наших проектах нет потоков, соответственно и мьютексов...

Прослушал как-то в youtube несколько лекций по программированию из Физтеха.
Услышал и много полезного, а в целом вывод - "Как же Вы далеки от народа" и от текущей реальности...
------
Примечание: никого обидеть не хотел и не хочу.
------
Подпись: Программист ну очень с большим стажем... из очень из разных эпох... пытается держать руку на пульсе времени.

Ответить

Вернуться в «Другое»