openMPM源码分析(五)

好久没更博了,学车期间摸出一篇博文也是不容易,下面开始正题。
test下sync_test部分已经告一段落,接下来是test下filetest的内容。
test/filetestdemo/c66x/demo_loopback/src/main.c
     在main函数中主要是两个函数:
     1.     demo_disableCache();
     2.     demo_loopback_test();

     第一个函数很简单,在之前的笔记中分析过,主要是通过配置MARn(Memory Attribute Register)来控制相应内存范围是否可缓存(此处配置为non-cacheable)。

     第二个函数在文件test/filetestdemo/c66x/demo_loopback/src/demo_loopback.c中定义。
     这个函数比较复杂,从函数的注释上来看,该函数的逻辑过程是:打开mailbox,接收message,将接收到的message拷贝到outputbuffer,打印结果,现在开始仔细分析:
     1、这个函数主要围绕两个数据结构进行:
         mpm_mailbox_config_t 和 mpm_mailbox_inst_t进行。这两个数据结构,前者是mailbox的配置,start_addr、size、payload_size。后者就是所谓的"mailbox"了。这个函数简单来说干了一件事情就是:填满这两个数据结构(当然最终目的是后者,config_t只是一个过渡也是inst_t的一个子集)。
     2、对于上述mpm_maibox_inst_t这个数据结构,该函数采用两个指针来进行操作rxMailBoxHandle和txMailBoxHandle,分别是收发操作的指针,也代表由Host->DSP 和 DSP->Host这两个方向。
     3、一项项看mailbox需要初始化的内容:
               1.mem_start_addr:使用二维数组(host2dspmailbox 和 dsp2hostmailbox)初始化,以host2dspmailbox为例,本质上是一个8*4k的二维数组(8个dsp,每个dsp使用的mailbox大小为4k),这样求每个dsp的其实地址实质上就是二维数组的locate。
               2.mem_size:4K (0x1000)程序中写死。
               3.mem_payload_size:116 程序中写死。
          以上3点正是mpm_mailbox_config_t中的内容。
               4.接下来的事情就有趣了demo_loopback_test_assert();作用应该类似assert()做了一层封装,内部实现暂时不管,assert的内容是一个函数mpm_mailbox_create();下面进入这个函数进行分析。
                    1.内部用inst指针(mpm_mailbox_inst_t*)指向mpm_mailbox_handle(void *),因此,问题又变成对inst指针中成员的赋值,然后用指针返回内容。
                    2.赋值:里面一些成员的具体定义不是很清楚,比如slot_size、depth等,这些变量有其固定的算法,求出来后将值放入指针。然后将mpm_mailbox_config_t中的值填入inst指针。
                    3.后面的内容主要是求slot_owner,这又涉及到几个数据结构:mpm_mailbox_slot_header_t、mpm_mailbox_header_t。(问题)
               5.根据代码注释:程序对tx和rx的handle做了类似的初始化后,接下来对rx和tx的handle进行打开操作mailbox(mpm_mailbox_open函数)。(内部实现问题)
     4、初始化过后就是具体算法操作(for(;;)循环里的代码块实现):
               1.首先是mpm_mailbox_query(rxMailBoxHandle);函数。进入函数内部,通过read和write 的索引计算mailbox中message的个数(此处计算方法类似于循 环队列的front和rear) 。 
               2.mpm_mailbox_read与mpm_mailbox_write 这两个函数内部实现复杂,基本功能就是往 mailbox里面写跟读,查看内部代码可以通过修改transport成员 的值来改变底层的通信方式 (shared_memory或者hyperlink)        
               
                  
     
    
          

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值