Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

7
voti

Fast & Furious II parte

Col tempo lavorando nasceranno opportunità e così caro ingegnerotto col pallino della programmazione può accadere che ti venga data l'occasione di diventare un piccolo imprenditore con sede nel garage di famiglia ( che fa tanto Steve Jobs...). In quel momento, quando accade, quel feroce senso di insoddisfazione che avevi verso il tuo vecchio padrone d'azienda si converte in un nuovo belluino inappagamento che si riversa su quello stagista che hai appena assunto, cioè per meglio dire, questo è quello che vai in giro dicendo, in realtà invece è uno sfigato di neolaureato che paghi con dei buoni pasto, giornalieri o poco più e lo sfrutti senza ritegno, pensando che gli stai dando una opportuinità per entrare nel nirvana dell'industria d'avanguardia. Così ora, anche tu ( ... Brute, fili mi! ) sei a capo di una piccola pseudo azienda srl sottodimensionata e sottocapitalizzata con una sola grossa commessa acquisita grazie all'appoggio di qualche conoscente dirigente in qualche multinazionale del posto. Passi dalla Punto con la doppia marmitta al BMW serie 5 AMG e finalmente entri dentro al bar Principe della tua città e posando il gomito in Kashmir ordini "Uno Spritz. Prego...".

Passarono i 30 secondi e li contai tutti uno ad uno, sino alla fine e stizzito per la sconfitta, raggiunsi il palazzo ,sede principale dell'ente certificatore. Mi ero accorto che quel tempo così minuscolo, mi aveva ipnotizzato nella sua attanagliante brevità, così entrai nella hall dove pur essendoci una piacente e sorridente segretaria, non ne contraccambiai il saluto... ( da vero cafone ). Per risolvere il problemino di Phil poi sarebbe bastata una semplice equazioncina che si risolve appena viene scritta. Il tempo chiesto da Phil non era solo sufficiente ma inutilmente sovrabbondante. - ma hai proprio ragione grandegiove c’è come una insostenibile leggerezza che talvolta ci impedisce di risolvere anche il più semplice dei problemi e che smaschera alcune nostre piccole fragilità.-

La hall aveva una piccola isola centrale con una statua ( uno stampo in silicone... ) di una donna sopra una base in vetro che probabilmente per gli autori doveva richiamare l’acqua. ( la rinascita della qualità ? …... brrrr che brividi ). Tutto intorno alle pareti librerie piene di faldoni dal colore neutro dove sopra campeggiava la sigla UNI.

Guardai l’orologio ed eranno le 8:30 precise, non ero nemmeno entrato e già ero in ansia.-Ma quando arriva l’ufficiale metrico ? Perché non arriva ? Ma a che ora aprono questi uffici ?- L’ufficiale arrivò dopo un’interminabile mezzora, intanto aprii la borsa con il portatile della DELL lo accesi e cercai l’alimentatore perché sapevo che aveva la batteria fuori uso. Incomincii a sudare freddo quando piano piano passava il tempo senza riuscire a trovarlo. - Maledizione tutto il sistema di sviluppo è in quel pc e ho al massimo 10 minuti di autonomia, incominciamo bene - . Intanto RUD e l’ufficiale metrico buttarono giù l’elenco delle prove che avremmo dovuto effettuare in quelle due giornate, mentre io sacramentavo fra le scatole del materiale squartando borse e sbriciolando scatole.
“Bene poi per la prova finale dobbiamo sicuramente verficare il download del firmaware” facendo un cenno di ovvietà e Rud rispose sorridendo con lo stesso cenno....
“Certo si ovviamente... “
Io, nel frattempo, ero apecorinato sotto quella grande scrivania, in vetro satinato, cercando quel fottutissimo cavetto negli stessi posti dove lo avevo cercato prima, ma adesso in pieno attacco di panico. In quel momento trovai l’alimentatore in una tasca interna della borsa e uscii vittorioso da quello stato infernale.
“Abbiamo bisogno di risolvere qualche piccolo dettaglio marginale, avevamo chiesto una piccola stanza per ultimare alcuni dettagli nel macchinario...” chiesi
“A si si certamente. Certo, ne abbiamo una proprio qui” indicando verso la hall.
Nello stesso tempo ci fece strada per raggiungere un ufficio abbandonato proprio dietro lo scalone principale.

