Bir vaqtning o'zida uch funktsiyani qanday bajarish mumkin?

bir vaqtning o'zida bajarilishi mumkin (funktsiyaning tasodifiy o'zgaruvchilari funksiyasi) uch funktsiyani qanday amalga oshirish kerak?

1
Siz qilolmaysiz. Arduino faqat bir vaqtning o'zida bitta narsani bajaradi. Dastur sizning vazifangizni bir-biriga birlashtiradigan dasturni yozishdir.
qo'shib qo'ydi muallif Majenko, manba
qo'shib qo'ydi muallif Nick Gammon, manba

5 javoblar

Siz uch funktsiyani amalga oshirishingiz mumkin, ammo siz ularni bir vaqtda bajarolmaysiz.

6
qo'shib qo'ydi

Bitta protsessor bir vaqtning o'zida bir nechta narsani qila olmaydi. Umid qila oladigan eng yaxshi narsa shundaki, har bir funktsiya faqat qisqa muddat ichida ishlaydi va protsessorni navbatdagi biriga beradi, bu birdaniga bir nechta narsaning sodir bo'lishini tasavvur qiladi. Bunga multi-tasking yoki multi-threading deyiladi.

Arduino ("RTOS Arduino" yoki "Arduino multitasking" qidiruvi) uchun buni amalga oshiradigan ba'zi kutubxonalar mavjud yoki siz bir xil effektga erishish uchun Finite State Machine dasturiy tamoyillari asosida har bir vazifani yozishingiz mumkin .

5
qo'shib qo'ydi

Bir vaqtning o'zida amalga oshirilishi mumkin bo'lgan uch funktsiyani qanday bajarish kerak (kirishning tasodifiy o'zgaruvchilari funksiyasi)?

Arduino panellarida ishlatiladigan AVR kabi mikro-nazorat qurilmalari faqat bir yadroli yadroga ega, ammo ko'plab apparat modullari (ADC, UART, SPI, TWI, taymerlar va boshqalar) mavjud. Ulardan bir vaqtning o'zida bir nechta «funktsiyalar» ga erishish mumkin, ya'ni sof bir vaqtning o'zida.

Ba'zi bir misollar kutib turibdi ...

  1. ADC (analogRead) da 100 tsikldan ortiq mavjud.
  2. SPI (spi.transfer) 16 tsikl bor.
  3. UART (ketma-ket) aslida allaqachon buferlash va ISR bilan birga.
  4. Xuddi shu narsa I2C (twi) uchun ketadi.

Ushbu tsikllar turli funktsiyalarni o'zaro almashish yoki ishlashni yaxshilash uchun ishlatilishi mumkin (masalan, oldindan qabul qilish, quvurlarni qoplash).

Yana bir misol; to'g'ridan-to'g'ri portdan foydalanib, bir vaqtning o'zida bir nechta ignalarni holatini o'qish mumkin.

Oddiy hamkorlikda ko'p vazifali kontekstli kechikish yoki hosil bo'yicha bir nechta funktsiyalar (vazifalar) o'rtasida almashish mumkin. Buni taymer yordamida amalga oshirish mumkin.

4
qo'shib qo'ydi

Bir vaqtning o'zida amalga oshirilishi mumkin bo'lgan uch funktsiyani qanday bajarish kerak (kirishning tasodifiy o'zgaruvchilari funksiyasi)?

har bir vazifa uchun uch ijrochi/arduino bor.

3
qo'shib qo'ydi

Agar har bir funktsiyaning natijasi bitta bayt (ya'ni, 0 va 255 oralig'ida) ifodalanishi mumkin bo'lsa, unda quyidagilarni qilishingiz mumkin:

  • Arduino'ingizda 3 shift registrini (masalan, 74595 s) 3 pinga ulang
  • Har bir funktsiyaga bir pinni belgilang.
  • ShiftOut funktsiyasidan foydalaning, har bir funktsiyani natijasini bir martalik tegishli pinga chiqarish uchun
  • Barcha 3 vklyuchateli registrga umumiy kalit sifatida ulangan 4-pindan foydalaning - bu pin o'rnatilganida yuqori ko'rsatkich 3 vkladish registrlaridan bir vaqtning o'zida o'zgaradi.
3
qo'shib qo'ydi
Yoki ikkita SR ni ketma-ketlikda 2 pinni kamroq qilib qo'ying
qo'shib qo'ydi muallif Martin C. Martin, manba