Spagnolo Inglese
11357 Users    

Progettare in modo sicuro con i microcontrollori (II)

  Download in PDF
Progettare con i microcontrollori 2

Software Traps

La "software trap" e' caratteristica di programmazione usata per catturare stati anomali di esecuzione di un programma. Il principio generale e' di costituire una trappola per il software e reindirizzare il codice di controllo ad un determinato indirizzo, e tornare alla sua normale funzione. Le "software trap" possono essere posizionate tra i codici dell'utente o dopo le "jump instructions", o possono essere situate negli spazi non utilizzati da una trappola di codici consecutivi. La più conosciuta "code trap" per 80C51 e' "5 bytes instruction", che e':

0x00: NOP
0x00: NOP
0x200000: LJMP SWRST, SWRST is 0x0000

Lo scopo è chiaro. Quando il codice perde il controllo, prima o poi, salterà alla "trap area". Se il codice segue all'LJMP SWRST, salterà cosi' realizzando un reset del software ed il sistema può essere ripristinato in una modalità di normale di lavoro. I due NOP sono utilizzati per sincronizzare il codice con quello di LJMP.

In realtà non e' una trap di 5 bytes, ma di 3 bytes (la prima "trap code" deve essere di 5 bytes) perché la "consecutive trap" e': 0x00 0x00 0x20 0x00 0x00 0x20 0x00 0x00 ..., invece di 0x00 0x00 0x20 0x00 0x00 0x00 0x00 0x20 0x00 0x00.

Esiste un altro metodo con "4 bytes instruction":

0x00: NOP
0x200020: AJMP 0x0020

Nel indirizzo 0x0020, che sta per "trap vector", possiamo mettere AJMP. 0x0020 del 80C51 è un codice di ricambio, disponibile tra il vettore di interrupt T1 (0x001B) e SCON (0x0023). Basta mettere qui tutti e due gestori di T1 e "trap code" (sono utilizzati 4 bytes). Questo approccio e' un po più complesso del primo con il codice aggiunto messo a 0x0020. Il primo requisito per questo approccio e' un byte di meno. In alcune applicazioni critiche un byte può salvare un sistema.

Problemi

Il codice potrebbe perdere il controllo in qualsiasi momento, soprattutto in una routine di servizio all'interrupt. L'80C51 ha due registri, un reset emulato del software non può "pulire" "hardware interrupt flag". C'è una soluzione.

SWRST: ; The real software reset address
CLR EA ; To clear EA
SETB F0 ; To setup a software reset flag in the general bit

MOV P0, #0FFH ; To setup GP0 as High impedence input mode
...
MOV PSW, #00H ; Clear PSW
...
MOV DPTR, #SWR0 ; A small trick here!
PUSHDPL
PUSHDPH
RETI ; clear high level registers, but the code is actually running to next byte
SWR0: CLR A
PUSHACC
PUSHACC
RETI ; Clear low level interrupt register and jump to 0x0000

Commenti:

  1. La EA dovrebbe essere disattivata per assicurarsi che l'intero processo è completato
  2. RETI e' l'unico "instruction" per pulire "interrupt enable register"
  3. PUSHACC e RETI sono codici alternativi per LJMP 0000H.
  4. Anche se il codice non ha attivato i registri interrupt, funziona lo stesso.
  5. F0 o qualsiasi altra generica locazione RAM può essere utilizzato per il reset ed il successivo giudizio di ripresa per ulteriori software di elaborazione.
  6. Non e' richiesto nessun cambiamento dello stato, non è necessario hardware.

 



Progettare in modo sicuro con i microcontrollori (I)

Progettare in modo sicuro con i microcontrollori (III)

Re-post del: 08-08-2008

Commenta!Feed Rss

Invia nuovo commento

Il contenuto di questo campo è privato e non verrà mostrato pubblicamente.
  • Linee e paragrafi vanno a capo automaticamente.

Maggiori informazioni sulle opzioni di formattazione.

Articoli di elettronica correlati

  • Uno dei colleghi miei, 5 anni fa, ha sviluppato un progetto sulla piattaforma 8051. Purtroppo, c'era un errore nel firmware che avrebbe condotto ad un fiasco e avrebbe potuto danneggiare la società. Il nostro capo ci ha chiesto se si poteva salvare il business ed uscire dalla crisi. Sapevo che la memoria interna del microcontrollore utilizzava la tecnologia EEPROM OTP (One Time Programming), e ho promesso di studiare il codice e provare di farlo funzionare.

  • Il microcontrollore è ampiamente utilizzato in molti dispositivi e lavora in ambienti difficili. Esso deve affrontare le sfide poste da: EMI, stabilita' della tensione, malfunzionamenti cristallo ed altre interferenze.

  • Interessante progetto realizzato con il PICmicro. Un cubo 3x3x3 formato da led RGB da 5mm, trasformabile, in questo periodo natalizio, in un CUBO NATALIZIO appunto!

  • Chip 25AA010A da 128 byte, versione SPI del 24AA/LC.

  • Le schede di memoria MMC/SD hanno diverse modalità di comunicazione (alcune opzionali), in particolare le memorie di tipo SD (Secure Digital) supportano sempre il protocollo SPI ed il protocollo nativo ad 1bit.

Commenti recenti

Nuovi utenti

  • swutz
  • saetta
  • EmanuelOpen
  • alexc85
  • tondini73
  • pmac131
  • peppeplus
  • rolfogianluca

Chi è online

Ci sono attualmente 1 utente e 64 visitatori collegati.

Utenti online

  • ORIANO SOLMI