Salutammo sorridenti e pianificammo di sentirci all’ora di pranzo. Aprimmo subito i portatili e non ci volle molto ad accorgerci che nella stanza c’era un’unica presa della 220 volt e che non sarebbe bastata per entrambi i computer. Inizio ad avere qualche linea di febbre, esco furtivo col preciso intento di rubare una multipla in qualsiasi ufficio di quel grattacielo. La trovo nel cubicolo accanto lasciato improvvidamente scoperto dall’impiegato, proprio dietro una stampante digitale dell’HP ( mors tua vita mea caro mio )

Sono le 11:00 e finalmente accendo il portatile il cavetto è un po' tirato ma riusciamo a lavorare. Attacco l’interfaccia ottica per provare il download mentre RUD fa qualche smorfia di dolore.
“Che c’è ?”
“.... che c’è lo sapevo … va in crash”
“come va in crash..”
“si non funziona la flash”
“Ma cosa vuol dire non funziona la flash...”
“Niente vuol dire che questa periferica fa parte del nuovo lotto con le flash della Atmel. Mi va in crash”
“No dico, stai scherzando ? E quali flash avevate utilizzando fino ad ora...”
“Quali flash... sono quelle della SST (Azienda americana fra le altre cose acquisita dalla Microchip ) ... evidentemente hanno un dirver diverso... “
“Ma cosa vuol dire hanno un driver diverso... non puoi mica metterti li e rifare il driver adesso....e poi diverso da cosa”
“è diversa la modalità di accesso alle pagine ...si ma non c’è niente da fare... con questa flash mi va in crash il firmware... “
“E allora ?”
Non fa in tempo a rispondere perché squilla il telefono … è Mangusta. Facciamo un po’ di versi … del tipo - Rispondi tu . Non rispondi tu e un po' di pantomima.....

“Come va ?”
“E come va ...( ci siamo sentiti qualche ora fa ? secondo te..... ) tutto bene siamo appena arrivati abbiamo visto alcuni lavoretti da fare, adesso abbiamo preso posto e....”
Al Mangusta ovviamente non importava nulla di cosa stavamo facendo e tanto meno della risposta.
“Va bene va bene ragazzi... mi raccomando perché quel certificato è piuttosto importante...”
e così chiuse la comunicazione buttando giù il telefono... Mangusta era davvero seduto sopra un bracere incandescente

Le memorie flash si sono avvantaggiate della praticità data dalla interfaccia SPI. Sono molto migliorate nelle prestazioni visto che, ad esempio, il tempo di cancellazione di una pagina ora è sotto i 20 ms. I consumi nella modalità attiva, necessari a bruciare i gate del silicio, sono di una decina di milliampere. C’è però un tecnologia concorrente, che sta piano piano soppiantando le memorie Flash guadagnando terreno anno dopo anno, tanto che di recente si è incominciato a vedere anche i primi microcontrollori sviluppati in questo modo. Questa tecnologia viene chiamata comunemente Ferroram e la Ramtron è una delle ditte che producono integrati di questo tipo.

Funzione principale di lettura SPI ( assembler AVR della Atmel )

;***************************************************************************
;*
;* FUNCTION
;*    rw_spi
;*
;* DESCRIPTION
;*    Write a word out on SPI while simultaneously reading in a word.
;*    Data is sent MSB-first, and info read from SPI goes into
;*    the same buffer that the write data is going out from.
;*    Make sure data, clock and /SS are init'd before coming here.
;*    SCK high time is ((delay * 3) + 1) AVR clock cycles.
;*
;*    If 8-bit use is needed, change  LDI TEMP,16  to ,8  and also
;*    eliminate the ROL SPI_HI statement.
;*
;* CODE SIZE:
;*    21 words
;* NUMBER OF CYCLES:
;*    Overhead = 8, loop = 16 * (16 + (2* (delay_value*3)))
;    (With call + return + delay=4, it is about 648 cycles.)
;*
;***************************************************************************

