⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 regioncreate.c

📁 RTEMS (Real-Time Executive for Multiprocessor Systems) is a free open source real-time operating sys
💻 C
字号:
/* *  Region Manager * * *  COPYRIGHT (c) 1989-1999. *  On-Line Applications Research Corporation (OAR). * *  The license and distribution terms for this file may be *  found in the file LICENSE in this distribution or at *  http://www.rtems.com/license/LICENSE. * *  $Id: regioncreate.c,v 1.4.2.2 2004/05/06 19:20:04 joel Exp $ */#include <rtems/system.h>#include <rtems/rtems/status.h>#include <rtems/rtems/support.h>#include <rtems/score/object.h>#include <rtems/rtems/options.h>#include <rtems/rtems/region.h>#include <rtems/score/states.h>#include <rtems/score/thread.h>#include <rtems/score/apimutex.h>/*PAGE * *  rtems_region_create * *  This directive creates a region of physical contiguous memory area *  from which variable sized segments can be allocated. * *  Input parameters: *    name             - user defined region name *    starting_address - physical start address of region *    length           - physical length in bytes *    page_size        - page size in bytes *    attribute_set    - region attributes *    id               - address of region id to set * *  Output parameters: *    id       - region id *    RTEMS_SUCCESSFUL - if successful *    error code - if unsuccessful */rtems_status_code rtems_region_create(  rtems_name          name,  void               *starting_address,  unsigned32          length,  unsigned32          page_size,  rtems_attribute     attribute_set,  Objects_Id         *id){  Region_Control *the_region;  if ( !rtems_is_name_valid( name ) )    return RTEMS_INVALID_NAME;  if ( !starting_address )    return RTEMS_INVALID_ADDRESS;  if ( !id )    return RTEMS_INVALID_ADDRESS;  if ( !_Addresses_Is_aligned( starting_address ) )    return RTEMS_INVALID_ADDRESS;  _RTEMS_Lock_allocator();                      /* to prevent deletion */  the_region = _Region_Allocate();  if ( !the_region ) {    _RTEMS_Unlock_allocator();    return RTEMS_TOO_MANY;  }  the_region->maximum_segment_size =    _Heap_Initialize(&the_region->Memory, starting_address, length, page_size);  if ( !the_region->maximum_segment_size ) {    _Region_Free( the_region );    _RTEMS_Unlock_allocator();    return RTEMS_INVALID_SIZE;  }  the_region->starting_address      = starting_address;  the_region->length                = length;  the_region->page_size             = page_size;  the_region->attribute_set         = attribute_set;  the_region->number_of_used_blocks = 0;  _Thread_queue_Initialize(    &the_region->Wait_queue,    _Attributes_Is_priority( attribute_set ) ?        THREAD_QUEUE_DISCIPLINE_PRIORITY : THREAD_QUEUE_DISCIPLINE_FIFO,    STATES_WAITING_FOR_SEGMENT,    RTEMS_TIMEOUT  );  _Objects_Open(    &_Region_Information,    &the_region->Object,    (Objects_Name) name  );  *id = the_region->Object.id;  _RTEMS_Unlock_allocator();  return RTEMS_SUCCESSFUL;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -