Hi.
I was testing Xenomai on my AT91SAM9G20-based board and tried to adapt the
code found here:
http://www.armadeus.com/wiki/index.php?title=Xenomai:Blinking_LEDs .
The only difference between my code and theirs was the access to hardware. I
used open("/dev/mem", ...) and mmap().
The program compiles fine and both functions are executed. However, when I
place values in PIO registers, I get Segmentation Fault.
I tested my code without Xenomai and it does what it is suppose to do.
Here's the configuration of my system:
Processor: AT91SAM9G20
Xenomai version: 2.5.5.2
Kernel: 2.6.33-5
GCC 4.3.2 (I compile the code on the board)
---------------- Code snippet -------------------
unsigned char *pioa_base, *aic_base;
void open_controller(){
if((fd = open("/dev/mem", O_RDWR | O_SYNC)) == -1)
{
....
}
printf("/dev/mem opened.\n");
/* mapping of PIOB */
aic_base = mmap(0, MAP_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd,
AT91C_BASE_PIOB & (~MAP_MASK));
piob_base = aic_base + AT91C_BASE_PIOB - AT91C_BASE_AIC;
if( (pioa_base == (void *) -1)) {
...
}
*((unsigned int *) (piob_base + PIO_IDR )) = 1<<0; // Segmentation
Fault occurs here
*((unsigned int *) (piob_base + PIO_PER)) = 1<<0;
...
}
---------------------------------------------------------
Thank you,
R.
_______________________________________________
Xenomai-help mailing list
[email protected]
https://mail.gna.org/listinfo/xenomai-help