openMPM源码分析(六)

 前言:
主要是围绕transport库,但从API角度很好理解,但深入到库的实现,代码就比较晦涩了。
 
test/filetestdemo/host/src/demo_filetest.c
直接进入main函数。
首先是命令行参数,一共6个,而前半部分就是围绕这些参数的初始化展开的。
1.打开输入文件:inFile=fopen(argv[1],"rb"); 以二进制方式只读。
2.打开输出文件:outFile=fopen(argv[2],"wb");以二进制方式只写。
3.保存测试类型:flag=atoi(argv[3]);
          0:Memcpy
          1:DSP Map
          2:CMEM Cached
          3:CMEM Noncached
4.保存dspBits并且以8位16进制数打印。
          sscanf(argv[4],"%x",&dspBits);
          printf("dspBits= %08X \n",dspBits);
5.保存dsp的数量(不超过最大值16DEMO_FILETEST_MAX_NUM_CHIPS)
6.保存payload_size:sscanf(argv[6],"%x",&demo_payload_size);

接下来进入一个重要的函数demoK2H_Config(uint32_t nodeBits);
从注释上来看,他是初始化和配置相关的组件。
下面具体来看他做了哪些初始化和配置工作:
一个重要的宏定义
DEMO_FILETEST_MAX_NUM_CORES表示最大chips和最大cores per chip的乘积16*8
初始化:
一、
host2dspmailbox=0xa0ff8000&dsp2hostmailbox=0xa0ff0000指明了物理地址,在对
tx 和 rx 的mapping进行初始化时用到。
tx_mailbox_mapping&rx_mailbox_mapping为bufmgrDesc_t类型的结构体数组,数组一个元素表示一个core。在结构体中,有三个成员:
     physAddr:mailbox的物理地址
     *userAddr:mmap过后的地址(mmap在上篇博客有提到)
     length:     buffer的长度
注:以上初始化在core_id==0时进行是为了找到起始地址,类似于找到数组的第一个元素地址后进行空间分配。
二、
分别给tx和rx的handle分配空间(上篇博文有具体介绍)
接下来就是填充mpm_mailbox_config_t结构体中成员变量的值。
正如上述所说,mem_start_addr的值是userAddr(起始地址)加上每个core自己的位置(偏移量为4K的整数倍)
三、
以上工作在循环中进行以对所用的cores完成初始化。

 第二个for循环从注释上来说是打开mailbox,进入循环中,实际上都是一些printf的信息打印。
以上,demoK2H_Config()函数结束。

你可能感兴趣的:(openMPM)