This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
lab8 [2015/12/08 17:40] dan.tudose created |
lab8 [2018/11/16 08:22] (current) dan.tudose [Instalare si configurare] |
||
---|---|---|---|
Line 6: | Line 6: | ||
Biblioteca foloseste un planificator preemptiv pentru a face schimbarea de context si fiecare task are propria stiva ce este salvata si refacuta la reluarea executiei. Un timer AVR este initializat si folosit pentru a furniza tick-urile de ceas pe baza carora se face temporizarea executiei si schimbarea de context. | Biblioteca foloseste un planificator preemptiv pentru a face schimbarea de context si fiecare task are propria stiva ce este salvata si refacuta la reluarea executiei. Un timer AVR este initializat si folosit pentru a furniza tick-urile de ceas pe baza carora se face temporizarea executiei si schimbarea de context. | ||
+ | |||
+ | ===== Instalare si configurare ===== | ||
+ | |||
+ | Biblioteca o puteti descarca de {{: | ||
+ | |||
+ | Un exemplu de folosire a bibliotecii il aveti in exemplul de mai jos: | ||
+ | |||
+ | <code C> | ||
+ | #include < | ||
+ | |||
+ | spinlock_t testLock; | ||
+ | |||
+ | // Create instance of OS multitasker | ||
+ | AVR_OS os = AVR_OS(); | ||
+ | |||
+ | // Define task 1 | ||
+ | void task1(void *arg) { | ||
+ | | ||
+ | |||
+ | while(1) { | ||
+ | os.spinlock_acquire(& | ||
+ | Serial.println(" | ||
+ | os.spinlock_release(& | ||
+ | os.os_sleep(10000); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | // Define task 2 | ||
+ | void task2(void *arg) { | ||
+ | int x = 0; | ||
+ | uint8_t val = 0; | ||
+ | while(1) { | ||
+ | |||
+ | os.spinlock_acquire(& | ||
+ | Serial.println(" | ||
+ | os.spinlock_release(& | ||
+ | os.os_sleep(1000); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | // Define task 3 | ||
+ | void task3(void *arg) { | ||
+ | while(1) { | ||
+ | os.spinlock_acquire(& | ||
+ | Serial.println(" | ||
+ | os.spinlock_release(& | ||
+ | os.os_sleep(15000); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | void setup() { | ||
+ | |||
+ | Serial.begin(115200); | ||
+ | Serial.println(" | ||
+ | |||
+ | os.spinlock_init(& | ||
+ | |||
+ | os.os_schedule_task(task1, | ||
+ | os.os_schedule_task(task2, | ||
+ | os.os_schedule_task(task3, | ||
+ | } | ||
+ | |||
+ | void loop() { | ||
+ | os.os_loop(); | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Task-urile sunt declarate ca functii apoi inscrise in planificator la initializare, | ||
+ | |||
+ | < | ||
+ | < | ||
+ | < |