rtems_region_create() returning error code

Francesco Nuzzolo francesco.nuzzolo at spaceapplications.com
Wed May 30 08:19:22 UTC 2018


Hello,

I want to use the RTEMS region manager but the function 
rtems_region_create() fails with code RTEMS_INVALID_ADDRESS.

I am using RTEMS 4.10 on a LEON4 processor.

My RTEMS configuration information includes:

#define CONFIGURE_MAXIMUM_REGIONS               1


According to the RTEMS C User's Guide,  RTEMS_INVALID_ADDRESS should be 
caused by one of the following:

- starting address is NULL

- id is NULL

- starting address is not on a four byte boundary.


But in my case it looks like none of the above conditions is true.

Here is a snippet of my code:

###########################################

static int memory_region[MEM_REGION_LENGTH_32BITS];

void memory_regions_init (void)
{
     rtems_status_code ret_code;

     Mem_region_name = rtems_build_name('M', 'E', 'M', 'R');

     ret_code = rtems_region_create(Mem_region_name, (void *) 
memory_region, MEM_REGION_LENGTH_BYTES, MEM_REGION_PAGE_SIZE_BYTES, 
RTEMS_DEFAULT_ATTRIBUTES, &Mem_region_id);

     if (ret_code != RTEMS_SUCCESSFUL)
     {
         .....
     }

     // debugging
     printf("address of memory_region[] is 0x%08X\n", memory_region);
     printf("address of Mem_region_id is 0x%08X\n", &Mem_region_id);

}

###########################################

The printfs give this output:

address of memory_region[] is 0x40546EBC
address of Mem_region_id is 0x40551C00

from which we see that the starting address is 0x40546EBC = 1079275196, 
which is a multiple of 4, so it should be on a 4-byte boundary.


If I tweak a bit the code and the starting address (i.e. the address of 
memory_region[]) turns out to be 0x4054C2F8  (= 1079296760 which is a 
multiple of 4 and 8 as well) then the function rtems_region_create() 
returns RTEMS_SUCCESSFUL.

Does anybody know what the cause of this problem could be?

Thanks in advance!

Francesco



More information about the users mailing list