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.

[参考译文] TMS320C6678:在共享区域中创建的堆与在 RTSC 配置文件中设置的堆不同

Guru**** 2538930 points
Other Parts Discussed in Thread: MATHLIB, TMS320C6678

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1046236/tms320c6678-heap-created-in-a-shared-region-not-the-same-as-being-set-in-a-rtsc-config-file

器件型号:TMS320C6678
主题中讨论的其他器件:MATHLIB

你(们)好  

我有一个共享区域、在 RTSC 配置文件中以静态方式创建了4个条目。

Program.global.CFG_SL2_IPC_MSG_BASE       = 0x0c000000;
Program.global.CFG_SL2_IPC_MSG_SIZE       = 0x00010000;
Program.global.CFG_SL2_BASE               = 0x0c010000;
Program.global.CFG_SL2_SIZE               = 0x00370000;

Program.global.CFG_DDR_HEAP_BASE  = 0x81000000;
Program.global.CFG_DDR_HEAP_SIZE  = 0x45200000;   // => 1106 MB
Program.global.CFG_DDR_NONCACHED_HEAP_BASE = 0x80100000;
Program.global.CFG_DDR_NONCACHED_HEAP_SIZE = 0x00800000; // 8 MB

var sharedRegion = xdc.useModule('ti.sdo.ipc.SharedRegion');
sharedRegion.translate = false;
sharedRegion.numEntries = 4;

/* Shared Memory base address and length */
var SHAREDMEMSL2        = Program.global.CFG_SL2_IPC_MSG_BASE;
var SHAREDMEMSL2SIZE    = Program.global.CFG_SL2_IPC_MSG_SIZE;

/* SL2 Shared Memory base address and length */
sharedRegion.setEntryMeta(Program.global.SL2HEAPID,
    { base: SHAREDMEMSL2,
      len:  SHAREDMEMSL2SIZE,
      ownerProcId: 0,
      isValid: true,
      cacheLineSize: 64, /* need 64B to get pass IPC_attach phase, and it is okay with our 256B message size in our code */
      createHeap: true,
      name: "SL2_IPC",
    });

/* Shared Memory base address and length */
var SHAREDMEM2SL2        = Program.global.CFG_SL2_BASE;
var SHAREDMEM2SL2SIZE    = Program.global.CFG_SL2_SIZE;

/* SL2 Shared Memory base address and length */
sharedRegion.setEntryMeta(Program.global.SL2HEAP2ID,
    { base: SHAREDMEM2SL2,
      len:  SHAREDMEM2SL2SIZE,
      ownerProcId: 0,
      isValid: true,
      cacheLineSize: 64, /* L1 cache line size: 64B */
      createHeap: true,
      name: "SL2_HEAP",
    });

/* DDR Shared Memory base address and length */
var SHAREDMEMDDR           = Program.global.CFG_DDR_HEAP_BASE;
var SHAREDMEMSIZEDDR       = Program.global.CFG_DDR_HEAP_SIZE;
sharedRegion.setEntryMeta(Program.global.DDRHEAPID,
    { base: SHAREDMEMDDR,
      len:  SHAREDMEMSIZEDDR,
      ownerProcId: 0,
      isValid: true,
      cacheLineSize: 128, /* L2 cache line size: 128B */
      createHeap: true,
      cacheEnable: true, /*This should reflect the cacheability of memory region. This does NOT set the cacheability*/
      name: "DDR_HEAP",
    });

/* Non-cacheable DDR Shared Memory base address and length */
var SHAREDMEM_DDRNONCACHEABLE = Program.global.CFG_DDR_NONCACHED_HEAP_BASE;
var SHAREDMEMSIZE_DDRNONCACHEABLE = Program.global.CFG_DDR_NONCACHED_HEAP_SIZE;
sharedRegion.setEntryMeta(Program.global.DDRNONCACHED_HEAPID,
    { base: SHAREDMEM_DDRNONCACHEABLE,
      len:  SHAREDMEMSIZE_DDRNONCACHEABLE,
      ownerProcId: 0,
      isValid: true,
      cacheLineSize: 128, /* L2 cache line size: 128B */
      createHeap: true,
      cacheEnable: false, /*This should reflect the cacheability of memory region. This does NOT set the cacheability*/
      name: "DDR_NONCACHED_HEAP",
    });

