主页 文档 下载 莱特 沙龙 English

RTESM文档
RTEMS精彩应用
RTEMS版权说明
其他RTOS
ARM/DSP专区
AVR/FPGA/PCB
嵌入式文件系统
ARM AVR仿真器DIY
莱特电子工作室
联系我们
 


双端内存管理器

作者 Ray

RTEMS版权所有,转载请注明来源www.rtems.net,作者Ray

19.1: 介绍

双端口内存指的是可以由两个处理器同时访问的内存芯片( 例如DMA存储器 )。在RTEMS中为该芯片提供了系统服务。RTEMS的双端口内存管理器为双端口内存区(DPMA)提供了地址变换供能。 管理器包含下面的API:

rtems_port_create- 创建端口

rtems_port_ident- 获取端口的ID标识

rtems_port_delete- 删除端口

rtems_port_external_to_internal- 将双端口内存的外部地址变为内部地址

rtems_port_internal_to_external- 将双端口内存的内部地址变为外部地址

19.2: 背景

双端内存区(DPMA)是一个连续内存区,该区域可以被多个处理器访问。DPMA的属主使用内部地址访问DPMA,其他处理器使用外部地址访问DPMA。RTEMS将端口(port)定义为内部地址和外部地址的映射。

在两种硬件体系中可以看到双端内存,一个是紧耦合多处理器系统,系统中双端内存被多个处理器节点共享,用于处理器间的通信。另一个是具有智能外设的处理系统。为了提高系统吞吐量,使用DPMA传输数据。后者在嵌入式系统中更为多见,例如ARM+DSP的视频压缩系统,前端的视频采集和编码使用DSP完成,然后使用双端内存将采集好的数据传输给ARM处理器在LCD上面显示。

 

19.3: 操作

19.3.1 : 创造一个端口

rtems_port_create为DPMA创建一个用户命名的端口。用户定义内部和外部存储映射。RTEMS为新建的DPMA分配控制块DPCB。RTEMS也为双口内存端口创建唯一的ID标识。 RTEMS不会初始化双口内存,也不会访问其中的数据。

函数原型:

rtems_status_code rtems_port_create(

rtems_name name,

void *internal_start,

void *external_start,

rtems_unsigned32 length,

rtems_id *id

);

返回值代表的状态:

RTEMS_SUCCESSFUL- 成功地创造端口

RTEMS_INVALID_NAME- 无效任务名字

RTEMS_INVALID_ADDRESS- 地址没有按照4字节对齐模式对齐

RTEMS_INVALID_ADDRESS- ID标识是空值

RTEMS_TOO_MANY- 太多双口存储器区被创建

 

19.3.2 : 获得端口ID标识

当创建端口时, RTEMS 产生一个唯一的ID标识。ID标识可使用二种方法获得。 首先, rtems_port_create 函数返回值,其次rtems_port_ident 函数。

函数原型:

rtems_status_code rtems_port_ident(

rtems_name name,

rtems_id *id

);

返回值代表的状态 :

RTEMS_SUCCESSFUL- 成功地获得 ID

RTEMS_INVALID_ADDRESS- ID 标识是空值

RTEMS_INVALID_NAME- 找不到对应名称

描述:

函数按照名称获取ID。如果有重名,将返回第一个找到的端口的ID

 

19.3.3 : 变换地址

rtems_port_external_to_internal将地址从外部地址转为内部地址。 rtems_port_internal_to_external 函数处理正号相反。如果转换地址超过DPMA范围,将会返回原始的错误地址。

函数原型:

rtems_status_code rtems_port_external_to_internal(

rtems_id id,

void *external,

void **internal

);

返回值代表的状态:

RTEMS_INVALID_ADDRESS- 内部地址空值

RTEMS_SUCCESSFUL- 转换成功

注意:

可从 ISR 中调用该函数是可召唤的。

函数原型:

rtems_status_code rtems_port_internal_to_external(

rtems_id id,

void *internal,

void **external

);

返回值代表的状态:

RTEMS_INVALID_ADDRESS- 外部地址是空值

RTEMS_SUCCESSFUL- 成功的转换

 

19.3.4 : 删除一个 DPMA 端口

rtems_port_delete 函数的将DPMA端口从RTEMS中删除。删除后控制块DPCB将会释放。

函数原型:

rtems_status_code rtems_port_delete(

rtems_id id

);

返回值代表的状态:

RTEMS_SUCCESSFUL- 成功地删除

RTEMS_INVALID_ID- 无效的ID标识

 

 
嵌入式软硬件设计咨询 • 8位 16位 32位 64位 RISC DSP
主页文章 方案 产品 下载反馈
 
2004 RTEMS.NET 版权所有