ENCICLOPEDIA DELLA RADIOELETTRONICA ED ELETTRICA Inizializzazione di segmenti di memoria aggiuntivi nei programmi per microcontrollori della famiglia MCS-51. Enciclopedia dell'elettronica radio e dell'ingegneria elettrica Enciclopedia della radioelettronica e dell'elettrotecnica / microcontrollori I microcontrollori moderni dispongono di una memoria dati non volatile (EEPROM) incorporata, in cui a volte è necessario inserire informazioni prima che il dispositivo inizi a funzionare. L'immagine (firmware) di questa memoria deve essere generata durante lo sviluppo del programma. Ciò può essere fatto, ad esempio, dagli assemblatori di microcontrollori delle famiglie PICmicro e AVR. Danno al programmatore l'opportunità di organizzare un segmento di memoria aggiuntivo e di impostarvi i dati iniziali per la scrittura su EEPROM. Gli assemblatori per microcontrollori con core MSC-51 consentono anche di dividere la memoria in più parti, ma solo in una di esse - il segmento di codice eseguibile - è possibile l'inizializzazione. In tutti gli altri è possibile riservare celle di memoria e scrivervi dati solo durante l'esecuzione del programma. Una via d'uscita dalla situazione può essere la tecnica descritta di seguito. La sua essenza è l'uso dell'assemblaggio condizionale, a seguito del quale l'inizializzazione di un segmento di codice avviene in modo diverso, a seconda delle condizioni di traduzione. I file HEX risultanti possono essere utilizzati per programmare non solo la EEPROM interna del microcontrollore, ma anche i chip di memoria esterni. Segmenti aggiuntivi creati artificialmente (è ammesso un numero qualsiasi) vengono inseriti nel testo del programma prima del segmento di codice reale. Le etichette definite in uno di essi saranno conosciute in tutti i successivi, compreso il segmento di codice vero e proprio. Ma non sono ammessi collegamenti in direzione opposta. Non esistono restrizioni sul tipo e sulla posizione fisica della memoria aggiuntiva. Un esempio di programma con due segmenti aggiuntivi inizializzati, convenzionalmente chiamati EEPROM e FLASH, è riportato in Tabella. 1. Dopo averlo salvato nel file esempio.asm, utilizzeremo l'assemblatore ASEM-51, che può essere “scaricato” gratuitamente all'indirizzo . Prima di tutto, eseguiamo l'assembler sulla riga di comando asem esempio.asm eeprom.hex/define:EEPROM Durante l'elaborazione delle prime righe del testo del programma, inserirà le etichette idEeprom, ptrWord e prtBufE nella sua tabella dei simboli e i dati specificati dalle direttive DB e DW nel file di output eeprom.hex (Tabella 2). Verrà quindi controllata la lunghezza del segmento. Se il valore del contatore del programma supera la capacità EEPROM fisicamente esistente (in questo caso, 640 celle), verrà visualizzato un messaggio di errore. Se la dimensione del segmento è ovviamente piccola, il controllo può essere omesso. Controlli simili possono essere forniti in altri segmenti. Successivamente, l'assemblatore incontrerà la direttiva IFNDEF EEPROM. Poiché sulla riga di comando (parametro /define:EEPROM) è definito un simbolo con questo nome, tutte le righe successive del programma, fino alla direttiva ENDIF, verranno ignorate e la traduzione terminerà lì. Eseguire la ritrasmissione dello stesso programma dalla riga di comando asem esempio.asm flash.hex/define:FLASH Si differenzia dal precedente solo per la definizione del simbolo FLASH al posto di EEPROM. La prima fase della traduzione avverrà esattamente come descritto sopra e i dati del segmento EEPROM verranno scritti nel file di output. Tuttavia, questa volta la direttiva IFNDEF EEPROM non interromperà il processo e la successiva direttiva ORG 0 ripristinerà il contatore del programma. L'assemblatore inizierà a scrivere i dati destinati al segmento FLASH nel file di output dall'indirizzo zero. La trasmissione verrà interrotta dalla direttiva IFNDEF FLASH. La forma finale del file flash.hex è mostrata nella tabella. 3. Impostiamo la traduzione del segmento vero del codice eseguibile dal comando asem esempio.asm Innanzitutto i segmenti aggiuntivi verranno nuovamente tradotti e tutte le etichette in essi definite verranno inserite nella tabella dei simboli assembler, che consentirà loro di essere referenziati dal segmento di codice. La direttiva ORG 0 all'inizio ripristinerà ancora una volta il contatore del programma a zero. Successivamente la trasmissione proseguirà normalmente. Nel file risultante example.hex (Tabella 4), il codice del programma eseguibile inizia nella quarta riga, situata dopo le righe identiche a quelle contenute nei file HEX precedenti. La presenza di informazioni non necessarie solitamente non interferisce con il corretto caricamento del codice nelle apposite aree di memoria del microcontrollore. Nel buffer del programma che gestisce la programmazione, i dati corretti, quando gli indirizzi coincidono, “spiazzano” quelli precedentemente inseriti. E solo se il nuovo segmento è più corto del precedente, la sua “coda” verrà memorizzata nel buffer. Per questo motivo è consigliabile descrivere i segmenti di un programma in ordine crescente di lunghezza. Alcuni programmatori non dispongono di un buffer intermedio o non controllano rigorosamente i dati di input, impedendo la sovrapposizione degli indirizzi. Nel primo caso la programmazione risulterà errata, nel secondo non si avvierà affatto finché non verranno eliminati gli “errori”. Puoi rimuovere manualmente le righe extra da un file HEX utilizzando qualsiasi editor di testo. Puoi farlo automaticamente eseguendo due comandi di seguito: hex2bin esempio.hex bin2hex esempio.bin Il primo creerà un'immagine binaria dei dati contenuti nel file example.hex e la inserirà nel file example.bin. Il secondo eseguirà la conversione inversa e creerà un nuovo file example.hex senza fronzoli. I programmi necessari possono essere “scaricati” da: E . Autore: S. Chekunov, Izhevsk Vedi altri articoli sezione microcontrollori. Leggere e scrivere utile commenti su questo articolo. Ultime notizie di scienza e tecnologia, nuova elettronica: Macchina per diradare i fiori nei giardini
02.05.2024 Microscopio infrarosso avanzato
02.05.2024 Trappola d'aria per insetti
01.05.2024
Altre notizie interessanti: ▪ La musica sintonizza il cervello del bambino per la parola ▪ Scoperta un'enorme fonte naturale di gas serra ▪ Nuovo chip VoIP per sistemi di telefonia Wi-Fi ▪ Recupero di batterie al litio ferro fosfato ▪ Smartphone ZTE Grand S3 con scanner dell'iride News feed di scienza e tecnologia, nuova elettronica
Materiali interessanti della Biblioteca Tecnica Libera: ▪ sezione del sito Radio - per principianti. Selezione di articoli ▪ articolo Cifre apparenti. Enciclopedia delle illusioni visive ▪ articolo Menta limone. Leggende, coltivazione, metodi di applicazione
Lascia il tuo commento su questo articolo: Tutte le lingue di questa pagina Homepage | Biblioteca | Articoli | Mappa del sito | Recensioni del sito www.diagram.com.ua |