ardunio ile multitask hata

Başlatan armsistem, 17 Mayıs 2015, 10:30:58

armsistem

Arkadaşlar merhaba , aşağıdaki program derleme aşamasında aşağıdaki hatayı veriyor , sorun nerede olabilir ?
"Derleme seçenekleri değiştirildi, tümü yeniden derleniyor.
UYARI : Scheduler kütüphanesi çalışmak için [sam] mimarisine ihtiyaç duyuyor ve [avr] mimarisini kullanan devreniz için uyumsuz olabilir.

C:\Users\xxx~1\AppData\Local\Temp\ccdaNkwF.s: Assembler messages:
C:\Users\xxx~1\AppData\Local\Temp\ccdaNkwF.s:47: Error: constant value required
Derleme sırasında hata oluştu."


#include <Scheduler.h>


// Include Scheduler since we want to manage multiple tasks.


int led1 = 13;
int led2 = 12;
int led3 = 11;

void setup() {
  Serial.begin(9600);

  // Setup the 3 pins as OUTPUT
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);

  // Add "loop2" and "loop3" to scheduling.
  // "loop" is always started by default.
  Scheduler.startLoop(loop2);
  Scheduler.startLoop(loop3);
}

// Task no.1: blink LED with 1 second delay.
void loop() {
  digitalWrite(led1, HIGH);

  // IMPORTANT:
  // When multiple tasks are running 'delay' passes control to
  // other tasks while waiting and guarantees they get executed.
  delay(1000);

  digitalWrite(led1, LOW);
  delay(1000);
}

// Task no.2: blink LED with 0.1 second delay.
void loop2() {
  digitalWrite(led2, HIGH);
  delay(100);
  digitalWrite(led2, LOW);
  delay(100);
}

// Task no.3: accept commands from Serial port
// '0' turns off LED
// '1' turns on LED
void loop3() {
  if (Serial.available()) {
    char c = Serial.read();
    if (c=='0') {
      digitalWrite(led3, LOW);
      Serial.println("Led turned off!");
    }
    if (c=='1') {
      digitalWrite(led3, HIGH);
      Serial.println("Led turned on!");
    }
  }

  // IMPORTANT:
  // We must call 'yield' at a regular basis to pass
  // control to other tasks.
  yield();
}

gumush

Bu scheduler sadece DUE'de yada diger 32bit klonlarinda calisacaktir. Siz hangi donanimda calistiriyorsunuz ?
Hikmet Gumus  izmir

armsistem

hımmmm mega 2650

mesaj birleştirme:: 17 Mayıs 2015, 18:56:05

peki mega 2650 gibi donanımlarda multitasking işlemi yapılamaz mı ?

Kabil ATICI

Bu tür yaklaşımlar için timer kesme yapılarını kullanıyoruz. Mega2650 8 bitlik bir yapıdır. Sizin yaptırmak istediğiniz şey o şekilde değil, zaman paylaşımı şeklinde veya timer ile yapılabilir.

Aynı şekilde harici kesme, işlemi zaman alan çevre birimlerin kesmeleri kullanılarak gerçekleştirilebilir.
Programına bakarsak, loop ve loop1 timer kesmesi ile gerçekleştirilebilir, loop3 zaten uart kesmesinin bir fonksiyonudur ki, zaman en sık kullanılan bir yapıdır ve işlemlerinin çoğunluğu main içinde gerçeklenir.
ambar7

armsistem

@Kabil ATICI teşekkür ederim ,benim tam olarak yapmak istediğim 3 adet input 3 adet output hepsinin birbirinden bağımsız olarak kullanmak istiyorum. 1 input bastım output çıkışı veriyor ,1 bırakmadan 2 yi basıyorsun bu sefer diğer 2.output çıkış ama bunu döngüler içerisinde değilde multitasking olarak yapmak istedim.

gumush

FreeRTOS icin bir kutuphane vardi sanirim , onu bir inceleyebilirsiniz.
Hikmet Gumus  izmir