Introduzione |
Esercizio 1 (Registratore digitale)
Esercizio 2 (Reg. dig. + signal handler)
Esercizio 3 (Reg. dig. con timer)
Esercizio 1
Creare un programma per gestisca la registrazione di misure di
temperature (tramite termocoppia o pt100) ad intervalli regoli
seguendo lo schema:
int fd_metex; ofstream file_out; TCanvas *window; TGraph *graph; void init(){ // apre la porta seriale e ne definisce i parametri di comunicazione // apre il file di output e la finestra grafica } void end(){ // attiva l'editor grafico e poi chiude la finestra grafica // chiude il file di output e la seriale } double delta_t(struct timeval t0){ // calcola la differenza tra il tempo "attuale" e t0 return val; } void misura(){ double dt = delta_t(t0); double val = get_metex(...); double T = ....; // eventuale conversione val->T // aggiornamento grafico e scrittura t e T su file } int main(){ init(); ... for (...){ // N misure (1 al secondo); misura(); sleep(1); } ... end(); ... }Testate le funzioni una alla volta. Predisponete il programma in modo che possa graficare solo le ultime N misure acquisite.
Esercizio 2
Modificate il programma precedente in modo che possa essere interrotto
da tastiera (ad esempio con crtl-C che corrisponde a SIGINT).
#include <signal.h> int main(){ ... signal(SIGINT,end); // attenzione void end() va modificata in void end(int sig) ... while(1){ ... // misura.. } ... }
Esercizio 3
Modificate il programma precedente in modo che la singola misura (+ lettura del tempo,
aggiornamento del buffer,...) sia eseguita
da una funzione a sua volta chiamata da un timer.
void misura(int sig){ ... } int main(){ struct itimerval timer; timer.it_value.tv_sec = 1; timer.it_value.tv_usec = 500000; timer.it_interval.tv_sec = 1; timer.it_interval.tv_usec = 0; setitimer(ITIMER_REAL,&timer,NULL); // regolazione dei parametri signal(SIGALRM,misura); while(1){ ... // puo' contenere comunicazione con l'utente per // modifica dei parametri di acquisizione (ad es. // frequenza di acquisizione) } }