Quelqu'un peut-il me montrer un exemple sur la façon de lire les valeurs des registres Raspberry Pi? J'ai besoin de vérifier octet dans AUX_MU_LSR_REG (0x7E21 5054) mais je ne sais pas comment faire cela sans l'utilisation de bibliothèques supplémentaires. J'ai essayé de: (ici je modifier le poste oryginal)Raspberry PI, lecture brute d'une valeur de registre en C
** * ** * ** * ** * ** * ** * ** * **** * Début du code
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <unistd.h>
#include <errno.h>
#define BCM2708 0x20000000
#define UART_BASE (BCM2708+0x215000)
#define PAGE_SIZE (4*1024)
#define BLOCK_SIZE (4*1024)
int mem_fd;
void *uart_map;
volatile unsigned *uart;
int main()
{
printf("start\n");
if((mem_fd=open("/dev/mem",O_RDWR|O_SYNC))<0)
{
printf("can't open /dev/mem \n");
exit(-1);
}
else printf("stream_file open OK \n");
if((uart_map=malloc(BLOCK_SIZE))==0)
printf("malloc fail\n");
else printf("GPIO_mallocation OK %d \n", (int)uart_map);
uart_map=mmap (NULL, //any address in our space
BLOCK_SIZE, //map length
PROT_READ|PROT_WRITE, //Enable reading and writing to maped memmory
MAP_SHARED, //Shares with other processes
mem_fd, //File to map
UART_BASE //Offset toUART peripheral
);
if(uart_map==MAP_FAILED)
{
printf("mmap error %d", (int)uart_map);
exit(-1);
}
else printf("GPIO mapping OK \n");
uart=(volatile unsigned*)uart_map;
int i;
for(i=0;i<32;i++)
{
printf("adress:%x ",uart+i);
printf("value:%x\n",*(uart+i));
}
printf("stop\n");
return 0;
}
` * ** * ** * ** * ** * ** * ** * ** * * fin du code maintenant Je ne me souviens pas vraiment comment j'affiche le 0 mais dans le code ci-dessus je reçois un conflit de pointeur.
À quoi sert le point uart? En théorie, il devrait afficher les valeurs, mais après quelques semaines, je ne peux pas le faire fonctionner.
espère que vous pouvez me aider en quelque sorte
La technique que vous utilisez est la bonne façon de procéder. Pouvez-vous poster un extrait de votre code? Ce serait plus facile à lire que ce que vous avez posté. –