在运行时、  使用 SharedRegion_getEntry()、SharedRegion_getHeap ()和 Memory_getStats()对每个区域 ID 查询条目和堆统计数据。 下表列出了每个区域 ID 的条目和堆统计值。  

区域 ID 使用  SharedRegion_getEntry()查询的条目 使用  SharedRegion_getHeap ()和 Memory_getStats ()查询堆统计信息
0

基址= 0x0C00000

Len = 0x00100000

ownerProId = 0

isVaild = 1

CacheEnable = 1

CacheLineSize = 64

createHeap = 1

名称="SL2_IPC"

总大小= 0x0001F280

ttoalFreeSize = 0x00016300

largestFreeSize = 0x0001630

1

基址= 0x810000

Len = 0x45200000

ownerProId = 0

isVaild = 1

CacheEnable = 1

CacheLineSize = 128

createHeap = 1

名称="DDR_IPC"

总大小= 0x8A400000

totalFreeSize = 0x8A400000

largestFreeSize =  0x8A400000

2.

基址= 0x0C010000

Len = 0x00370000

ownerProId = 0

isVaild = 1

CacheEnable = 1

CacheLineSize = 64

createHeap = 1

名称="SL2_Hap"

总大小= 0x006E0000

totalFreeSize = 0x006E0000

largestFreeSize =  0x006E0000

3.

基址= 0x80100000

Len = 0x00800000

ownerProId = 0

isVaild = 1

CacheEnable = 0

CacheLineSize = 128

createHeap = 1

名称="DDR_NONCACHED_HAC"

总大小= 0x01000000

totalFreeSize = 0x01000000

largestFreeSize =  0x01000000

对于每个区域 id、堆统计数据 totalSize 是 条目中设置的长度的两倍。 我假设 entry.len 的单位(8位字节)与 totalSize 相同。 在我的构建中、 库版本如下在 PROCESSOR-SDK-RTOS-C667X 中指定  06.03.00.106

  • Code Composer Studio v9.3
  • C667x PDK 2.0.16
  • DSPLIB C66x 3.4.04
  • IPC 3.50.4.08
  • MATHLIB 3.1.2.4
  • SYS/BIOS 6.76.3.01
  • 系统分析器(UIA 目标) 2.30.1.02
  • xDAIS 7.24.0.04
  • XDCtools 3.55.2.22
  • TI C6000编译器8.3.2

使用旧版 SDK ti-processor-sdk-rtos-c667x-evm-03.03.00.04构建时不会出现此类问题 。 感谢您的任何帮助。

