Variable pointant sur un registre hardware !
Salut à tous.
Je connais le 'C', mais je ne suis pas familiarisé avec l'accès aux registres du hardware.
Je bidouille en assembleur ARM sur la raspberry et je sais faire du Bare-Metal.
Mon problème est que j'aimerai accéder aux registres des GPIO afin de créer un programme en 'C' sans passer par des bibliothèques.
Je sais que c'est possible sauf que je n'ai jamais fait ça en 'C'.
J'aimerai savoir comment déclarer une variable qui va pointer sur un registre de la Raspberry Pi Zero.
Ce registre se trouve à l'adresse 0x20200000 et se nomme adresse de base des GPIO.
Pour qualifier un registre, je suppose qu'il faut :
1) la déclarer "extern" car la variable n'est pas propre au programme 'C'.
2) la déclarer "volatile" car cette variable peut être modifiée par un moyen extérieur au programme.
3) la déclarer en tant que pointer afin de lui attribuer une adresse physique.
Cette adresse physique est 0x20200000.
4) le type de cette variable doit être du même genre que le registre.
Dans mon cas, il s'agit d'un mot de 32 bits, non signé.
5) voici mon exemple :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| #include <stdio.h>
#include <stdlib.h>
typedef unsigned int uint32_t;
#define _GPIO_BASE (0x20200000)
extern volatile uint32_t *_gpio;
int main(void)
{
_gpio = (uint32_t*)_GPIO_BASE;
exit(EXIT_SUCCESS);
} |
A la compilation, cela me retourne l'erreur suivante :
Code:
1 2 3 4
| /usr/bin/ld: main.o: in function `main':
main.c:(.text+0x18): undefined reference to `bcm2835_gpio'
collect2: error: ld returned 1 exit status
make: *** [makefile:54: lancer] Error 1 |
Comment faire ?
Pouvez-vous me dire ce qui ne va pas dans mon exemple ?
@+