rw_spi:    
    ldi    temp,16        ;init loop counter to 16 bits
       ;ldi    temp,8        ;use THIS line instead if 8-bit desired
    ;
sp i_loop:
    lsl    spi_lo        ;move 0 into D0, all other bits UP one slot,
    rol    spi_hi        ; and C ends up being first bit to be sent.
 ;If 8-bit desired, also comment out the preceding ROL SPI_HI statement
    ;
    brcc    lo_mosi
    mosi_hi
    rjmp    mosi_done    ;this branch creates setup time on MOSI
lo_mosi:
    mosi_lo
    nop            ;also create setup time on MOSI
mosi_done:
    ;
    sck_hi
    ;
 ;must now time the hi pulse - not much else we can do here but waste time
    ;
    set_delay temp,4    ;(4 * 3) cycle delay; range is from 1 to 7!
time_hi:
    inc_delay temp        ;inc upper nibble until it rolls over; then,
    brcs    time_hi        ; C gets CLEARED, & temp has original value
    ;
    sck_lo            ;drop clock line low
    ;
 ;must now delay before reading in SPI data on MISO
    ;
    set_delay temp,4
time_lo:
    inc_delay temp
    brcs    time_lo
    ;
    sbic    pinb,miso    ;after delay, read in SPI bit & put into D0
    inc    spi_lo        ;we FORCED D0=0, so use INC to set D0.
    ;
    dec    temp
    brne    spi_loop
    ret

Ma il nostro problema era quella maledetta Flash della Atmel, così chiamiamo in azienda e il febbrile meeting telefonico portò inevitabilmente all’unica soluzione possibile. In sede non c’erano più prototipi disponibili e qualcuno avrebbe dovuto partire da lì a poco per portarci la stecca delle flash della SST per la sostituzione in loco. Ma i guai non erano finiti; lancio il sistema di sviluppo e compilo in versione debug l’interfaccia per la configurazione della periferica, e non mi ci volle molto per accorgermi che la scheda non dava segni di vita.
“Perchè non rispondi ?” ( ovviamente Rud capì subito che la domanda non era rivolta a lui.. )
“Che ne so... fammi vedere”, così RUD bloccò l’emulatore e posizionò un breakpoint sull’interrupt in ricezione.
“Fin qui tutto bene... secondo me ti rispondo anche...”
“Ma cosa dici...”
Dopo mezzora di test incrociati, alla situazione allarmante si aggiunse un nuovo piacevole dettaglio. Sul mio portatile non funzionavano le interfaccie seriali USB e il debug dell’applicativo non si poteva fare. Si poteva installare l’applicativo con una chiavetta sul portatile di Rud ma lui aveva già abbastanza rogne da risolvere.

Sentiamo bussare alla porta dell’ufficio; era il nostro referente accompagnato da un giovane piuttosto distinto che solo dopo scoprimmo essere il gran lupo mannaro dell’ente, il sommo ed esimio amministratore delegato Zonin.
“Tutto bene ?”
“Si si tutto bene stiamo guardando qualche dettaglio....”
“Volevo presentarvi l’ingenger Zonin”
“Piacere. lieto di conoscerla...” - e spero pure che se ne vada presto...
Andammo a mangiare in un supermercato vicino; io ingollai una fettina di manzo callosa bevendomi un bicchiere di lambrusco. Tornammo in sede nel nostro cubicolo e dopo qualche ora arrivò lo sfigato con la stecca di flash mentre io in pieno delirio volavo fra driver seriali disassemblando librerie microsoft.

