nntp2http.com
Posting
Suche
Optionen
Hilfe & Kontakt

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
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