APEX 服务

更新时间:
2023-12-14
下载文档

APEX 服务

当以上步骤完成后,分区内的应用可以通过 APEX 接口来获取内存块的属性。有关内存块的 APEX 服务见:

$(MATRIX653_SDK_PATH)/libmatrix653/src/include/arinc653/apex_memory_block.h 

GET_MEMORY_BLOCK_STATUS

  • 描述:该服务请求用于获取内存块属性。分区只能获取到在配置表中已经配置的内存块状态。本服务返回的地址是在本分区内存空间内的虚拟地址。当多个分区访问同一个内存块时,本服务可能为不同的分区返回不同的地址。

  • 函数原型

extern void GET_MEMORY_BLOCK_STATUS (
       /* in  */ MEMORY_BLOCK_NAME_TYPE    MEMORY_BLOCK_NAME,
       /* out */ MEMORY_BLOCK_STATUS_TYPE  *MEMORY_BLOCK_STATUS,
       /* out */ RETURN_CODE_TYPE          *RETURN_CODE );
  • 参数
输入 / 输出参数 描述
[in]MEMORY_BLOCK_NAME内存块名
[out]MEMORY_BLOCK_STATUS内存块状态指针
[out]RETURN_CODE返回值
  • 使用:分区级应用程序中调用 GET_MEMORY_BLOCK_STATUS。

  • 返回状态

返回码对应描述
NO_ERROR调用成功
INVALID_CONFIG在配置表中没有为分区配置名为 MEMORY_BLOCK_NAME 的内存块

成功获取内存块的属性后,就可以直接读写内存块的地址空间了。具体示例代码如下:

static void mem_block_test(void)
{
RETURN_CODE_TYPE           ret;
MEMORY_BLOCK_STATUS_TYPE   memory_block_status;
MEMORY_BLOCK_NAME_TYPE     memory_block_name="test_mem_blcok";
volatile  unsigned int     *pValue    = MX_NULL;

    GET_MEMORY_BLOCK_STATUS(memory_block_name, &memory_block_status, &ret);
    if (ret != NO_ERROR) {
        printf("GET_MEMORY_BLOCK_STATUS failed!\n");
        while (MX_TRUE) {
        }
    }

    pValue = (volatile unsigned int *)memory_block_status.MEMORY_BLOCK_ADDR;

    *pValue = 0x11223344;
    printf("MEMORY_BLOCK_ADDR:0x%x\n",(unsigned int) memory_block_status.MEMORY_BLOCK_ADDR);
    printf("MEMORY_BLOCK_SIZE: %d\n", memory_block_status.MEMORY_BLOCK_SIZE);
    printf("MEMORY_BLOCK_MODE: %d\n", memory_block_status.MEMORY_BLOCK_MODE);
    printf("MEMORY_BLOCK WRITE: %x\n", *pValue);
}
文档内容是否对您有所帮助?
有帮助
没帮助