mais ça m'oblige à donner ajouter une indirection syntaxique pour accéder à "a1" par exemple, ce qui ne me plait pas non plus.
C'est pourtant assez propre pour du C. Si à la place de part1 tu mets un nom comme reg, alors ton code C sera du type :
base->reg.truc = 42;
Ce qui est lisible.
L'autre solution c'est utiliser des defines ou des enums :
enum { TRUC = 10, MACHIN = 30 };
base[TRUC] = 42;
-- Éric Lévénez -- <http://www.levenez.com/> Unix is not only an OS, it's a way of life.
Le 18/09/06 12:09, dans
<1158574166.806725.109130@i42g2000cwa.googlegroups.com>,
« jerome.arbez-gindre@laposte.net » <jerome.arbez-gindre@laposte.net> a
écrit :
Pour acceder à des ports I/O, je souhaiterai définir une structure et
la mapper à mes ports.
mais ça m'oblige à donner ajouter une indirection syntaxique pour accéder à "a1" par exemple, ce qui ne me plait pas non plus.
C'est pourtant assez propre pour du C. Si à la place de part1 tu mets un nom comme reg, alors ton code C sera du type :
base->reg.truc = 42;
Ce qui est lisible.
L'autre solution c'est utiliser des defines ou des enums :
enum { TRUC = 10, MACHIN = 30 };
base[TRUC] = 42;
-- Éric Lévénez -- <http://www.levenez.com/> Unix is not only an OS, it's a way of life.
Marc Boyer
Le 18-09-2006, a écrit :
Pour acceder à des ports I/O, je souhaiterai définir une structure et la mapper à mes ports.
Est-ce vraiment une bonne idée ? Tu vas te prendre la tête à écrire une structure de donnée pas portable, avec perte d'espace mémoire (BIG_BUFFER_LOCATION - 2* sizeof(uint8_t) ), tout ça pour faire des accès en memcpy ? N'auras-tu pas aussi vite fait de dissocier le port et la représentation dans le code ?
Marc Boyer -- Si tu peux supporter d'entendre tes paroles Travesties par des gueux pour exciter des sots IF -- Rudyard Kipling (Trad. Paul Éluard)
Le 18-09-2006, jerome.arbez-gindre@laposte.net a écrit :
Pour acceder à des ports I/O, je souhaiterai définir une structure et
la mapper à mes ports.
Est-ce vraiment une bonne idée ? Tu vas te prendre la tête
à écrire une structure de donnée pas portable, avec perte
d'espace mémoire (BIG_BUFFER_LOCATION - 2* sizeof(uint8_t) ),
tout ça pour faire des accès en memcpy ?
N'auras-tu pas aussi vite fait de dissocier le port
et la représentation dans le code ?
Pour acceder à des ports I/O, je souhaiterai définir une structure et la mapper à mes ports.
Est-ce vraiment une bonne idée ? Tu vas te prendre la tête à écrire une structure de donnée pas portable, avec perte d'espace mémoire (BIG_BUFFER_LOCATION - 2* sizeof(uint8_t) ), tout ça pour faire des accès en memcpy ? N'auras-tu pas aussi vite fait de dissocier le port et la représentation dans le code ?
Pour acceder à des ports I/O, je souhaiterai définir une structure et la mapper à mes ports.
Est-ce vraiment une bonne idée ? Tu vas te prendre la tête à écrire une structure de donnée pas portable, avec perte d'espace mémoire (BIG_BUFFER_LOCATION - 2* sizeof(uint8_t) ), tout ça pour faire des accès en memcpy ?
Dans ce cas, il n'y a pas de perte d'espace mémoire, c'est de la mémoire mappée sur un périphérique (dont je ne maitrise pas le mapping)
N'auras-tu pas aussi vite fait de dissocier le port et la représentation dans le code ?
Pour acceder à des ports I/O, je souhaiterai définir une structure et
la mapper à mes ports.
Est-ce vraiment une bonne idée ? Tu vas te prendre la tête
à écrire une structure de donnée pas portable, avec perte
d'espace mémoire (BIG_BUFFER_LOCATION - 2* sizeof(uint8_t) ),
tout ça pour faire des accès en memcpy ?
Dans ce cas, il n'y a pas de perte d'espace mémoire, c'est de la
mémoire mappée sur un périphérique (dont je ne maitrise pas le
mapping)
N'auras-tu pas aussi vite fait de dissocier le port
et la représentation dans le code ?
Pour acceder à des ports I/O, je souhaiterai définir une structure et la mapper à mes ports.
Est-ce vraiment une bonne idée ? Tu vas te prendre la tête à écrire une structure de donnée pas portable, avec perte d'espace mémoire (BIG_BUFFER_LOCATION - 2* sizeof(uint8_t) ), tout ça pour faire des accès en memcpy ?
Dans ce cas, il n'y a pas de perte d'espace mémoire, c'est de la mémoire mappée sur un périphérique (dont je ne maitrise pas le mapping)
N'auras-tu pas aussi vite fait de dissocier le port et la représentation dans le code ?
Pour acceder à des ports I/O, je souhaiterai définir une structure et la mapper à mes ports.
Est-ce vraiment une bonne idée ? Tu vas te prendre la tête à écrire une structure de donnée pas portable, avec perte d'espace mémoire (BIG_BUFFER_LOCATION - 2* sizeof(uint8_t) ), tout ça pour faire des accès en memcpy ?
Dans ce cas, il n'y a pas de perte d'espace mémoire, c'est de la mémoire mappée sur un périphérique (dont je ne maitrise pas le mapping)
Mais as-tu des variables de type regs_t dans ton code, ou te contentes-tu de faire des cast entre des adresses memoires (celles des ports) et un reg_t* ?
Mon idée (mais peut-être pas du tout adapté à ton contexte), c'est de préparer la structure avant de l'envoyer en mémoire. reg_t val; val.some_feature_enable = true ; val.other_thing= false; val.param_truc= 64; write_reg(&val, port);
Mais si on passe son temps à faire de mini-modifs, ça n'a pas d'intérêt.
Marc Booyer -- Si tu peux supporter d'entendre tes paroles Travesties par des gueux pour exciter des sots IF -- Rudyard Kipling (Trad. Paul Éluard)
Le 18-09-2006, jerome.arbez-gindre@laposte.net a écrit :
Pour acceder à des ports I/O, je souhaiterai définir une structure et
la mapper à mes ports.
Est-ce vraiment une bonne idée ? Tu vas te prendre la tête
à écrire une structure de donnée pas portable, avec perte
d'espace mémoire (BIG_BUFFER_LOCATION - 2* sizeof(uint8_t) ),
tout ça pour faire des accès en memcpy ?
Dans ce cas, il n'y a pas de perte d'espace mémoire, c'est de la
mémoire mappée sur un périphérique (dont je ne maitrise pas le
mapping)
Mais as-tu des variables de type regs_t dans ton code, ou te
contentes-tu de faire des cast entre des adresses memoires
(celles des ports) et un reg_t* ?
Mon idée (mais peut-être pas du tout adapté à ton contexte),
c'est de préparer la structure avant de l'envoyer en mémoire.
reg_t val;
val.some_feature_enable = true ;
val.other_thing= false;
val.param_truc= 64;
write_reg(&val, port);
Mais si on passe son temps à faire de mini-modifs,
ça n'a pas d'intérêt.
Marc Booyer
--
Si tu peux supporter d'entendre tes paroles
Travesties par des gueux pour exciter des sots
IF -- Rudyard Kipling (Trad. Paul Éluard)
Pour acceder à des ports I/O, je souhaiterai définir une structure et la mapper à mes ports.
Est-ce vraiment une bonne idée ? Tu vas te prendre la tête à écrire une structure de donnée pas portable, avec perte d'espace mémoire (BIG_BUFFER_LOCATION - 2* sizeof(uint8_t) ), tout ça pour faire des accès en memcpy ?
Dans ce cas, il n'y a pas de perte d'espace mémoire, c'est de la mémoire mappée sur un périphérique (dont je ne maitrise pas le mapping)
Mais as-tu des variables de type regs_t dans ton code, ou te contentes-tu de faire des cast entre des adresses memoires (celles des ports) et un reg_t* ?
Mon idée (mais peut-être pas du tout adapté à ton contexte), c'est de préparer la structure avant de l'envoyer en mémoire. reg_t val; val.some_feature_enable = true ; val.other_thing= false; val.param_truc= 64; write_reg(&val, port);
Mais si on passe son temps à faire de mini-modifs, ça n'a pas d'intérêt.
Marc Booyer -- Si tu peux supporter d'entendre tes paroles Travesties par des gueux pour exciter des sots IF -- Rudyard Kipling (Trad. Paul Éluard)
... il faut encore que je trouve un moyen de rendre la nom __padding__ unique... et c'est dans la poche. ( je suis sur la piste __LINE__ __FILE__ etc.)
... il faut encore que je trouve un moyen de rendre la nom __padding__
unique... et c'est dans la poche. ( je suis sur la piste __LINE__
__FILE__ etc.)
... il faut encore que je trouve un moyen de rendre la nom __padding__ unique... et c'est dans la poche. ( je suis sur la piste __LINE__ __FILE__ etc.)
jerome.arbez-gindre
Pour acceder à des ports I/O, je souhaiterai définir une structu re et la mapper à mes ports.
Est-ce vraiment une bonne idée ? Tu vas te prendre la tête à écrire une structure de donnée pas portable, avec perte d'espace mémoire (BIG_BUFFER_LOCATION - 2* sizeof(uint8_t) ), tout ça pour faire des accès en memcpy ?
Dans ce cas, il n'y a pas de perte d'espace mémoire, c'est de la mémoire mappée sur un périphérique (dont je ne maitrise pas le mapping)
Mais as-tu des variables de type regs_t dans ton code, ou te contentes-tu de faire des cast entre des adresses memoires (celles des ports) et un reg_t* ?
L'idée, c'est de faire un cast (struct regs_t *) une fois pour toute avec l'addresse du premier port. et ensuite d'écrire sur les port en passant uniquement par mon pointeur sur les registers.
Mon idée (mais peut-être pas du tout adapté à ton contexte),
c'est de préparer la structure avant de l'envoyer en mémoire. reg_t val; val.some_feature_enable = true ; val.other_thing= false; val.param_truc= 64; write_reg(&val, port);
Mais si on passe son temps à faire de mini-modifs, ça n'a pas d'intérêt.
J'ai près de 1Mo de registre à mapper (et ce sont des registres différenciés, pas seulement des buffers) ... donc oui, je voudrais y accéder de façon "chirugicale"
Jérôme A-G
Pour acceder à des ports I/O, je souhaiterai définir une structu re et
la mapper à mes ports.
Est-ce vraiment une bonne idée ? Tu vas te prendre la tête
à écrire une structure de donnée pas portable, avec perte
d'espace mémoire (BIG_BUFFER_LOCATION - 2* sizeof(uint8_t) ),
tout ça pour faire des accès en memcpy ?
Dans ce cas, il n'y a pas de perte d'espace mémoire, c'est de la
mémoire mappée sur un périphérique (dont je ne maitrise pas le
mapping)
Mais as-tu des variables de type regs_t dans ton code, ou te
contentes-tu de faire des cast entre des adresses memoires
(celles des ports) et un reg_t* ?
L'idée, c'est de faire un cast (struct regs_t *) une fois pour toute
avec l'addresse du premier port.
et ensuite d'écrire sur les port en passant uniquement par mon
pointeur sur les registers.
Mon idée (mais peut-être pas du tout adapté à ton contexte),
c'est de préparer la structure avant de l'envoyer en mémoire.
reg_t val;
val.some_feature_enable = true ;
val.other_thing= false;
val.param_truc= 64;
write_reg(&val, port);
Mais si on passe son temps à faire de mini-modifs,
ça n'a pas d'intérêt.
J'ai près de 1Mo de registre à mapper (et ce sont des registres
différenciés, pas seulement des buffers) ... donc oui, je voudrais y
accéder de façon "chirugicale"
Pour acceder à des ports I/O, je souhaiterai définir une structu re et la mapper à mes ports.
Est-ce vraiment une bonne idée ? Tu vas te prendre la tête à écrire une structure de donnée pas portable, avec perte d'espace mémoire (BIG_BUFFER_LOCATION - 2* sizeof(uint8_t) ), tout ça pour faire des accès en memcpy ?
Dans ce cas, il n'y a pas de perte d'espace mémoire, c'est de la mémoire mappée sur un périphérique (dont je ne maitrise pas le mapping)
Mais as-tu des variables de type regs_t dans ton code, ou te contentes-tu de faire des cast entre des adresses memoires (celles des ports) et un reg_t* ?
L'idée, c'est de faire un cast (struct regs_t *) une fois pour toute avec l'addresse du premier port. et ensuite d'écrire sur les port en passant uniquement par mon pointeur sur les registers.
Mon idée (mais peut-être pas du tout adapté à ton contexte),
c'est de préparer la structure avant de l'envoyer en mémoire. reg_t val; val.some_feature_enable = true ; val.other_thing= false; val.param_truc= 64; write_reg(&val, port);
Mais si on passe son temps à faire de mini-modifs, ça n'a pas d'intérêt.
J'ai près de 1Mo de registre à mapper (et ce sont des registres différenciés, pas seulement des buffers) ... donc oui, je voudrais y accéder de façon "chirugicale"