Як выканаць тры функцыі адначасова?

Як рэалізаваць тры функцыі , які можа <�моцны> Execute ў той жа час (функцыя ўваходных выпадковых велічынь)?

1
Вы не можаце. Arduino робіць толькі адну рэч у той час. Хітрасць заключаецца ў тым, каб напісаць праграму, каб яна чаргуе свае функцыі разам.
дададзена аўтар Majenko, крыніца
Глядзіце мой пост пра Як зрабіць некалькі рэчаў адразу
дададзена аўтар Nick Gammon, крыніца

5 адказы

Вы можаце рэалізаваць тры функцыі, але вы можаце не ў стане выканаць іх адначасова.

6
дададзена

Ні адзін працэсар не можа зрабіць больш, чым адну рэч за адзін раз. Лепшае, што вы можаце спадзявацца на тое, што кожная функцыя працуе толькі на працягу кароткага часу і дае працэсару да наступнага, ствараючы ілюзію, што ёсць больш чым адна рэч адразу адбываецца. Гэта называецца <�моцны> шматзадачнай або <�моцны> шматструменнасць .

Ёсць некаторыя бібліятэкі, якія будуць рабіць гэта для Arduino (пошук «RTOS Arduino» або «Arduino шматзадачнасці»), ці вы можаце напісаць кожны функцыі, выкарыстоўваючы прынцыпы <�моцны> Finite State Machine Праграмаванне для дасягнення таго ж эфекту ,

5
дададзена
<�Р> Як рэалізаваць тры функцыі, якія могуць выконвацца ў той жа час (функцыя ўваходных выпадковых велічынь)?

Мікракантролеры, такія як AVR, якія выкарыстоўваюцца на Arduino дошкі маюць толькі адно ядро ​​апрацоўкі, але ёсць шмат апаратных модуляў (АЛП, UART, SPI, TWI, Таймеры, і г.д.). Выкарыстоўваючы гэтыя можна дасягнуць некалькіх «функцыі» ў той жа час, гэта значыць чысты паралелізм.

Некаторыя прыклады, у чаканні ...

  1. ADC (analogRead) існуе больш за 100 цыклаў
  2. <�Літый> SPI (spi.transfer) існуе 16 цыклаў
  3. UART (COM) на самой справе ўжо адначасова з буферызацыяй і ISR-х.
  4. Тое ж тычыцца I2C (TWI).

Гэтыя цыклы могуць быць выкарыстаны для перемежения розных функцый або палепшыць прадукцыйнасць (напрыклад, папярэдне выбарку, труба падшэўкі).

Іншы прыклад; выкарыстоўваючы прамой порт чытання можна прачытаць стан некалькіх штыфтоў ў той жа самы час.

З просты сумеснай шматзадачнасці можна кантэкстнае пераключэнне паміж некалькімі функцыямі (задач) на затрымку або выхад. Гэта можа быць зроблена з планавальнік .

4
дададзена
<�Р> Як рэалізаваць тры функцыі, якія могуць выконвацца ў той жа час (функцыя ўваходных выпадковых велічынь)?

ёсць тры выканаўцы/arduinos, па адным для кожнай функцыі.

3
дададзена

Калі вынік кожнай функцыі можа быць выяўлены ў выглядзе аднаго байта (г.зн. цэлага ліку ад 0 да 255), то вы маглі б:

  • Connect рэгістры зруху 3 (напрыклад, 74595 IC) да 3 кантактаў на вашым Arduino
  • <�Літый> Прызначаюць адну выснову кожнай функцыі <�Літый> Выкарыстоўвайце функцыю SHIFTOUT для вываду выніку кожнай функцыі аднаго біта ў той час, на яго адпаведным штыфце <�Літый> Выкарыстанне 4-й штыфт, злучаны з усімі 3 рэгістраў зруху ў якасці агульнай зашчапкі -. Калі гэты штыфт усталяваны ВЫСОКІЯ выхадаў з 3 рэгістраў зруху ўсё зменіцца ў той жа час
3
дададзена
Або паставіць тры Эсэры ў серыі, выкарыстоўваючы 2 шпількі менш
дададзена аўтар Martin C. Martin, крыніца