Esempio per carlo

Dependencies:   mbed

main.cpp

Committer:
fdalforno
Date:
2018-03-28
Revision:
1:2ca9dd78e30c
Parent:
0:d388a00e3820

File content as of revision 1:2ca9dd78e30c:

#include "mbed.h"
#include <stdlib.h>

/*
Abilitando il 
*/


Ticker sonar_tick;
float distanza_misurata = 0;

//Qui va messa la routine per misurare la distanza con il sonar
void sonar_measure() {
    //distanza_misurata = qui va messo il codice di misura 
}


int main(){
    
    /*
    Con questo codice fai in modo che ogni due secondi venga 
    chiamata la funzione di misura della distanza.
    C'è un problema di fondo immagina che il processore stia usando una periferica 
    lenta come ad esempio la seriale per scrivere a terminale.
    
    Ora immagina che questa funzione di scrittura ci metta più di due secondi per scrivere a terminale
    il risultato sarà che ad un certo punto la scrittura video verrà interrotta verrà eseguita la 
    funzione di misura che magari vuole stampare a video qualcosa con risultati impredibili
    
    
    Altro problema immagina che la funzione di misura impiegi più di due secondi ad essere eseguita
    il risultato sarà che parte la funzione prima di essere finita verrà interrotta per far partire 
    ancora la stessa funzione con il risultato di andare a bloccare il processore
    */
    sonar_tick.attach(&sonar_measure, 2.0); 
    
    
    
    /*
    Fatto il preambolo le strade sono le seguenti da valutare caso per caso
    1) bloccare il ticker con il risultato che il robot potrebbe andare a schiantarsi funzione detach con attach per riparetire
    2) sospendere gli interrupt vedi sopra con le funzioni __disable_irq(); __enable_irq();
    3) usare le code in modo da non avere sovrapposizione con le periferiche https://os.mbed.com/docs/v5.8/tutorials/the-eventqueue-api.html
    4) usi il DMA ma questo non è accessibile direttamente da mbed 
    
    
    Morale della favola la 3 è la soluzione più fattbile ed elegante ;)
    
    */
    
    
    
    
    
    //Qui ho tutte le mie cosette
    while(1) {
        wait(0.2);
    }
    
}