simulare tipi con classi
Von: nickooooola (nick83ola@gmail.com) [Profil]
Datum: 01.07.2008 01:52
Message-ID: <4e64e897-8199-4f20-a166-a1905ca40850@x41g2000hsb.googlegroups.com>
Newsgroup: it.comp.lang.python
Datum: 01.07.2008 01:52
Message-ID: <4e64e897-8199-4f20-a166-a1905ca40850@x41g2000hsb.googlegroups.com>
Newsgroup: it.comp.lang.python
Salve è il mio secondo post. sono sempre alle prese con il mio tentativo di simulatore di microcontrollore. qui faccio una specie di brainstorming su quello che sto facendo visto che sono alle prime armi ditemi se è giusto il mio ragionamento e datemi consigli per favore. ho due problemi "grossi" 1) devo simulare un registro da 8 bit del microcontrollore (che è un char del C), su cui fare ad esempio: >>>a = uInt8() >>>a = 0x00 >>>a 0x00 >>>a = 0x101 >>>a 0x01 >>>a.bit(0) = 1 >>>a.bit(1) = 1 >>>a 0x11 >>>a.complement() >>>a 0x00 >>>a += 0x100 >>>a 0x00 (cioè non lancia eccezioni ma semplicemente ignora i bit in +) ah in caso di overflow setti una variabile, ad esempio Z, a vero c'è un modo semplice e pitonico di farlo (cioè per definire una variabile che possa contenere un solo tipo specifico di dato, con solo alcune operazioni possibili?) oppure conviene definire questo tipo in C / pyrex? 2) il tipo di dato mi serve per definire un oggetto registro, che oltre alle operazioni sopra citate mi permette di fare una cosa "figa"; ovvero far eseguire una routine quando avviene un evento. ad esempio reg1 = registro() reg1.bind(function1,ON_REG_CHANGE) (cioè il registro stesso esegue una funzione, function1, quando avviene un evento, ovvero in questo caso cambia il registro) questo mi serve perchè ad alcuni registri sono associate particolari azioni che vengono intraprese in base al valore di questi registri. ad esempio se metto un particolare valore nel registro che controlla ad esempio la porta seriale del microcontrollore, questa per es. comincia a trasmettere. quindi mi serve un modo per attivare la seriale "in automatico" quando cambia il valore del registro giusto (in modo da simulare il comportamento del vero processore) 3) una volta che ho il tipo registro, devo implementare la memoria del mio microcontrollore. la memoria è divisa in tot banchi da 2^8 = 64 registri da 8 bit. alcuni registri hanno nomi particolari se sono collegati al funzionamento di qualche perifierica (es scrivendo un valore in PORTA mi ritrovo i corrispondenti +5V/0 sui piedini di uscita del microcontrollore) e mi interessa poterci accedere sia sapendo il nome sia sapendo l'indirizzo in memoria ovvero: >>> mem = memory(banksize=64,numbank=4) >>> mem['PORTA'] = 0x1F #accedo sapendo il nome >>> mem[0x0012] = 0x32 #accedo sapendo l'indirizzo in memoria quindi ci deve anche essere una funzione di init che inizializzi l'oggetto memory assegnando un alias PORTA che corrisponde a un certo banco in pratica devo ridefinire/espandere la classe dizionario dico bene? 4) il problema di sti processori è che ci sono indirizzi diversi in memoria che però scrivono sulla stessa cella. un esempio è il registro STATUS che si trova all'inizio di ogni banco di memoria e che si riferisce alla stessa cella (ovvero se scrivo un valore mentre sono nel terzo banco lo scrivo anche al corrispondente indirizzo del primo, secondo e quarto banco di memoria. questo perchè è appunto settando 2 bit del registro status che effettuo l'operazione del cambio banco. e quindi questo registro deve essere accessibile in qualunque banco di memoria io sia (sennò non potrei tornare indietro) Grazie per l'attenzion Nicola Lunghi[ Auf dieses Posting antworten ]
Antworten
- Valentino Volonghi aka Dialtone (01.07.2008 04:08)