-Bene rifletti un attimo, ieri le seriali funzionavano e oggi non funzionano, cosa potrebbe essere successo ? Cosa è cambiato nel frattempo sul tuo programma ? Nulla, così perché ad esempio non provi a reinstallare i driver della Prolific ?
- -Hai visto ? ... Bastava poco e ti risparmiavi un'oretta di paura....-
Le seriali reinstallando i driver ripresero a funzionare cosa che mi avrebbe permesso di debuggare il programma con il mio portatile.

Le Macro sono la prima struttura primaria che è stata implementata per riunire insieme sezioni di programma più o meno complessi e che sono ripetuti spesso nel nostro codice. Tipicamente utilizzate nello sviluppo di progetti assembly la MACRO, in parole povere, associa ad una etichetta una serie di istruzioni da eseguire. Si possono passare parametri e ovviamente occuperanno spazio tutte le volte che saranno dichiarate.

Macro della Microchip

;----------------------------------------------------------------------------------------
; SBDIFF    : Compara 2 bit e skippa se differenti
;
; Input        Address1 : Address first register
;        Address2 : Address second register
; Output    NONE
; Ram        1 Reg : Spare_a
; Ram        1 Reg : Spare_b
;----------------------------------------------------------------------------------------
SBDIFF    MACRO    Address1, Address2
    clrf    Spare_a
    bsf    Spare_a,LSB
    btfss    (Address1 >> 8) & 0FFh,Address1 & 0FFh    
    bcf    Spare_a,LSB
    clrf    Spare_b
    bsf    Spare_b,LSB
    btfss    (Address2 >> 8) & 0FFh,Address2 & 0FFh    
    bcf    Spare_b,LSB
    movfw    Spare_b
    xorwf    Spare_a,w
    skpnz
ENDM

Macro della Atmel

;***************************************************************************
;*
;* MACROS
;*    Program Macros
;*
;* DESCRIPTION
;*    Change the following macros if a port other than PORTB is used.
;*
;***************************************************************************
.macro    ss_active
    cbi    portb,nss
.endm


.macro    ss_inactive
    sbi    portb,nss
.endm


.macro    sck_hi
    sbi    portb,sck
.endm


.macro    sck_lo
    cbi    portb,sck
.endm


.macro    mosi_hi
    sbi    portb,mosi
.endm


.macro    mosi_lo
    cbi    portb,mosi
.endm


.macro    addi
    subi    @0, -@1        ;subtract the negative of an immediate value
.endm

.macro    set_delay        ;set up the time delay amount, from 1 to 7
    subi    @0, (@1 << 5)         ;NOTE: THIS shift affects INC macro (below)!
.endm

.macro    inc_delay        ;bump the delay counter
    subi    @0, -(1 << 5)            ;shift value here must be same as above!
.endm

Una curiosità, in C esiste una dichiarazione del preprocessore che trasforma le funzioni in MACRO. Questa dichiarazione si chiama inline e in pratica espande la funzione nel punto dove viene chiamata.

// a declaration mentioning inline
inline int max(int a, int b); 
// a definition mentioning inline
inline int max(int a, int b)
{   return a > b ? a : b; }


Con lo sviluppo dei linguaggi di medio e alto livello si è creata una nuova struttura che contiene sezioni di codice da riutilizzare. Questa nuova struttura si chiama libreria e tipicamente è composta da un file che ha estensione .LIB e che viene incluso all’interno delle proprietà del progetto. La libreria è per natura statica questo vuol dire che il codice della libreria può essere utilizzato solo dal progetto che la richiama e risiede fisicamente in esso. Questa era una limitazione o meglio uno spreco di risorse, quando appunto si sono sviluppati i primi sistemi con processi concorrenti in questo caso le stesse funzioni o procedure della libreria sarebbero dovute replicate in tutti i processi attivi. Nel caso di piccole librerie non sarebbe stato un problema, ma col tempo aumentarono di dimensione e per ovviare a questo spreco nacquero le DLL.

