#include <Servo.h> Servo myservo; void setup() { myservo.attach(9); pinMode(A0, INPUT); pinMode(8, OUTPUT); } void along(){ delay(5000); digitalWrite(8, HIGH); delay(5000); digitalWrite(8, LOW); } void loop() { myservo.write(analogRead(A0) / 6); } Объясните как выполнять два действия одновременно? Чтобы процесс ожидания лампочки не тормозил управление сервомотором.
А как еще заставить его читать? Выслеживать по ip, приходить домой и заставлять учить содержимое наизусть??
В данном случае одновременно - джиттер не должен превышать одного такта. Вот взять принтер - там и РТОС, и вытесняемые потоки, и кажется, что окружность печатается одновременно перемещением двух осей, но мы то знаем, что оси перемещаются по микрошажочкам ДРУГ ЗА ДРУГОМ.
Какой-же бред несёшь. Уверен, что автору нужна реакция в пределах десяток-сотен наносекунд? Так в этом и суть реализации многопоточности на одном ядре -- выполнять операции последовательно, но переключая контекст с такой скоростью, что бы создавалось впечатление параллельной работы. Та же ATmega328P на 16МГц (Arduino UNO) вполне себе справляется с тремя вытесняемыми потоками (вместе с delay'ами).
А вот если я в порт целиком буду данныя писать, светодиодики на ём будут зажигаца одновременно или многопоточно?
На худой машике таскать регистры туда-сюда и иметь несколько стеков... по одному на задачу и плюс один на "кернел"-коммутатор это больно жирно. Проще на прерывании по таймеру без стеков таких и со счётом номера задачи-исполгяемой ветки (циклограмма). А для кернела надо что-то потолще с ОЗУ от 500кБ... тогда может и надо. Тут AT91SAM7S64/128/256 скрипит со своими 64 кБ ОЗУ. Да и ряд потоков умирает. Даже на MOXA с (Linux) и 32 МБ ОЗУ несколько потоков просто умирает и/или не просываются вовсе - а устаканивать приходится в принудительном сне других потоков. Жуть! Но зато как отдкльные процессы всё отлично. Надо только применить синхронизацию данных между процессами. Примените лучше метод по одному прерыванию таймера, с выполнением каждый раз своей ветки. Правда косяк возможен с временем выполнения ветки. Так что программа с ветвлением в цикле а таймер изменяет номер. Ну только не таскать регистры туда-сюда и на стек места не хватит.