Fabio Dal Forno
/
STM32_Encoder_Carlone
Esempio per carlo
Diff: main.cpp
- Revision:
- 1:2ca9dd78e30c
- Parent:
- 0:d388a00e3820
--- a/main.cpp Thu Jan 25 10:30:24 2018 +0000 +++ b/main.cpp Wed Mar 28 07:59:20 2018 +0000 @@ -1,31 +1,60 @@ #include "mbed.h" #include <stdlib.h> +/* +Abilitando il +*/ -InterruptIn encoder(USER_BUTTON); //FACCIO FINTA CHE L'encoder sia il bottone attento ne servono due uno per ruota -long int count1; -int scattiPerGiro = 3; - -void ruota1() { - count1++; +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 } -float numeroGiri(){ - return count1 / scattiPerGiro; -} - - - - - -int main() -{ - encoder.rise(&ruota1); - - while (1) { - led = !led; - wait(delay); +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); } -} + +} \ No newline at end of file