Перейти к содержанию

Параллельное Выполнение И Arduino.


Рекомендуемые сообщения

Приветствую всех!

Есть несколько вопросов к тем, кто может и хочет ответить по существу...

1. Возможно ли организовать параллельное выполнение нескольких задач, не зависящих строго от последовательности выполнения кода программы с помощью Arduino?

2. Связано ли решение этой проблемы с тем, что таймер, как я понимаю, может быть не один?

3. В 3D принтерах на Arduino все действия происходят последовательно или нет?

4. Если использовать, например, плату DRV8825 для управления шаговым двигателем, будет ли Arduino, послав команду на какое-то кол-во оборотов, ждать пока двигатель сделает эти обороты или программа сразу же будет выполняться далее?

5. Если у меня в loop() проверяется условие на нажатие кнопки и в нем же стоит пауза на на секунду - значит ли это, что нажатие может быть не замечено?

Вопросы, в общем-то, об одном и том же - просто для большей ясности...

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Hongfa для различных применений в Компэл. Большой выбор в наличии!

Компания HONGFA - это не только крупнейший в мире производитель электромеханических реле, но также производитель конденсаторов, вакуумных прерывателей, трансформаторов и низковольтного коммутационного оборудования. На складе КОМПЭЛ регулярно поддерживаются около 100 самых популярных позиций электромеханических реле. Реле Hongfa могут заместить многие изделия производства недоступных брендов. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Какое параллельное выполнение на одиночном проце с одним ядром и, соответственно, одним потоком команд?

Совсем зачитались супер-компьютерами..

Изменено пользователем Jeer
Ссылка на комментарий
Поделиться на другие сайты

Тренды и лучшие решения для разработки зарядных станций в России

К 2029 году в России прогнозируется увеличение числа зарядных станций до 40 000. При этом отечественный рынок электротранспорта имеет климатические, потребительские и географические особенности. Для успешной разработки и построения инфраструктуры станций заряда в России идеальным вариантом является использование решений и электронных компонентов китайских производителей – лидеров индустрии электротранспорта и возобновляемой энергетики, которые уже представлены в КОМПЭЛ. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Секреты депассивации литиевых батареек FANSO EVE Energy

Самыми лучшими параметрами по энергоемкости, сроку хранения, температурному диапазону и номинальному напряжению обладают батарейки литий-тионилхлоридной электрохимической системы. Но при длительном хранении происходит процесс пассивации. Разберем в чем плюсы и минусы, как можно ее избежать или уменьшить последствия и как проводить депассивацию батареек на примере продукции и рекомендаций компании FANSO EVE Energy. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Какое параллельное выполнение на одиночном проце с одним ядром и, соответственно, одним потоком команд?

Тут имеется ввиду псевдопараллельное выполнение. На Ассме такое вполне возможно (я так и практикую алгоритмы), а вот на Arduino с ее скетчами - ХЗ (даже не знаю что и подсказать).

Ссылка на комментарий
Поделиться на другие сайты

Никто не мешает писать на Ассме для Arduino. Разницы - никакой.

Никогда не спорьте с дураком - люди могут не заметить между вами разницы

Ссылка на комментарий
Поделиться на другие сайты

Соглашусь... Но на Асме писать сейчас никто не хочет, считая это занятие мазохизмом.

С другой стороны, унификация кода под различные модели Arduino, приводит к таким дебрям - последние оставшиеся волосы на голове шевелятся.

Изменено пользователем Геннадий
Ссылка на комментарий
Поделиться на другие сайты

Brian4ever

Еще раз - при чем тут Arduino, RTOS, asm, C и прочие софт-дела, если AVR - это пока есть процессор последовательного исполнения команд.

Что такое "псевдопараллельность"? С точки зрения пользователя? Это глупость.

Ссылка на комментарий
Поделиться на другие сайты

Любой процессор выполняет команды последовательно. Далеко не все задачи можно распараллелить. Тем не менее одновременное (в буквальном смысле) выполнение нескольких задач встречается на практике куда чаще, чем "чистое" последовательное.

