Я пытаюсь записать целое число (1114129) из моего HPS на Cyclone V Altera FPGA из окна PUTTY в 32-битный PIO на стороне FPGA через интерфейс облегченной оси.Я использую mmap () и не могу получить его для сопоставления с адресом, я хочу, чтобы это 0xff206000, вместо этого его сопоставление с адресом 0xb6f31000.Мой код и результат показаны ниже.
#include <sys/stat.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/mman.h>
#include <sys/time.h>
#include <math.h>
#define MAPPED_SIZE 4
#define DDR_RAM_PHYS 0xff206000
#define PAGESIZE 0x1000
//1114129
int main(void)
{
int _fdmem;
void *map;
int a;
int c = 1114129;
const char memDevice[] = "/dev/mem";
_fdmem = open( memDevice, O_RDWR | O_SYNC );
if (_fdmem < 0){
printf("Failed to open the /dev/mem !\n");
return 0;
}
else{
printf("open /dev/mem successfully !\n");
}
a = sysconf(_SC_PAGESIZE);
printf("page %d", a);
/* mmap() the opened /dev/mem */
map = mmap(0, MAPPED_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, _fdmem, DDR_RAM_PHYS & -PAGESIZE);
if (map == MAP_FAILED) { perror("npheap_alloc()"); exit(1); }
int volatile * const p = (int *) (map + (0xff206000 % PAGESIZE));
*p = c;
printf("value %p", map);
printf("\nThe memory address of variable var = ptr = %p\n", p);
printf("\nIndirect access, variable var value = *ptr = %d", *p);
/* unmap the area & error checking */
if (munmap(map,MAPPED_SIZE)==-1){
perror("Error un-mmapping the file");
}
/* close the character device */
close(_fdmem);
}
open /dev/mem successfully !
page 4096value 0xb6f31000
The memory address of variable var = ptr = 0xb6f31000
Indirect access, variable var value = *ptr = 1114129#
Заранее спасибо