Thread 中讨论的其他器件:SYSBIOS
/*
版权所有(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段中其他内容的起始地址不会更改...
此致