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/RM48L952:RM48L952 SDRAM 上的 Frtos 堆

Guru**** 2473970 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/660420/rtos-rm48l952-frtos-heap-on-rm48l952-sdram

器件型号:RM48L952

工具/软件:TI-RTOS

您好!

我尝试使用外部 SDRAM 来分配8 MB 的堆(全尺寸为16MB、其他8MB 用于我的 ramdisk)、因为我的产品将在 RAM 上存储大数据、所以我需要分配大量内存。

我的 SDRAM 已经过测试、应该可以正常工作、我的 ramdisk 也应该使用 FRTOS FAT16。

此主题具有几乎相同的问题、但没有解决方案:   e2e.ti.com/.../371084

我尝试了很多方法来将 RTOS 堆放入 SRDAM 中、但它总是在 prvSetupDefaultMPU ();或 vPortStartFirstTask ();在"os_port.c "中结束

我用"os_heap.c"和"heap_5.c"来尝试它。

我还 扩展了 prvSetupDefaultMPU()中的 MPU 设置;使用

prvMpuSetRegion (portPRIVILEGED_RAM_REGION、 0x8000000、portMPU_SIZE _16MB | portMPU_REGION_ENABLE、portMPU_PRIV_RW_USER_RW_EXEC | portMPU_NORY_OIWTNOWA_SHARED);

但它也在 prvSetupDefaultMPU()之后以中止结束;

是否可以将堆放在 SDRAM 上、或者像上面的线程那样、硬件是否仍然存在问题?

谢谢。

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

    您可以为我检查器件的修订版吗? RevC 或早期修订版有一个错误、此错误在勘误表中列出(第30页 Device#B064、SPNZ196G.pdf)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好,王先生

    感谢您的回答。 我的器件的修订版代码为 D

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

    您好、Claudio、

    您能否尝试几种不同的设置:

    1. portMPU_normal_OIWTNOWA_shared --> STRINGORDERED_SHARED

      RM48器件没有缓存、因此 OIWTNOWA 不适用

    2.使用--no_STM 编译选项

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

    你好,王先生

    感谢您的建议。

    我首先尝试了不带"NO_STM"标志的 MPU 设置。 但在 implepEnable()之后失败;

    使用"NO_STM"标志时,程序将卡在"sys_startup.c"处(esmREG->SR1[2])!= 0U)

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

    感谢您的更新。

    1.我将在电路板上进行调查、但可能不会重现问题

    2.能否检查 SR1[2]中的值(ESMSR3、ESM 组3错误)?

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

    如果我是对的、您可以在图片中看到、我看到"-no_STM"标志为"RAM 偶数组(B0TCM)- ECC 不可纠正的错误"。 

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

    它可能是由 RAM 和 SDRAM 的冲突区编号引起的。 您在0x08000000处对该区域使用#2 (portPRIVILEGED_RAM_REGION)、在0x8000000处对该区域使用#2 (portPRIVILEGED_RAM_REGION)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好,王先生

    感谢您的回答。 您的提示解决了我的问题。

    我在函数"prvSetupDefaultMPU"中的 os_port.c 中添加了具有扩散区域的此代码

       prvMpuSetRegion (portPRIVILEGED_SDRAM_REGION、 0x8000000、portMPU_SIZE _32MB | portMPU_REGION_ENABLE、portMPU_PRIV_RW_USER_RO_EXEC | portMPU_STRONGORDERLYED_sharedable);

    portPRIVILEGED_SDRAM_REGION 我用另一个数字定义了它。

    此致 c.lei