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/PROCESSOR-SDK-AM335X:存储器配置

Guru**** 2543780 points
Other Parts Discussed in Thread: AM3359, SYSBIOS

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/604616/rtos-processor-sdk-am335x-memory-configuration

器件型号:PROCESSOR-SDK-AM335X
Thread 中讨论的其他器件:AM3359SYSBIOS

工具/软件:TI-RTOS

使用带有 AM3359处理器的 TI-RTOS 系统。  由于该单元具有512M 的存储器(BeagleBone Black)、因此我想设置 TI-RTOS 以将应用程序之后的所有可用存储器用作堆存储器。  我尝试在 cfg 文件中添加 BIOS.heapsize/Memory.defaultHeapSize 至256M。  但是、通过查看存储器映射、我看到它将存储器放置在 BSS 部分、这本身不是问题、除非系统在加电时初始化 BSS 部分、清除256M 需要一段时间。

有关如何移动存储器以使其不会在加电时初始化以及不使 bin 文件大小为256Meg 的任何帮助。

Robert

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    RTOS 团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Robert、

    请尝试此配置、并告诉我这是否有效。

    var heap1 = HeapMem.create();
    heap1.size = 256*1024*1024;// 256MB
    heap1.sectionName =".myHeapSect";
    Memory.defaultHeapInstance = heap1;
    
    Program.sectMap[".myHeapSect"]= new Program.SectionSpec ();
    Program.sectMap[".myHeapSect"].loadSegment ="DDR3"; 

    //对于您可以添加的 TI 编译器。
    Program.sectMap[".myHeapSect"].type ="NOINIT";//仅与 TI 编译器配合使用。
    
    
    
    
    




  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    不、这只会创建一个256M+ bin 映像。

    以下是 cfg 文件中的内容:

    var heap1 = HeapMem.create();
    heap1.size = 256 * 1024 * 1024;
    heap1.sectionName =".myHeapSect";
    Memory.defaultHeapInstance = heap1;

    Program.sectMap[".myHeapSect"] = new Program.SectionSpec ();
    Program.sectMap[".myHeapSect"].loadAddress = 0x8FF00000;
    Program.sectMap[".myHeapSect"].type ="空载";

    查看生成的地图文件、您可以看到它将".myHeapSect"放在".bss"部分之前。

    .far:NDK_MMBUFFER
    0x80198980 0x1e460
    .far:NDK_MMBUFFER
    0x80198980 0x1e460 /Build/package/cfg/app_pa8fg.oa8fg
    0x80198980 TI_NDK_CONFIG_Global_pitBuffer
    0x801b6980 TI_NDK_CONFIG_Global_PIT

    myHeapSect 0x801b6de0 0x10000000
    myHeapSect 0x801b6de0 0x10000000 /Build/package/cfg/app_pa8fg.oa8fg
    0x801b6de0 TI_SYSBIOS_堆_HeapMem_Instance_State_0_Buf__A

    TI.SYSBIOS.family.ARM.A8.mutableSection
    0x901b8000 0x4000
    TI.SYSBIOS.family.ARM.A8.mutableSection
    0x901b8000 0x4000 /Build/package/cfg/app_pa8fg.oa8fg
    0x901b8000 TI_SYSBIOS_family_ARM_A8_MMU_Module_State_0_tableBuf__A

    堆 0x901bc000 0x0
    0x901bc000 _heap_start__=。
    0x901bc000 结束=_heap_start__
    0x901bc000 _end =结束
    0x901bc000 _end =结束
    0x901bc000 。 =(. +_heap_size)
    0x901bc000 _heap_end_=。
    0x901bc000 _HeapLimit =_heap_end__

    .bss 0x901bc000 0x7cddc
    0x901bc000 __bss_start__=。
    *(.shbss)
    *(.bss)
    .bss 0x901bc000 0xc obj/main.o
    .bss 0x901bc00c 0xA0 obj/globalConfig.o
    0x901bc0ab 以太网配置

    因此、仍然不幸运。

    Robert
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的、我看到了一些我没有忘记修复的东西、但仍然是同一个问题:

    更正了 cfg 文件:

    var heap1 = HeapMem.create();
    heap1.size = 256 * 1024 * 1024;
    heap1.sectionName =".myHeapSect";
    Memory.defaultHeapInstance = heap1;

    Program.sectMap[".myHeapSect"] = new Program.SectionSpec ();
    Program.sectMap[".myHeapSect"].loadSegment ="DDR3";
    Program.sectMap[".myHeapSect"].type ="NOINIT";

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

    我所做的:

    var heap1 = HeapMem.create();
    heap1.size = 256 * 1024 * 1024;
    heap1.sectionName =".stack";
    Memory.defaultHeapInstance = heap1;

    这会将堆放置在.stack 段的末尾。

    然后使用"-remove-section=.stack"选项指示 objcopy 不要将.stack 段放入二进制文件中。 现在、二进制文件不包含堆区域、RTOS 不会像在.bss 段中那样尝试对其进行初始化(默认位置)。

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

    感谢您发布解决方案。 这是一个巧妙的技巧,我将来会用到它:)

    此致、
    Rahul