伟国法律

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

    Wai、

          Wai 说:"使用较旧的 SDK ti-processor-sdk-rtos-c667x-evm-03.03.00.04构建时不会出现此类问题。 感谢您的任何帮助。"

    Shankari:

    美好的一天!

    您还想发布吗

     1."  使用 SharedRegion_getEntry()、SharedRegion_getHeap()和 Memory_getStats()对条目和堆统计数据进行查询。  "使用旧 SDK、

     TI-processor-SDK-RTOS-c667x-EVM-03.03.00.04? 以便我们可以对它们进行比较。

    我也建议您查看 IPC 示例的配置文件-共享区域(ex11_ping、ex02_MessageQ)以供参考,并将其与您的进行比较。

    将获得有关使用共享区域和内存分配的更多想法...

    ex11_ping - ipc_3_50_04_08\examples\C6678_BIOS_elf\ex11_ping\shared - ipc.cfg.xs

    ex02_MessageQ - IPC_3_50_04_08\examples\66AK2E_BIOS_elf\ex02_MessageQ\shared - ipc.cfg.xs

    此致

    Shankari

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

    你好,Shankari

    以下是使用使用  使用 SDK ti-processor-sdk-rtos-c667x-evm-03.03.00.04构建的 SharedRegion_getEntry()、SharedRegion_getHeap ()和 Memory_getStats ()查询的条目和堆统计信息、

    SDK C667X 03.03.00.04
    区域 ID 使用  SharedRegion_getEntry()查询的条目 使用  SharedRegion_getHeap ()和 Memory_getStats ()查询堆统计信息
    0

    基地址= 0x0C000000

    Len = 0x00010000

    ownerProId = 0

    isVaild = 1

    CacheEnable = 1

    CacheLineSize = 64

    createHeap = 1

    名称="SL2_IPC

    总大小= 0x0000F900

    ttoalFreeSize = 0x00006980  

    largestFreeSize = 0x00006980

    1

    基址= 0x81000000

    Len = 0x45200000

    ownerProId = 0

    isVaild = 1

    CacheEnable = 1

    CacheLineSize = 128

    createHeap = 1

    名称="DDR_heap

    总大小= 0x451FFF80

    ttoalFreeSize = 0x451FFF80

    largestFreeSize = 0x451FFF80

    2.

    基址= 0x0C010000

    Len = 0x00370000

    ownerProId = 0

    isVaild = 1

    CacheEnable = 1

    CacheLineSize = 64

    createHeap = 1

    名称="SL2_Hap"

    总大小= 0x0036FFC0

    ttoalFreeSize = 0x0036FFC0

    largestFreeSize = 0x0036FFC0

    3.

    基址= 0x80100000

    Len = 0x00800000

    ownerProId = 0

    isVaild = 1

    CacheEnable = 0

    CacheLineSize = 128

    createHeap = 1

    名称="DDR_NONCACHED_HAC"

    总大小= 0x007FFF80

    ttoalFreeSize = 0x007FFF80

    largestFreeSize = 0x007FFF80

    SDK C667X 03.03.00.04的工具链组件 

     为便于比较 、下表显示了新工具链 SDK C667X 06.03.00.106的值。

    SDK C667X 06.03.00.106
    区域 ID 使用  SharedRegion_getEntry()查询的条目 使用  SharedRegion_getHeap ()和 Memory_getStats ()查询堆统计信息
    0

    基地址= 0x0C000000

    Len = 0x00010000

    ownerProId = 0

    isVaild = 1

    CacheEnable = 1

    CacheLineSize = 64

    createHeap = 1

    名称="SL2_IPC

    总大小= 0x0001F280

    ttoalFreeSize = 0x00016300

    largestFreeSize = 0x00016300

    1

    基址= 0x81000000

    Len = 0x45200000

    ownerProId = 0

    isVaild = 1

    CacheEnable = 1

    CacheLineSize = 128

    createHeap = 1

    名称="DDR_heap

    总大小= 0x8A400000

    ttoalFreeSize = 0x8A400000

    largestFreeSize = 0x8A400000

    2.

    基址= 0x0C010000

    Len = 0x00370000

    ownerProId = 0

    isVaild = 1

    CacheEnable = 1

    CacheLineSize = 64

    createHeap = 1

    名称="SL2_Hap"

    总大小= 0x006E0000

    ttoalFreeSize = 0x006E0000

    largestFreeSize = 0x006E0000

    3.

    基址= 0x80100000

    Len = 0x00800000

    ownerProId = 0

    isVaild = 1

    CacheEnable = 0

    CacheLineSize = 128

    createHeap = 1

    名称="DDR_NONCACHED_HAC"

    总大小= 0x01000000

    ttoalFreeSize = 0x01000000

    largestFreeSize = 0x01000000

      SDK C667X 06.03.00.106的工具链组件  

      对于 SDK C667X 03.03.00.04和  SDK C667X 06.03.00.106、条目值是相同的。 但不知怎么说 、SDK C667X 06.03.00.106的堆统计数据是条目中设置的值的两倍。

    我查看 了 ex11_ping、但没有找到 与 rtsc cfg 文件不同的任何内容。 我不会对 ex02_MessageQ 进行微调 、因为 IPC_3_50_04_08\examples 没有文件夹66AK2E_BIOS_elf。

    下面是每个区域 ID 的4个堆句柄的更多内存视图。

    第一个是    SDK C667X 03.03.00.04的存储器、第二个是  SDK C667X 06.03.00.106的存储器视图。  我没有堆句柄的数据结构定义、它是一个空指针。 每个句柄有12个32位字。 根据存储器内容值、我想一些32位字对应于以下字段。

    • 第1个32位字-函数指针
    • 第2个32位字-与堆相关 的存储器地址
    • 第6个32位字- 16 MSB =区 ID、16 LSB =高速缓存使能
    • 第8个32位字-与堆 相关 的存储器地址
    • 第9个32位字-缓存行大小(单位=字节)
    • 第10个32位字-堆总大小

    堆总大小与使用   SharedRegion_getEntry()、 SharedRegion_getHeap ()和 Memory_getStats()查询的堆大小一致。  同样、 使用 SDK C667X 06.03.00.106构建的堆总大小增加了一倍。

    伟国法律

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

    您好、Wai、

    感谢您提供所有信息。

    让我尝试模拟您的场景、然后返回给您。

    同时、如果您有任何更快速的方法来复制您的方案、请告诉我。

    此致

    Shankari

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

    你好,Shankari

    我想对 SDK 版本进行更正。 我的迁移实际上是从  ti-processor-sdk-rtos-c667x-evm-04.01.00.06到  ti-processor-sdk-rtos-c667x-evm-06.03.00.106。  之前的线程中提到的 SDK 版本 ti-processor-sdk-rtos-c667x-EVM-03.03.00.04实际上是  ti-processor-sdk-rtos-c667x-EVM-04.01.00.06。 很抱歉造成混淆。

    伟国法律

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

    你好,Shankari

    我的应用程序 Phoenix 链接到静态库 PhenixPlatformCfg、该静态库具有在 cfg 文件 中静态创建的4个共享区域、即 Phx_C6678_configuration.cfg。
    随附 的是 zip 格式的腓基普拉格式 Cfg。
     我无法共享 应用程序项目 Phoenix、因为它具有我公司的专有代码。 在调用 BIOS_start()之前会发生共享区域问题。
    您可以通过创建一个链接到  PhoenixPlatformCfg 静态库 的简单项目来重新处理该问题、该项目具有 一个 main()函数、  可在该函数中调用 SharedRegion_getHeap ()和 Memory_getStats ()来检查堆大小。
    Wai Kwok Lawe2e.ti.com/.../3247.PhoenixPlatformCfg.zip
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Wai、

    让我尝试模拟您的场景、然后返回给您。

    我知道您不能共享公司的专有代码... 但是

    (要进行模拟, 我必须创建一个包含所有版本控制软件包列表的简单项目,您在这里已经提到了...)
    它将使用 time....because 我有不同版本的 packages....in 我的系统....
     

    此致

    Shankari

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

    你好,Shankari

    我能够在  TMS320C6678 Lite 评估模块上重现堆大小问题。  我可以向您发送平台静态库和一个颠簸的应用项目、以便您可以在  TMS320C6678 Lite 评估模块上对其进行调试。 我需要1-2天时间清理所有专有代码、然后才能向您发送项目。 我不想在此论坛中发布项目文件。 是否有更好的方法可以作为安全资源与您共享它、或者我可以通过电子邮件将它发送给您。  

    Thx

    伟国法律

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

    您好、Wai、

    谢谢! 请分享。

    如果尺寸小于10 MB、我想您可以通过电子邮件发送。

    如果电子邮件选项不起作用、我将与团队联系以获取任何共享的 TI 驱动器。

    此致

    Shankari

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

    你好,Shankari

    它超过10 MB。 我可以尝试通过 google 驱动器将其发送给您。 您能给我发送您的电子邮件地址吗?

    韦国

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

    你好,Shankari

    它超过10 MB。 我可以尝试通过 google 驱动器将其发送给您。 您能给我发送您的电子邮件地址吗?

    韦国

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

    您好、Wai、

    这将 在内部进行处理。

    我已经向您发送了一封电子邮件、详细介绍了如何上传项目。 请检查。

    此致

    Shankari G

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

    在内部、此查询由和处理  

     IPC 版本3.50.4.08中似乎存在错误。

    建议使用 IPC 版本3.50.4.07。

    IPC 3.50.4.07的下载链接:  

     
    请 不要选择.07的"A"版本
    此致
    Shankari G