Пример. Часы на контроллере: одна задача - отсчет времени, другая - его вывод на семисегментный индикатор. Очевидно, выполняются эти задачи одновременно, хотя контроллер и не умеет выполнять одновременно несколько инструкций.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Если у меня в loop() проверяется условие на нажатие кнопки и в нем же стоит пауза на на секунду - значит ли это, что нажатие может быть не замечено?

Если для задержки использовать delay(), то скорее будет не замечено, посему лучше пользоваться командой millis().

Ссылка на комментарий
Поделиться на другие сайты

процессор последовательного исполнения команд.

Что такое "псевдопараллельность"? С точки зрения пользователя? Это глупость.

Вас зациклило. Никто не говорит о параллельном выполнении команд. Речь о

параллельное выполнение нескольких задач

когда каждой задаче процессор уделяет часть своего времени. Например, по прерываниям. Или вы считаете, что в Windows на каждую, параллельно решаемую задачу, используется своё ядро?

Никогда не спорьте с дураком - люди могут не заметить между вами разницы

Ссылка на комментарий
Поделиться на другие сайты

Еще раз - при чем тут Arduino, RTOS, asm, C и прочие софт-дела, если AVR - это пока есть процессор последовательного исполнения команд.

Что такое "псевдопараллельность"? С точки зрения пользователя? Это глупость.

Как уже сказал Григорий, на каждую операцию МК тратит часть своего времени. А вот как организованы эти операции зависит от среды программирования и полета мыслей программиста (вот тут и сказывается Arduino, RTOS, Assm, C и прочие софт-дела).

Например:

В алгоритме есть четыре главные функции, одна из которых опрос клавиатуры с антидребезгом, другая - динамическая индикация.

Антидребезг в Си решается применением задержки (delay), что приостанавливает выполнение других функций, пока МК крутится в задержках. Это наиболее частое решение программистов. Главный цикл (While) имеет неопределенное время выполнения, зависящее от кол-ва выполняемых условий в той или иной ситуации (при нажатой кнопке добавляются delay антидребезга, истинность условий If, добавляющая дополнительные операции и т.д.).

На Ассме можно применить прерывание от таймера, задающее такт выполнения всех функций программы. Главное условие - период наступления прерывания от таймера должен быть больше, чем время выполнения всех функций программы (за один проход). Далее, активно используя флаги и счетчики (регистры или ячейки RAM) можно обработать клавиатуру не прибегая к зацикливанию кода в декрементах регистров, формирующих задержки, а отсчитывать кол-во прерываний таймера (тактов) при условии поднятого флага нажатой кнопки. В таком случае, если кол-во тактов не достигло уровня, требуемого для формирования времени задержки, можно преспокойно выходить из данной функции и заняться другими, не менее важными делами (например динамической индикацией). При таком решении, все функции главного цикла будут выполняться гарантированно (один раз за один такт) в строго отведенный промежуток времени. И даже, если формируется задержка (любое кол-во секунд, часов, дней...) остальные функции будут выполняться в отведенное им время цикла, что для пользователя будет выглядеть, как параллельное выполнение всех функций программы.

Что касается Arduino. Сейчас я "ковыряю" несколько примеров библиотеки rfid-master, активно используемую ардуинщиками (другой в Нете не нашлось, как и нормального описания кодов управления карт Mifare)... Показал бы, как выглядит сие чудо, любезно "подаренное" китайцами нашим электронщиками (наверное с цель затормозить их в данном направлении), но код слишком большой и раздутый, чтобы уместиться в рамках этой темы. Наверное поэтому, при словах Arduino, меня лично передергивает.

Ссылка на комментарий
Поделиться на другие сайты

Геннадий

Мне-то это объяснять не надо, разрабатывал бортовые и другие машинки c 70-х.

Я всего лишь придрался к термину "параллельность" в отношении процессоров AVR, которые имеют SISD архитектуру (одиночный поток команд, одиночный поток данных).

Истинная параллельность достигается на машинах с SIMD и MIMD архитектурами, чем AVR и, соответственно, Arduino не обладают от слова совсем.

