TI中文支持网
TI专业的中文技术问题搜集分享网站

dynamic loader (unified_ridl)

c6678

ccs5.3

我将unified_ridl中的base 和 load的部分交给core0去做,即由core0 load一个dll,然后execute的部分由core2执行之前指定core0 load的dll。

execute的核心是execute_program(handle, prog_argc, (char**)(prog_argv.buf));,在不向dll中传参的情况下,其中用到的参数,handle、prog_handle、loaded_program等,我都如下定义,以便核间共享:

#pragma DATA_SECTION (handle, ".my_sec"); (my_sec定义在DDR3中)
DLOAD_HANDLE handle;

我打断点调试,发现core2在执行dll之前,handle、prog_handle、loaded_program等参数值都非空,都是正确的,但是再往下一步,即应该运行dll中的代码的时候,控制台没有dll中的输出,而此时core2的状态是No symbols are defined for….,即并没有指向dll的程序入口执行dll,但存放dll入口的函数指针loaded_program并不是空。

请问:

1.定义在DATA_SECTION中的数据是否被八个核真正共享?如果定义的是一个函数指针(存放dll的程序入口),能被真正共享么?

2. 是否每个核都必须各自执行base 、load才能execute dll,像我上述的这种,只将execute部分用到的参数做共享,一个核是否能够执行其他核load的dll?

谢谢!

Andy Yin1:

1 是的,定义在DDR3的是多核共享区域,只要没有进行内存保护,多核都能访问;共享不分代码及数据;

2 base、load是啥东东?如果load的代码及数据都是在共享区域,那么只需要load一次即可,所以core都是可以执行这段代码,如果有全局变量在私有memory,则每个core需要对私有不分分别加载。

ruijie yang:

回复 Andy Yin1:

谢谢Andy!

base 、load是unified_ridl这个demo里运行dll要做的 base_image xxx.out,load xxx.dll,execute几个步骤。

使用DATA_SECTION只能静态定义空间,我想共享动态分配的空间的话,我在cfg中如下定义:

var heapMemParams = new HeapMem.Params();heapMemParams.size = 0x800000;heapMemParams.sectionName = "myheap";Program.global.heap0 = HeapMem.create(heapMemParams);mem.defaultHeapInstance = Program.global.heap0;Program.sectMap["myheap"] = "DDR3";

   IHeap_Handle heap = HeapMem_Handle_upCast(heap0);   void* result = (void *)Memory_alloc(heap,size*sizeof(uint8_t),0,NULL);

1. 我是想在DDR3中分配八核能共享的空间,这样分配得到的result是在DDR3中并八核共享了,对吧

2. 如果同时定义了,Program.heap = 0xxxx;,和这里定义的heap0,有冲突吗,二者都是有效的吗?如果代码中同时有malloc和Memory_alloc,那么是否是malloc从heap中分配而Memory_alloc从heap0分配呢?

3.是否Memory.defaultHeapInstance = Program.global.heap0; 则heap0会替换heap,heap则失效?

谢谢!

Tao Tan:

回复 ruijie yang:

ruijie yang你好,我最近也在看动态加载的代码,可不可以和你私下交流一下

ruijie yang:

回复 Tao Tan:

Tao Tan你好,

我最近没怎么看动态加载,之前看的也不深,不过你愿意的话,我很乐意交流。

赞(0)
未经允许不得转载:TI中文支持网 » dynamic loader (unified_ridl)
分享到: 更多 (0)