Mi dispiace, non potro essere più me stesso dopo aver visto il grafico di Cipolla ( anonimo al bar )
Sono in ufficio da solo.
Ho il pc acceso con aperto l’editor della iar, ma non ricordo quale modulo del progetto era aperto; ma non stavo guardando il monitor bensì quel foglio anzi “il foglio” che tengo sempre sulla scrivania.
Lo uso per scrivere note che sono il più delle volte senza senso, ma spesso sono disegni ghirigori vari.
Ripensavo alla seconda trasferta che feci. Flavio, dopo qualche ulteriore prova, mi chiamò, e per la prima volta da quando lo conoscevo, mi chiamò piuttosto agitato. La macchina era entrata nello stato caotico.
Devo ammettere che mai come in quel momento, pensai di avere qualche chance in più. Ma il peggio doveva avvenire, quando mi accorsi cosa causava quel disastro nel pid.
Inserii l’interfaccia USB, scaricai la configurazione dei parametri PID e non potei fare altro che riconoscere che erano stati aggiornati con valori assurdi.
Se per un verso il PID era scagionato, per l’altro adesso la rogna l’avevo sul resto del codice. Adesso ero sicuro che non era un problema hardware (e bisogna dire anche fortunatamente).
E’ sempre stato un mio difetto quello di pensare troppo; forse ero spaventato da quella pubblicità del collaudatore di materassi che (beato lui) proprio tutto doveva fare, tranne che pensare.
Si è vero, forse il mio grosso difetto era che dovevo imparare a pensare di meno e riflettere di più.
Tutto il core del firmware era collaudato ed era già stato messo in produzione molte delle macchine stavano lavorando da mesi.
Così iniziai a considerare l’unica cosa che avevo aggiunto nel codice e che era appunto il driver seriale USB.
Aprii il modulo solo per perdere un po’ di tempo. Non aveva senso vedere come pilotavo quella interfaccia, però ricordo di aver fatto qualche ricerca sul protocollo usb. Non mi sarebbe servito a niente, perchè in quel momento avrei potuto fare delle ricerche sui pomodori in serra siberiani talmente ero lontano dalla soluzione, il vero scopo era che sentivo di dover mantenere operativo il cervello. E così, da vero temerario, spostai la sonda dell’oscilloscopio sull’interfaccia lato usb. Notai che staccando e riattaccando il connettore usb, l’oscilloscopio si triggerava e compariva sul display un piccolo burst di dati inesplicabile. E rimase inesplicabile, perchè non volevo certo capire come l’interfaccia omunicava al suo interno.
Però subito notai qualcosa che non avevo notato prima.
Appena staccai il connettore dalla scheda, la parte seriale entrò in uno stato caotico.
Uno tsunami di byte arrivò sull’interfaccia e attraverso una opportuna replica dei caratteri sulla seriale ausiliaria, notai subito il disastro.
I byte sembravano venuti fuori da un generatore di caratteri casuali, una sequenza lunghissima e interminabile.
Ora considerate che il protocollo ascii che avevo implementato prevedeva due byte di header iniziale, un byte per il comando, poi un numero varbile di parametri o dati successivi ed infine la check sum che avevo però soppresso. Così ad esempio un comando tipo aveva questa sequenza di caratteri.
05 64 03 01 03
Ma proprio in quel momento capii cosa stava accadendo.
Quello che ho appena descritto era appunto il comando seriale per l’aggiornamento del paramatro integrativo del PID.
L'inerfaccia usb ha tutto un protocollo interno molto articolato che gestisce le connessioni e le disconnessioni. La disconnessione brutale causava lo stato di instabilità che si ripercuoteva sulla linea seriale che arrivava al micro. La sequenza di caratteri casuale che il micro riceveva dalla linea impazzita ad un certo punto replicava il comando di aggiornamento del PID.
Appena il micro riconosceva la sequenza 05 64 03 i dati successivi avrebbero sovrascritto inevitbilmente la costante del termine integrativo con il devastante effetto di rendere il PID instabile.
Il protocollo delle interfacce USB prevede una procedura di connessione ma anche una di disconnessione che dovrebbero essere rispettate e che vengono implementate ad esempio nei pc sotto la voce rimozione sicura dell'hardware.
Ripristinai la checksum rafforzando il protocollo per rendere estremamente improbabile che la sequenza casuale crei un comando completo( ma ero anche consapevole che la sfiga fa questo ... ed altro ) Così feci la telefonata.
“Ciao Flavio, ti spedisco il prossimo lotto di cinque schede con il firmware aggiornato. Queste dovrebbero andare molto meglio. Spediscimi poi tutte quante le macchine che hai in azienda perché devo aggiornarci il firmware..... Ecco sì, ti chiedo una cortesia da avere con questa macchina ma che in generale vale per tutte le interfacce usb pennine comprese: prima di staccarle bisognerebbe prima rimuoverle dal sistema operativo. Devi “sempre” andare nell’icona che compare in basso a destra rimozione sicura dell’hardware, cliccare sul pulsante sinistro, e selezionare l’interfaccia usb della periferica che vuoi staccare. Poi dopo e solo dopo, stacchi il connettore. … Perchè ? Credimi è meglio così... ci sentiamo poi ti spiego.”