Работа же SISD-машины по таймеру или прерыванию никак не приводит к появлению параллельности, просто происходит переключение контекста.

Хотя сейчас возникают Ардуино-подобные машинки на других процессорах и вполне возможно появление SIMD-решений.

Почитал ветку..

P.S.

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

Григорий Т.

>Или вы считаете, что в Windows на каждую, параллельно решаемую задачу, используется своё ядро?

А Вы не в курсе, что да? Или что видеокарты тоже используются для расчетов (технология CUDA), а не только вывода изображения?

Изменено пользователем Jeer
Ссылка на комментарий
Поделиться на другие сайты

при словах Arduino, меня лично передергивает.

А меня - нет :)

Я использую её как контроллер, совмещённый с программатором и готовым интерфейсом связи с компьютером. А программирую всё так-же, на ассемблере.

просто происходит переключение контекста.

Ну, это как считать. Работа многих программ основана на прерываниях от таймера. К примеру, такая задача: вам нужно раз в минуту считывать показания термодатчика и переслать их по UART. Непосредственное исполнение кода такой задачи длится, скажем, 1 мсек. Остальную минуту на задачу работает таймер, не связанный с загрузкой процессора. Если мы это время займём под другие, аналогичные задачи, то вряд ли можно сказать, что мы переключились с одной задачи на другую.

Никогда не спорьте с дураком - люди могут не заметить между вами разницы

Ссылка на комментарий
Поделиться на другие сайты

Я же и говорю - обсуждать параллельность периферии нет смысла. Она все умнеет и становится почти самостоятельной сущностью, но это никак не относится к термину "параллельность", который относится к классу архитектуры ЦПУ.

Arduino вполне удобное решение для прототипирования.

Ссылка на комментарий
Поделиться на другие сайты

Геннадий

Если бы Вы поинтересовались, то Вас сильно удивил бы зоопарк МК, что сегодня используется в XDuino.

Как Вам такой зоопарк?:

PIC/PIC32, STM (Cortex-M3), Kinetis (Cortex-M0), ARM (Cortex-M4F, Cortex-M3, ARM7), MSP430, Renesas (RX63N)..

И, минутку внимания!

Вы даже можете не поверить - Intel® Edison

Intel® Atom™ system-on-a-chip (SoC) based on leading-edge 22 nm Silvermont microarchitecture including a

dual-core CPU and single core microcontroller (MCU)

См. спецификацию по Intel® Edison

Изменено пользователем Jeer
Ссылка на комментарий
Поделиться на другие сайты

Много терминов прочитал от умных дядек. Особенно порадовало, что у винды

на каждую задачу по ядру.

Все прекрасно понимают, что одноядерный процессор не может одновременно

выполнять две операции. Но все так же понимают, что такое операционная

система для микроконтроллеров и примерно, как она работает.

Такая работа некоректно называется параллельное выполнение нескольких задач.

( на одном ядре микроконтроллера).

Ссылка на комментарий
Поделиться на другие сайты

Такая работа некоректно называется параллельное выполнение нескольких задач.

( на одном ядре микроконтроллера).

Вы тоже путаете операции с задачами.

Никогда не спорьте с дураком - люди могут не заметить между вами разницы

Ссылка на комментарий
Поделиться на другие сайты

croc19

>параллельное выполнение нескольких задач.

>( на одном ядре микроконтроллера).

Нет, не так. Это называется конкурентное выполнение задач на одном ядре и никак иначе.

Про задачи на "взрослых" платформах тут еще дело не дошло.

- HT - псевдо-параллельность, реализованная на потоковой структуре обработки;

- xMP ( варианты OpenMP, MPI и пр.);

- actor-технологии параллельности.

Ссылка на комментарий
Поделиться на другие сайты

Поподробнее ДЛЯ ГРИГОРИЯ

Назовите конкурентное, хотя обычно называют параллельное,

в силу превышения скорости работы процессора на порядки,

по сравнению с необходимым, для решения задачи.

Изменено пользователем croc19
Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...