Newsgroup: it.hobby.elettronica.digitale
Titolo: Usare i timer interrupts per costruire programmi multitasking (PIC)

Ho la necessità di programmare un pic che dovrebbe gestire tanti I/O in
tempo reale.
Per questo necessito di chiamare tutte le funzioni un po' di tempo per
ciascuna assegnando loro varie priorità.
Questo tipo di programmazione viene tipicamente implementata nei
microprocessori e microcontrollori e si chiama tecnica di schedulazione
(scheduler in inglese).
Qualcuno saprebbe indicarmi dove trovare materiale che mi insegni a scrivere
programmi di questo tipo?
  Grazie

...

Parecchi anni fa, la Motorola forniva all'interno di un kit di
valutazione dei micro della serie 68hc05, uno stupendo
libro in inglese che spiegava le tecniche di programmazione
multitask dei micro in generale. Probabilmente e' il miglior
libro per principianti che abbia mai visto sull'argomento,
con molti esempi e spiegazioni chiarissime.
Prova a cercare nel sito della Motorola, magari lo trovi
in formato acrobat.
Luigi

va bene tutto, esistono varie tecniche di varia natura e complessità ed
anche realtime kernel per tutti i micro. Io stesso ne ho scritti per una
mezza dozzina di micro, scusate ho i capelli grigi... epperò i pic sono i
meno adatti, perchè?
perchè non hanno, a mio giudizio, sufficienti risorse; prima fra tutte non
hanno la possibilità di cambiare stack, lo stack è unico, inaccessibile e
piccolo piccolo.
Anche la possibilità di nestare interrupts è molto limitata.
Ovviamente si possono fare eseguire ai pic più processi contemporaneamente
ma non colla tecnica usuale del time slicing ( assegno una unità di tempo ad
un programma scritto come dovesse girare da solo, poi cambio contesto e ne
lancio un altro e così via). buona fortuna. piero
luigi funes ha scritto:


 programmi di questo tipo?
I principi di base sono noti e consolidati; se sei interessato
all'argomento ti consiglio di partire da un libro di teoria degli OS in
generale, come quello del Tanembaum (che pur essendo vecchiotto, ti dice
tutte le cose piu` importanti).
---
Bye! Lorenzo Lutti
http://antani.virtualave.net/

nniikk ha scritto:

Come gia' hanno risposto Piero e Lorenzo ci sono fondamentalmente due modi
per realizzare il multitasking. Il vero multitasking e' detto preempitive,
richiede l'uso di stack multipli e suddivide l'esecuzione di piu' processi
(scritti in modo tradizionale) in slices di tempo, non e' assolutamente
realizzabile su un microcontroller. Il secondo tipo e' detto non
preempitive, i processi sono scritti in modo da usare poco tempo e
restituire subito il controllo a un loop principale che li richiama
ciclicamente come subroutines. Questo sistema e' usabile su qualsiasi micro,
pero' richiede di scrivere i programmi sotto forma di "automi a stati
finiti" piuttosto che nel modo tradizionale. Ho scritto qualche nota su
questo tipo di programmazione in un documento .wri (il vecchio write di
windows leggibile col wordpad) posto in:
http://members.xoom.it/stor/z80/col_file/col10.zip
All'interno di col10.zip c'e' il manuale Col10.wri, il capitolo 8 parla
succintamente del multitasking realizzato con processi a stati. La
descrizione riguarda il linguaggio specifico descritto nel manuale, ma la
filosofia e' applicabile con ogni linguaggio. Se puo' essere di aiuto su:
http://members.xoom.it/stor/st6/chiama2.txt
trovi un programma per ST6 che usa questo sistema. In fondo al listato c'e'
l'interrupt del timer che circa ogni 5 millisecondi richiama 8 processi
indipendenti (TONO1 SVIN1 ecc...). Questi processi hanno ciascuno una
variabile di stato che indica quale stato deve essere eseguito. Per esempio
lo stato da eseguire all'interno del task CHIA1 e' scritto nella variabile
di stato ST7, se vale 1 viene eseguito il primo stato (CHIA1_1), se vale due
il secondo stato (CHIA2_1) ecc. In ogni stato si controlla il verificarsi di
qualche condizione (evento), si puo' effettuare qualche operazione, e se e'
il caso si cambia il valore della variabile di stato affinche' alla prossima
chiamata del task venga eseguito un altro stato.... non so se e' abbastanza
confuso.... ;)
ciao
Claudio