"infinite cose da fare, e così poco tempo" Joker
Venerdi.
Arrivammo in sede dell’ente certificatore puntualissimi, alle 8:30 della mattina. Subito notammo che parcheggiato sulla strada opposta, c’era il furgone della nostra azienda, proprio davanti al centro delle prove metriche. Il palazzo era un altro piccolo grattacielo, da 15 piani, tutti vetrati, dove all’interno c’erano sostanzialmente uffici, per le pratiche burocratiche. La parte di test e il laboratorio metrico era in una altra sede a circa 500 metri lungo la strada.
L’ultimo test che dovevamo effettuare, sarebbe stato proprio nel laboratorio metrico, che è un po’ il cuore di questa gigantesca struttura dove si certificava di tutto: dalle bilancie del mercato rionale sotto casa, alle termocoppie dei magazzini climatizzati sin’anche alle misure di planarità per squadre metalliche e di umidità per gli igrometri. In quel laboratorio, avvenivano segretissimi test dove alla fine il responsabile della certificazione dava il benestare per la rilevazione corretta delle misure. C'erano alcuni test che dovevano essere superati ma francamente non sapevo davvero se saremmo mai arrivati a terminare l’ultimo dei test.
Ci avvicinammo e scese Manninger il nostro collega e uomo azienda. Manninger era un tipico nonno nel più puro senso cameratesco, alto, faccia scavata dagli anni, con mani grosse occhi piccoli e veloci che non si fermavano mai per più di un secondo su un punto.
“E tu cosa ci fai” chiedemmo...
“ee.. lo sapete bene...”
In quel momento realizzamo. Uno dei test più importanti, che il nostro apparato doveva fare, era la prova d’urto. Per fare questo, la certificazione esigeva che l’assieme, dovesse superare un test (potenzialmente) distruttivo che consisteva nel far cascare l'assieme da un'altezza minima di 1 metro, per 100 volte consecutive, ad intervalli di un paio di secondi fra un urto e l’altro.
Farlo a mano non sarebbe stato agevole, ma il vero problema era che il nostro ente poteva gestire montagne di carte e tonnellate di burocrazia ma non test di questo tipo.
Così Mangusta aveva costretto Manninger a progettare e costruire questa specie di cestello del lotto, con tanto di manovella, che ci avrebbe permesso di eseguire il test con un minimo di criterio.
Intanto il tempo passava e il download del firmware ancora non funzionava mentre io guardavo in continuazione l’orologio. Entrammo dentro la palazzina e posizionammo il macchinario all’interno di una stanza delle torture dove venivano fatte le prove di trazione ( Tensile testing ) dei metalli ed anche di taglio. Lì c’era Frizgerald il nostro ufficiale metrico che avrebbe dovuto effettuare l’ultimo e definitivo test e che ci avrebbe aperto la porta del paradiso o dell'inferno.
Erano le 9:30 corremmo verso il nostro ufficio quando squillò il cellulare.
Mangusta! Pork...
Rispondi tu … no rispondi tu...Entrammo nella hall
“Si... certo, abbiamo quasi finito” dissi portandomi il dito sulla gola e simulando il taglio di un coltello.
“ Certo... lo sappiamo... è importantissimo... non si preoccupi abbiamo quasi finito”.
Riaccendemmo i portatili e via con le prove. Io ripresi il progetto e mi ripassai a mente l’impostazione delle classi così come le avevo implementate.
La classe dialog creata dalle MFC ( Microsoft Foundation Classes ) creava un oggetto Main_Control. Al suo interno c’era la macchina a stati che eseguiva le funzioni evento della dialog. L’oggetto Main_Control a sua volta incapsulava la classe Einstain ( il nome dell’apparato ) con all’interno tutti i metodi e le proprietà dell’apparato stesso. L’oggetto Einstain a sua volta conteneva l’oggetto ProtEin con tutti i metodi e le proprietà del protocollo. L’oggetto ProtEin infine conteneva il thread per la ricezione dati.
Tutta questa fatica l’ho implementata per creare un sistema di classi, in grado di gestire connessioni multiple ed indipendenti fra di loro che poi mi sarebbero tornate estremamente utili per un altro progetto, ancora lontano da venire... ma questa sarà un'altra storia...
Gli oggetti sono un'estensione delle strutture del C++, vengono dichiarati nei file header ma solo quando sono allocati prendono vita. Gli oggetti hanno due proprietà fisse che sono i costruttori e i distruttori. I costruttori si impara presto ad usarli, i distruttori invece si impara dopo un po’ e precisamente quando i programmi cominciano a crashare da soli e il debugger di visual studio ti fa vedere il codice assembly degli header mfc perché non sa cos’altro fare strozzato dalla memoria che gli svanisce sotto i piedi. La programmazione ad oggetti è meravigliosamente dinamica, il programma ha tutto un diverso flusso rispetto alla programmazione classica implementabile sui sistemi embedded. Col tempo si creano oggetti strutturati sempre più complessi che vengono allocati e disallocati in continuazione come le infinite bollicine di una coppa di spumante che nascono e muoiono creando un movimento di dati continuo.
Una volta si pensava che arrivati agli oggetti e alle dll non ci fosse spazio per sviluppare qualcosa di nuovo, ma non fu così. Alla fine degli anni 80 era nata la programmazione ad oggetti, ovviamente tardò molto qui in italia perché al massimo esistevano soggetti che programmavano in GwBasic, Fortran, Rpg.... o nei main frame della IBM. Comunque Microsoft stava covando qualcosa di veramente innovativo. In quel periodo la Apple aveva presentato il suo piccolo gioiellino l’Apple II che aveva l’enorme pregio di avere un sistema operativo multiprocesso con una innovativa interfaccia grafica e un altrettanto innovativo mouse.
Microsoft era un po’ lenta a partire, perché non aveva le risorse per creare un sistema operativo vero, così all’inizio, pensò bene di creare, prima l’interfaccia grafica e poi magari su quella inventarsi un sistema operativo multiprocesso. Il sistema operativo di riferimento era Unix con l'efficace context switching, Microsoft invece con Windows aveva preso la strada delle code di eventi. Una tempesta di cervelli nacque per cercare di sviluppare un sistema efficace per permettere di interfacciare i processi fra di loro. Ma più che altro il tentativo ambizioso era quello di creare un oggetto universale che fosse indipendente sia dal linguaggio che dal sistema operativo. Questa tempesta creò gli oggetti COM e per molti fu l’inizio di un incubo. In questo link c’è descritta l’agevole procedura per la creazione di questo oggetto
“Non va...” e il gelo entrò nella stanza. La scheda con multiprocessore aveva eseguito il processo di comunicazione correttamente, ma la fase di programmazione della flash non era riuscita. Questa volta il problema era nel bootloader e la flash non era quella esterna ma era quella interna... quella del micro.
Il bootloader è tipicamente un programmetto molto usato nei sistemi embedded a microcontrollore e tipicamente svincolato dal processo principale della macchina. Il suo scopo è quello di verificare lo stato della flash esterna e quello della flash interna. Se sulla flash esterna c’è una release diversa da quella interna, viene avviata una fase di riprogrammazione. Questo è quello che accade nei bootloader più semplici, in molti casi i micro moderni come il nostro hanno un bootloader interno. L’STM32 ha un infatti un precaricato firmware in ROM che utilizza le interfaccie seriali disponibili dei vari micro della famiglia, RS232 CAN USB ma a noi piace complicarci la vita e così ne abbiamo implementato uno separato.
Le interfaccie suddette RS232 CAN e USB non sono per nulla omogenee.
- L'RS-232 è una interfaccia fisica asincrona. ( una alternativa è il 485 )
- Il CAN diciamo che è ad un livello superiore all’RS232 è infatti un protocollo ( utilizzato molto nell’automotive ) e la sua interfaccia è sincrona. ( una alternativa è il protocollo della philips l’I2C )
- USB è l’estensione moderna della vecchia RS232 tipicamente nessuno utilizza il protocollo interno, però magari qualcuno particolarmente bravo....( una alternativa booo )
Scusate la digressione, riprendiamo con la storia. In quel momento capimmo che non avevamo più tempo per mettere a posto il firmware. Un nuovo squillo di telefono, questa volta era Frizgerald che ci invitava a raggiungere la camera dei test, per effettuare le prove d’urto. Nello stabile ci avrebbe accompagnato un altro tecnico, perché lui era impegnato in altre commesse. Dopo una manciata di minuti sentimmo bussare; era il tecnico che ci avrebbe fatto da guida. Riprendemmo le nostre scartoffie e andammo nella stanza dei test e per più di un'ora facemmo girare il cestello, con la speranza nascosta che si spaccasse tutto quanto, almeno la si finiva lì.... Ma non c'era niente da fare l’apparato non si ruppe così ritornammo indietro come delle furie. Sono appena passate le due e avevamo saltato il pasto.
L’assieme era una scheda inserita in una scatola di plastica pressofusa nera con un display lcd 2 x 14; navigavo fra i menù quando arrivai alla voce firmware e visualizzai la release.
La release era aggiornata ma il firmware sotto no...
Ci guardammo e senza dire altro pensammo di giocarci la nostra ultima carta.
Dopo poco bussò il loro tecnico per portarci nella stanza del centro metrico senza avere altre possibilità. Squillò il telefono e risposi senza sentire più dolore. Mangusta aveva adottato la tecnica del polling frenetico aumentando la frequenza delle chiamate.
Di lì a poco ci incamminammo, ma il passo era quello dei condannati al patibolo, io ero sostenuto solo dalla curiosità di vedere quella specie di santissimo nel tempio della dea misura, per il resto già mi immaginavo come sarebbe andata a finire.
Ritornammo nel palazzo, entrammo dal retro questa volta in un piccolo cortile e arrivammo ad una anonima entrata. Da lì citofonammo e il portone elettrico si aprì senza chiederci chi eravamo. Un angusto corridoio molto lungo, poi una luce, un altro cortile e un’altra porta di entrata ad un nuovo palazzo. La stanza trapezoidale aveva delle scale informi laterali che portavano al piano di sopra. Un’altra porta e poi un ufficio vuoto scuro. In fondo un chiarore e un’altra stanza questa volta rumorosa. Entrammo un po’ di soppiatto per paura di disturbare e all’interno vidi 4 solerti impiegati che lavoravano circondati da montagne di certificati cartacei con vetusti computer utilizzati da decenni solo per redigere incartamenti. Scrivanie, scaffali, cassettiere tutte stracolme di faldoni ,cartelle, tabulati e postit sparsi dappertutto. In fondo alla parete una porta nascosta dello stesso colore grigio delle pareti. Allungai la mano sulla maniglia e aprendo mi accorsi che era una porta blindata.
Entrai all’interno e salutai Frizgerald. Quello era il suo regno ed eravamo arrivati nel sancta sanctorum.
La stanza irregolare era deludentemente caotica mi aspettavo scrivanie bianche con penne nere e invece trovai tavolini da picnic con sotto gruppi elettrogeni per garantire la continuità elettrica dei test più lunghi.
C’era un leggero rumorino creato dalle ventole nei fancoil sotto le finestre. Era pomeriggio inoltrato, noi eravamo un pelino sudati ma non era per il caldo.
Sulla sinistra una serie di apparati per la termostatazione dove venivano messe le termocoppie sotto test.
Sulla destra altre scrivanie con alcuni alambicchi le misure di umidità. Sopra una struttura in ferro un massiccio parallelepipedo in marmo per le misure di planarità.
Il primo test era la verifica dei contatori e fu avviato subito, ma dopo mezzora Rud si accorse che l’apparato era andato in crash; non sapevamo di chi era la colpa, ma io, in perfetto sincronismo, distrassi subito Frizgerald e chiesi cos’era quella fantascientifica strumentazione in un rack a fianco. Mi spiegò con solerzia, estremamente grato della mia curiosità, che erano “semplici” tester per la misura di Femto ampere ( ovviamente scherzava... ), nel mentre Rud aprì la scatola e infilò il probe dell’emulatore per ripristinare l’indice del contatore sputtanato.
Alla fine arrivammo al download e collegammo l’apparato con l’interfaccia ottica. Diedi le istruzioni peraltro semplici per eseguire il download e subito lo fece partire. Nel mio programma compariva un indice numerico che visualizzava lo stato di aggiornamento del firmware ma io controllavo solo che il tecnico non facesse altre mosse.
Ancora uno squillo di telefono e questa volta cedetti.
“Mangusta... si senti siamo in laboratorio non puoi continuare a chiamare... hai rotto i c....” e chiusi il telefono. Io non sono in grado di bleffare, se fossimo stati ad una gara di poker mi avrebbero subito sgamato. Il nervosismo era un evidente sintomo, ma forse il nostro tecnico non gioca a poker.
Finì il download e il tecnico guardò la release.
Si girò ed esclamò
“E' cambiata … “
“Cioè in che senso...” ero pronto alla rissa
“No dico … è cambiata la relase”
“e … e si che è cambiata ...”
“... vuol dire che ha terminato il download con successo “
Stavo per dire questo lo dice lei...
“mi scusi sa ma noi siamo qui proprio per questo... “
“Bene bene...”
Io e Rud evitammo gli sguardi
“Via su adesso potete anche rilassarvi...” era un tecnico con un cuore grande così....
“Si certo... abbia pazienza, sa noi non facciamo certificati metrici tutti i giorni...”
Scherzammo un po'... poi ci chiese se potevamo lasciargli l’apparato e subito glissammo un po’ perché quello che ci interessava era il numero del certificato.
Squillò il telefono e mai come allora la telefonata del Mangusta fu provvidenziale, perché istantaneamente gli passammo Frizgerald, parlarono un attimo per ottenere il numero del certificato, ma prima di ottenerlo Frizgerald avrebbe dovuto telefonare in sede centrale, per la conferma dell’assegnazione. Mangusta rimase ancora cinque minuti sul braciere.
Mangusta era dentro l’ufficio contento come una pasqua per aver ottenuto il suo certificato. La realtà si seppe molto tempo dopo quando scoprimmo che quel venerdì non era l’ultimo giorno disponibile. Il vero problema era interno, le spese per la certificazione, se non venivano messe sotto controllo sarebbero diventate presto insostenibili. Ogni giorno che passava era qualche migliaio di euro di costi aggiunti che velocemente avrebbero strozzato il progetto.
Partimmo dopo un'oretta circa, dopo aver salutato tutti presi le chiavi della macchina e mi misi alla guida, Rud sali subito dopo. Un attimo di silenzio e poi dissi “Non dire niente....” lui fece un cenno di assenso e non disse niente e poco dopo si addormentò.