Sostituimmo la flash con estrema cura, ma prima dovevamo dissaldare il vecchio integrato, che era l’operazione più pericolosa visto che ci sarebbe stato il rischio di danneggiare il circuito stampato. Cosi come un chirurgo in sala operatoria mi asciugai il sudore dalla fronte, RUD mi faceva da assistente all'intervento di trapianto della flash. Presi lo stagno e lo distribuii sui 4 pin laterali, nel frattempo con la punta del saldatore nelle vicinanze, necessaria a mantenere lo stagno sempre liquido sotto i pin e con l'accortezza di non toccare le piazzole, alzai l’integrato, facendo leva con una presellina. Appena i 4 pin di lato si staccarono dal circuito stampato, ripetei l’operazione sugli altri 4 pin opposti. Di li a poco l’integrato saltò via, pulii velocemente le piazzole dai residui di stagno e vi trapiantai la nuova flash saldandola semplicemnte distribuendo un po' di flussante sulle piazzole.
Squillò il telefono; era ancora Mangusta e per poco non lanciai dalla finestra il cellulare ma mi tratteni così feci in tempo per ricevere l’ennesimo indovinello di Phil via SMS ( o forse è meglio dire via SM non so...). Spensi il cellulare per evitare ulteriori scompensi emotivi.

Un giorno era passato e non avevamo risolto nessuno dei problemi che dovevamo mettere a posto e domani sarebbero iniziate le prove per la certificazione.
Quella sera facemmo le otto e riuscimmo appena in tempo a fare un paio di prove. Tutte fallite. La flash adesso era a posto ma il firmware, maledizione, non eseguiva il download. La fase di scarico del binario da protocollo sembrava corretta e non veniva fuori nessun tipo di errore. Le crc erano corrette, il file aveva le dimensioni corrette. Il driver sembrava funzionare regolarmente ma evidentemente c'era ancora qualcosa che non andava...
Raggiungemmo la locanda e esausti ci facemmo portare un antipasto di pasta fritta con prosciutto e un piatto di spaghetti alla carbonara, io presi dal buffet una ciotola di carote grattugiate e il solito bicchiere di vino. Salutai la procace e oltremodo pure loquace locandiera e scusandomi per l’incapacità di scambiare due parole mi licenziai da lei e da Rud raggiungendo la camera.

Riaccesi il cellulare e mi lessi l’indovinello di Phil per togliermi la soddisfazione di non risolverlo anche questa volta.

Nel braccio della morte, tre prigionieri aspettano l'alba della
fucilazione. In onore del compleanno del re, si sa che uno dei 
tre ne riceverà la grazia, e il guardiano sa chi dei tre avrà 
salva la vita, ma non  lo vuole svelare.

Uno dei tre (chiamiamolo A), attanagliato dall'angoscia, gli 
dice: "Dato che uno solo dei tre sarà  graziato,  certamente 
uno degli altri due (B e C) dovrà morire. Se mi dici il nome di 
uno fra B e C,  destinato a morire domani  all'alba, ti regalo 
il mio orologio d'oro. Tu non tradisci il segreto, perché  non 
sveli il graziato, e io avrò un  po'  meno angoscia. "Il guardiano 
si fa convincere e svela: "B  morirà".

A dona il suo orologio alla guardia e si sente sollevato: aveva 
il 33% di chance di salvarsi, ora restano solo lui e C, quindi 
le sua possibilità sono cresciute al 50%.

E' corretto il suo ragionamento ? #1


Mi buttai nel letto sfinito e sognai viaggi interstellari con galassie piene di pianeti abitati da ninfee che bevono latte e miele e ascoltano musica sinfonica, tutto questo fino a quando non venne il brusco mattino. Mi alzai e raggiunsi il bagno, accesi la luce e mi guardai allo specchio non era ancora finita, da li a mezzogiorno dovevamo mettere a posto il download del firmware, questa volta il tempo stava davvero scadendo e non potevamo stare a guardare...


#1 Tratto da "L'illusione di sapere" 
di Massimo Piattelli Palmarini  Edizione Oscar Saggi Mondadori
0

Commenti e note

Inserisci un commento

Inserisci un commento

Per inserire commenti è necessario iscriversi ad ElectroYou. Se sei già iscritto, effettua il login.