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.

[参考译文] TMS320C6670:qmsIpsIpcBenchmark_c6670中的高速缓存 DDR3示例- E_alreadyDefined:Hwi 已定义:INTR#5错误

Guru**** 2579665 points
Other Parts Discussed in Thread: SYSBIOS

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/595873/tms320c6670-cache-ddr3-in-qmssipcbenchmark_c6670-example---e_alreadydefined-hwi-already-defined-intr-5-error

器件型号:TMS320C6670
Thread 中讨论的其他器件:SYSBIOS

您好!

我的配置为:

-SYSBIOS 6.35.4.50,

IPC 1.25.3.15、

- MCSDK PDK TMS320C6670 1.1.2.6、

- TMDXEVM6670L_EVM 板。

我正在尝试使用 qmsIpsIpcBenchmark 示例将代码和数据放入 DDR3存储器并打开高速缓存。 使用默认平台 ti.platforms.evm6670、一切都运行良好。

所有数据(代码、数据和堆栈)都在 SDRAM 中。 运行后、控制台输出如下所示:

[C66xx_0] timerFreq.lo = 1000000000。 timerFreq.hi = 0
cpufreq.lo = 1000000000。 cpufreq.hi = 0
内核("CORE0")正在启动

------- 正在初始化---
核心0:L1D 高速缓存大小4. L2高速缓存大小0。
MonolithicDesc[]的地址= 0xc050000。 已转换=0x1c050000
内核0:已插入内存区域0
[C66xx_1] timerFreq.lo = 1000000000。 timerFreq.hi = 0
cpufreq.lo = 1000000000。 cpufreq.hi = 0
内核("Core1")、启动
localQueueName=Core1。 nextQueueName=CORE0。 foreQueueName=CORE0
[C66xx_0] localQueueName=CORE0。 nextQueueName=Core1。 队列名称=Core1
tsk0启动
[C66xx_1] tsk0启动
[C66xx_0] tsk0。 selfproc=0 nextQueueName (Core1) opened、nextQueueId=65536
tsk0。 selfProc =0调用 MessageQ_Put (nextQueueName=Core1)。 MSG=0xc002a80
[C66xx_1] tsk0。 selfproc = 1 nextQueueName (CORE0) opened、nextQueueId=0
[C66xx_0]=== 系统属性====
器件名称: TMS320C6670
处理器名称: CORE0、Core1
CPU 频率: 1000MHz
定时器频率: 1000 MHz

==== 基准属性====
MessageQ 设置委派: ti.transport.ipc.qms.transport.TransportQmsSetup
处理器数: 2
接收到的消息数:93
构建配置文件: 调试

