This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
/*
版权所有(c) 2012-2015年,德州仪器公司
*保留所有权利。
*
*
只要
符合以下条件*、允许以源代码和二进制形式重新分发和使用:
*
*源代码的重新分发必须保留上述版权
声明*、此条件列表和以下免责声明。
*
***二进制形式的再发行必须在
*随发行提供的文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。
*
***未经
事先书面许可、不得使用德州仪器公司的名称或*其贡献者的名称认可或推广从本软件衍生的产品*。
*
*本软件由版权所有者和贡献者"按原样"提供
*、
不承担任何明示或暗示的保证、包括但不限于*适销性和特定用途适用性的暗示保证*。 在任何情况下、版权所有者或
*贡献者都不对任何直接、间接、偶然、特殊、
*模范、 或相应的损害(包括但不限于
*采购替代产品或服务;丧失使用、数据或利润;
*或业务中断)、但出于任何责任理论
、*无论是在合同中、严格责任还是由于
使用本软件而以任何方式产生的侵权行为(包括疏忽或*其他)
、*即使已获悉可能会发生此类损坏。
*/
********* //*
段映射 */
********* /var
program = xdc.useModule('xdc.cfg.Program');
program.sectMap[".args"] = new Program.SectionSpec ();
program.sectMap[".bss"] = new Program.SectionSpec ();
program.sectMap[".cinit"] = new Program.SectionSpec ();
program.sectMap[".cio"] = new Program.SectionSpec ();
program.sectMap[".const"] = new Program.SectionSpec ();
program.sectMap[".data"] = new Program.SectionSpec ();
program.sectMap[".far"] = new Program.SectionSpec ();
program.sectMap[".fardata"] = new Program.SectionSpec ();
program.sectMap[".neardata"]= new Program.SectionSpec ();
program.sectMap[".rodata"] = new Program.SectionSpec ();
program.sectMap[".stack"] = new Program.SectionSpec ();
program.sectMap[".switch"] = new Program.SectionSpec ();
program.sectMap[".sysmem"] = new Program.SectionSpec ();
program.sectMap[".text"] = new Program.SectionSpec ();
//必须将这些段放在核心本地存储
器 program.sectMap[".args"].loadSegment 中 ="L2SRAM";
program.sectMap[".cio"].loadSegment ="L2SRAM";
//
在// OpenMP 中,以下数据段中的变量可能会被“共享”。 这些段必须放置在共享存储器中。
program.sectMap[".bss"].loadSegment ="DDR3";
program.sectMap[".cinit"].loadSegment ="DDR3";
program.sectMap[".const"].loadSegment ="DDR3";
program.sectMap[".data"].loadSegment ="DDR3";
program.sectMap[".far"].loadSegment ="DDR3";
program.sectMap[".fardata"].loadSegment ="DDR3";
program.sectMap[".neardata"].loadSegment ="DDR3";
program.sectMap[".rodata"].loadSegment ="DDR3";
program.sectMap[".sysmem"].loadSegment ="DDR3";
//内核共享的代码段-放置在共享存储器中以避免复制
program.sectMap[".switch"].loadSegment = program.platform.codeMemory;
program.sectMap[".text"].loadSegment = program.platform.codeMemory;
//调整默认堆栈的大小并将其放置在 L2SRAM
var deviceName = String (Program.cpu.deviceName);
if (deviceName.search("DRA7XX")=-1){program.stack = 0x20000;}
否则 {program.stack = 0x8000;}
program.sectMap[".stack"].loadSegment ="L2SRAM";
//由于没有参数传递给 main,因此将.args 大小设置为0
program.argSize = 0;
/************ /*
OpenMP 运行时配置*/********
//
在编译
中包含 OMP 运行时 var ompSettings = xdc.useModule("ti.runtime.openmp.Settings");
//如果应用程序使用 BIOS 组件或依赖 BIOS 组件,则设置为 true
ompSettings.usingRtsc = true;
if (ompSettings.usingRtsc)
{
/*为 BIOS 配置 OpenMP
*- OpenMP* configureCores (masterCoreId、numberofCoresInRuntime)
* 配置主内核的 ID 和内核数
* 运行时可用。
*
VAR OpenMP = xdc.useModule('ti.runtime.ompbios.OpenMP');
//配置主内核的索引和可用内核的数量
//到运行时。 内核是连续的。
OpenMP*主 CoreIdx = 0;
//根据器件设置内核数
如果 (deviceName.search("DRA7XX")!=-1){OpenMP*= 2;}
否则,如果(deviceName.search("6670")!=-1){ OpenMP*= 4;}
否则,如果(deviceName.search("6657")!=-1){ OpenMP*= 2;}
否则,如果(deviceName.search("K2L")!=-1){ OpenMP*= 4;}
其他 { OpenMP*= 8;}
//拉入 Platform.XDC 中描述的内存范围以配置运行时
VAR DDR3 = Program.cpu.memoryMap["DDR3"];
VAR DDR3_NC = Program.cpu.memoryMap["DDR3_NC";
VAR MSMC = Program.cpu.memoryMap["MSMCSRAM"];
var msmcNcVirt= Program.cpu.memoryMap["OMP_MSMC_NC_virt"];
var msmcNcPhy = Program.cpu.memoryMap["OMP_MSMC_NC_PHY"];
//使用内存范围信息初始化运行时间
if (deviceName.search("DRA7XX")=-1){
OpenMP* msmcBase = MSMC.base
OpenMP* msmcSize = MSMC.len;
OpenMP* msmcNoCacheVirtualBase = msmcNcVirt.base;
OpenMP* msmcNoCacheVirtualSize = msmcNcVirt.len;
OpenMP*。msmcNoCachePhysicalBase = msmcNcPhy.base;
}
其他
{
OpenMP*分配堆栈= true;
OpenMP*分配堆栈 FromHeapSize = 0x010000;
OpenMP* HASMsmc =错误;
OpenMP*版 NoCacheBase = DDR3_NC.base;
OpenMP*版。ddrNoCacheSize = DDR3_NC.len;
}
OpenMP*版 = DDR3.base;
OpenMP*文件大小 = DDR3.len;
//使用 HeapOMP 配置内存分配
// HeapOMP 句柄
//- BIOS 组件发出的内存分配请求(内核本地内存)
//-使用 IPC 模块启用共享内存分配
//从同一堆中分配内存的多个内核-由 malloc 使用
if (deviceName.search("DRA7XX")=-1){
VAR HeapOMP = xdc.useModule('ti.runtime.ompbios.HeapOMP');
//必须为 IPC 初始化共享区域0
VAR sharedRegionId = 0;
//内核本地堆的大小
VAR localHeapSize = 0x8000;
//所有内核共享的堆的大小
var sharedHeapSize = 0x08000000;
//初始化共享区域并在 DDR3存储器区域中创建堆
VAR SharedRegion = xdc.useModule('ti.sdo.ipc.SharedRegion');
SharedRegion.setEntryMeta (sharedRegionId、
{base:dr3.base、
Len:sharedHeapSize、
ownerProId:OpenMP*。masterCoreIdx、
高速缓冲启用:true、
createHeap:true、
IsValid:true、
名称:"DDR3_SR0"、
});
//配置和设置 HeapOMP
HeapOMP.configure (sharedRegionId、localHeapSize);
}
其他
{
OpenMP.useIpcSharedHeap = false;
OpenMP*分配本地 HeapSize = 0x8000
OpenMP*分配共享 HeapSize = 0x00800000
}
VAR 启动= xdc.useModule('xdc.runtime.Startup');
startup.lastFxns.$add ('&_TI_omp_initialize_rtsc_mode');
}
否则
{
/*调整堆的大小。 必须将其放置在共享存储器中*
program.heap = sharedHeapSize;
}
一件事是,如果我更改共享堆大小,DDR3段中其他内容的起始地址不会更改...
此致
遗憾的是、TI 的 OpenMP 解决方案不支持 C++。 请参阅 TI OpenMP 文档介绍页面末尾的注释。
谢谢、此致、
乔治
我理解,但我使用--openmp 标志编译 cppp 文件,但对于 c 文件,我设置了 omp 标志... 这不是应该这样做的吗? 因为代码编译和链接正常。
如果我使用 malloc 该怎么办? 让我尝试更新...
但是,我要更改 cfg 文件中的正确位置,以增加 malloc 函数使用的堆大小?
[引用 user="Mike ITGeek">我理解,但我使用--openmp 标志编译 CPP 文件,但对于 c 文件,我设置了 omp 标志... 这不是应该这样做吗?[/引述]
是的、这应该起作用。
谢谢、此致、
乔治
[引用 user="Mike ITGeek"]但是,我要更改 cfg 文件中的正确位置,以增加 malloc 函数使用的堆大小?
我不知道。 我将向 TI-RTOS 专家发送有关此主题的通知。
谢谢、此致、
乔治
尊敬的 Mike:
malloc()由 SYS/BIOS 提供。 它使用内核的默认系统堆(而不是编译器堆)。 我不熟悉 OpenMP 代码、因此我不确定上述配置对堆执行的操作。 如果您需要有关此内容的信息、我们可以将此主题移至处理器论坛。
Todd
您好 Todd、
感谢您的意见... 我同意将 malloc()由 SYS/BIOS 处理;OpenMP 则根据 堆管理 API 提供另外两种类型的堆。
共享存储器(DDR 或 MSMC)中的堆
2.本地存储器中的堆(L2SRAM)
这不是我目前所关心的问题...
我想、由于我通过 malloc/new 在 C++中进行所有内存分配、我只需要知道如何通过.cfg 文件调整 malloc (SYS/BIOS)堆的大小。 如果你能让我知道我如何在*。cfg 中调整 SYS/BIOS/malloc 堆大小(上面提供了 openmp 示例中的 cfg 示例)、这将非常有用、非常感谢。
此外、如果您为我提供有关*。cfg 文件的详细信息的参考、这也会很有帮助。
此外、需要知道我是否超大了 malloc 堆、链接器是否会抛出错误或某种警告?
如果您认为处理器团队可以提供更好的帮助、请随时将该主题转发给他们。 但是,它似乎更多地与 TI-RTOS 相关... 因为我看到了 TI-RTOS 中讨论的以下主题... 总之,你们知道的更好:)
https://e2e.ti.com/support/legacy_forums/embedded/tirtos/f/355/t/108589
此致、
更新了
我认为它在...下有详细的描述。 SYS/BIOS (TI-RTOS 内核)用户指南(修订版 U)
我会尝试并告诉你是否有任何事情… 在自我隔离的同时保持安全
谢谢
我似乎能够通过查看: SYS/BIOS (TI-RTOS 内核)用户指南(修订版 U)来解决这个问题。
VAR BIOS = xdc.useModule('ti.sysbios.BIOS');
Program.sectMap["systemHeap"] = new Program.SectionSpec ();
Program.sectMap["systemHeap"].loadSegment ="DDR3";
BIOS.heapSize = 0x12000000;
BIOS.heapSection ="systemHeap";
但是,我想让一个 SYS/BIOS/TI-RTOS 的人对此也作评论,请.... (这对未来的新手也很有帮助)
我还有一个问题 如何找到默认值 BIOS.heapSize?
谢谢你