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.

[参考译文] RTOS/TM4C1294NCPDT:HeapTrack 不能与 SDRAM 配合使用#39;不能与 SDRAM 配合使用?

Guru**** 2457760 points
Other Parts Discussed in Thread: TM4C1294NCPDT

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/637631/rtos-tm4c1294ncpdt-heaptrack-doesn-t-work-with-sdram

器件型号:TM4C1294NCPDT

工具/软件:TI-RTOS

tm4c1294ncpdt
CCS6.1.3
tirtos_tivac_2_10_01_38
编译器:TI v5.1.1
XDC:3.30.004.52

我有一个板、SDRAM 的大小为0x60000000、大小为8M、内存堆是在整个 RAM 上动态创建的。 最初、HeapTrack 未在.cfg 中启用。 今天我启用了它尝试调试、发现 ROV 检测到堆已损坏。 有关详细信息、请参阅下面的 snampshot。

创建堆的代码为:

Int NonCriticalMemInit (void)
{
HeapMem_Params PRMS;
Error_Block EB;

ERROR_INIT (&EB);
HeapMem_Params_init (&PRM);

PRMs.size = GetSdRamTotalSize();
PRMs.buf =(PTR) GetSdRamStartAddr();

heapMemNonCritical0 = HeapMem_create (&PRMS、&EB);

返回 NULL!= heapMemNonCritical0;
} 


如果我在上述函数的最后一行放置一个断点、我可以在 ROV 中看到错误。 那么、这是否意味着 HeapTrack 无法使用 SDRAM、或者在创建堆时是否有任何问题?

谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    首先、错误是针对 HeapMem 而不是 HeapTrack。 heapMemNonCritical0的值是什么?

    您如何"启用"HeapTrack? 如果您只设置以下内容、这只会使 HeapTrack 驻留在默认堆的顶部。 您有一个默认堆吗? 请查看 ROV->HeapMem...有多少个实例?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    哎呀...忘记了"关注"。 如果您在.cfg 中设置这个、它只会将 HeapTrack 插入默认堆的顶部。

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

    请参阅更新快照。 在此新快照中、"heapMemNonCritical0"的值为0x20000820 (旧快照中的值为0x2000850)。 我不知道为什么值今天会改变。

    是的、Heaptrack 由.cfg 中的"BIOS.heapTrackEnabled = true;"启用。

    堆有两个实例、一个是默认的、另一个是 SDRAM。

    在创建堆后、ROV 立即检测到这个错误、而无需任何分配和释放。

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

    您可以在 CCS 存储器浏览器中查看0x60000000吗? 该地址的前两个32位字是什么(我假设它将为零和8388608)? 我想 ROV 不知道存在内存、因此无法解析它。 您的链接器文件中是否包含该存储器?

    Todd

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

    是的、你是对的。 它们是0和0x800000。 SDRAM 不在链接器文件中。

    如果我将 SDRAM 添加到链接器文件中、仍然存在错误。

    存储器

    (笑声)
    SRAM (rwx):origin = 0x20000000,length = 0x00040000
    SDRAM (RW):origin = 0x60000000,length = 0x00800000

    那么、如何实现呢?

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

    我不确定是什么问题? 您能确认几个事项
    1.您能够从 SDRAM 中的堆中分配内存?
    2.如果确实有"BIOS.heapTrackEnabled = true;"、则会在 ROV 中看到上述错误。 如果将其设置为 false、则在 ROV 中不会出现错误。

    创建 SDRAM 堆后,您可以同时获取 ROV->HeapMem ->Detailed 和 ROV->HeapMem -> Basic 的快照并附加它们。

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

    1、SDRAM 可以用。 我已经使用它多年了、一切看起来都很好。
    2.未启用 heaptrack 时,仍存在此类错误。 但是、使用 API 获取堆状态、例如"HeapMem_getStats"、看起来不错

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢。 因此 HeapTrack 不是问题的一部分、实际代码运行良好...很好。

    我需要与其他人核实这一点。 我认为将段添加到链接器文件中应该可以解决此问题。 我应该很快得到一个答案(或后续猜测)。

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

    好的。 仅仅将其添加到链接器文件中似乎是不够的。 需要有一个与之关联的段。 您可以尝试将其添加到.cfg 文件中吗?

    VAR 模型= XDC.MODULE ("XDC.ROV.Model");
    var memReader = Model.getMemoryImageInst();
    var sections = memReader.getSecations();
    SECTIONS。addSection (base、end-base);//其中 base 为0x60000000、end-base 为0x60800000

    希望这可以修复 ROV。 它将对目标代码没有影响(但最好在此更改前后对映射文件进行比较...这样做是为了安全)。

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

    memReader.getSections():找不到函数"getSections()。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    抱歉。 我应该已经在您的版本上尝试过它。 我们将其修复为较新版本的 XDCtools、但很遗憾、它与您的 TI-RTOS 不兼容。 如果不更改已安装的 TI-RTOS 产品、就无法修复您看到的 ROV 问题。 请告诉我、如果您认为修复 ROV 工具对于这一点非常重要、我可以向您发送解决方案。

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

    谢谢。 请向我发送权变措施、然后我尝试修复它。

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

    在更新到 tirtos_tivac_2_16_01_14 (我可以找到的最新版本)和 XDC 到 xdctools_3_32_00_06_core 后、仍然无法找到函数 getSections()。 那么、这是在一个非常新的版本中修复的吗?