==== MessageQ 基准测试结果====
平均1路延迟: 3151 (周期数/ msg) 3151 (ns/msg)
最大单向延迟: 3160 (周期数/ msg)(#3) 3160 (ns/msg)
最小1路延迟: 3144 (周期数/ msg)(# 29) 3144 (ns/msg)
标准偏差: 3 (周期/消息)
总经历时间: 554672 (周期) 554 (us)

通过预先分配的吞吐量:将所有消息预先分配、同步内核、将所有消息从内核0发送到内核1
[C66xx_1]内核1。 msgs received= 2000 time=2318425 (周期- 2318us)。 Thrput = 862812 [msgs/s]
个周期/msg = 1159 

当我通过创建新的平台文件将代码和数据放入 DDR3存储器、然后运行示例时、控制台中出现错误:

[C66xx_0] timerFreq.lo = 1000000000。 timerFreq.hi = 0
cpufreq.lo = 1000000000。 cpufreq.hi = 0
内核("CORE0")正在启动

------- 正在初始化---
核心0:L1D 高速缓存大小4. L2高速缓存大小4.
MonolithicDesc[]的地址= 0xc050000。 已转换=0x1c050000
内核0:已插入内存区域0
[C66xx_1] timerFreq.lo = 1000000000。 timerFreq.hi = 0
cpufreq.lo = 1000000000。 cpufreq.hi = 0
内核("Core1")正在启动
 ti.sysbios.family.c64p.Hwi:第188行:e_alreadyDefined:Hwi 已定义:INTR# 5
xdc.runtime.Error.raise:终止执行

下面是一个显示新平台配置的打印屏幕:

新平台名称是 C6670_With DDR3。

在项目属性:General_>RTSC->Platform 中,我已将平台更改为 C6670_With DDR3:

我还向 cfg 文件行添加了 MAR 位设置:

Cache.setMarMeta(0x80000000、0x20000000、Cache.PC | Cache.PCX | Cache.PFX | Cache.WTE);

我的配置有什么问题、该示例在缓存打开后无法正常工作? E_alreadyDefined:Hwi 已定义:INTR# 5意味着什么? IPC 有什么问题?

我仅更改了平台文件、并在 cfg 文件中添加了 MAR 位设置。

在 cfg 文件中,文件开头也加载了 PlatformLib。 它位于 qmsIpcBenchmark 示例文件中。

VAR PlatformLib = XDC.loadPackage ('ti.platform.evmc6670l');

这可能是个问题吗? 我不知道如何更改 cfg 文件加载 defaut 平台库 以加载新的一个 C6670_With DDR3。

附件中有 cfg 文件和新平台文件。

谢谢。

此致、

Lukasz。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Lukasz:

    我已通知 RTOS 团队。 他们的反馈将在此处发布。

    此致、
    Yordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我忘记了我的文件。

    以下是我的附件文件:

    1.新平台文件

    e2e.ti.com/.../C6670_5F00_with_5F00_DDR3.zip

    2. cfg 文件:

    e2e.ti.com/.../1537.app.cfg

    从项目属性打印屏幕:

    平路机、

    Lukasz。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    MCSDK 2.1.2.6/PDK 1.1.2.6已停产、并已迁移到处理器 SDK RTOS 中。 对于 IPCQMSSquising 测试示例、它仅支持 C6657和 C6678、不支持 c6670。

    更改后、我不确定是否可以将数据段放入 DDR 中、我认为可能需要由本地 L2中的内核访问这些数据段。 要了解导致问题的变化、您能否一次介绍一个变化
    -仅将程序放入 DDR、将数据放入 LL2
    -您可能不需要创建新平台、只需在.cfg 文件中添加一些内容、例如:Program.sectMap["SECTION name]]="DDR";找到要放入 DDR 的段的名称

    此致、Eric
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Eric:
    感谢您的想法。 我只将程序放入 DDR3、将数据放入 L2SRAM。 一切都很好。
    以下是我的新平台文件(DDR3中的程序、L2SDRAM 中的数据、L2SDRAM 中的堆栈):

    正如您所说的、我使用命令 Program.sectMap["SECTION name]]="DDR3"将段移动到 DDR3:

    Program.sectMap[".qmss"]= new Program.SectionSpec ();
    Program.sectMap[".qmss"]="DDR3";
    
    Program.sectMap[".cppi"]= new Program.SectionSpec ();
    Program.sectMap[".cppi"]="DDR3";
    
    Program.sectMap[".desc"]= new Program.SectionSpec ();
    Program.sectMap[".desc"]="MSMCSRAM";
    
    Program.sectMap[".msgQ_ptrs"]= new Program.SectionSpec ();
    Program.sectMap[".msgQ_ptrs"]="L2SRAM";
    
    Program.sectMap["platform_lib"]= new Program.SectionSpec ();
    Program.sectMap["platform_lib"]="DDR3 ";
    
    //分配内存(.far .fardata .rodata .neardata .bss 必须位于 L2SRAM 存储器中)
    // Program.sectMap[".far"]="DDR3";
    // Program.sectMap[".fardata"]="DDR3";
    // Program.sectMap[".bss"]="DDR3";
    // Program.sectMap[".rodata"]="DDR3";
    // Program.sectMap[".neardata"]="DDR3";
    Program.sectMap[".sysmem"]="DDR3";
    Program.sectMap[".args"]="DDR3";
    Program.sectMap[".cio"] ="DDR3";
    Program.sectMap[".init_array"]="DDR3";
    Program.sectMap[".cinit"]="DDR3";
    Program.sectMap[".const"]="DDR3";
    Program.sectMap[".text"]="DDR3";
    Program.sectMap[".code"]="DDR3";
    Program.sectMap[".switch"]="DDR3";
    Program.sectMap[".data"]="DDR3";
    Program.sectMap[".cio"]="DDR3";
    Program.sectMap[".vecs"]="DDR3";
    

    我无法将.far .fardata .rodata .neardata .bss 从 L2SDRAM 移到 DDR3。 如果我这么做、程序将无法正常工作。 您知道发生这种情况的原因吗?
    附件中是我的配置文件和新平台文件。

    此致、
    Lukasz。

    e2e.ti.com/.../3443.C6670_5F00_with_5F00_DDR3.zip

    e2e.ti.com/.../0871.app.cfg