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.

[参考译文] AM62A7:如何使 C7x FreeRTOS 在 L2SRAM 上运行?

Guru**** 2482105 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1451637/am62a7-how-to-make-c7x-freertos-run-on-l2sram

器件型号:AM62A7

工具与软件:

亲爱的支持者、

我尝试使用 L2SRAM 在 MCU SDK 10上运行 C7x hello world FreeRTOS 示例。 默认链接器会将所有段路由到 DDR、我需要堆栈和堆路由到 L2SRAM。 但我只能将.sysmem 指向 SRAM。 只要我将.stack 指向 SRAM、调试器就无法跳转到主函数。 您能帮助我更改链接器以便让 Hello world FreeRTOS 项目在 SRAM 上运行吗?

非常感谢!

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

    尊敬的 Jack:

    感谢您的提问。

    我已获取您的意见并进行处理。 请等待一段时间再回来。

    此致、

    Tushar

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

    尊敬的 Jack:

    感谢您的耐心。

    您可以尝试使用以下 linker.cmd 文件吗?

    --ram_model
    -heap  0x20000
    -stack 0x20000
    --args 0x1000
    --diag_suppress=10068 /* to suppress no matching section error */
    --cinit_compression=off
    -e _c_int00_secure
    
    #define DDR0_ALLOCATED_START  0x80000000
    #define C7X_ALLOCATED_START DDR0_ALLOCATED_START + 0x19800000
    
    #define C7X_RESOURCE_TABLE_BASE (C7X_ALLOCATED_START + 0x00100000)
    #define C7X_BOOT_BASE           (C7X_ALLOCATED_START + 0x00200000)
    #define C7X_VECTOR_BASE         (C7X_ALLOCATED_START + 0x00400000)
    #define C7X_DDR_SPACE_BASE      (C7X_ALLOCATED_START + 0x00410000)
    
    MEMORY
    {
        L2SRAM (RWX):  org = 0x7E000000,          len = 0x00100000
        DDR0_RESERVED: org = 0x80000000,          len = 0x19800000  /*  Reserved for A53 OS */
        C7X_IPC_D:     org = C7X_ALLOCATED_START, len = 0x00100000  /*  1MB DDR */
        C7X_BOOT_D:    org = C7X_BOOT_BASE,       len = 0x400       /*  1024B DDR */
        C7X_VECS_D:    org = C7X_VECTOR_BASE,     len = 0x4000      /*  16KB DDR */
        C7X_CIO_MEM:   org = C7X_DDR_SPACE_BASE,  len = 0x1000      /*  4KB DDR */
        C7X_DDR_SPACE: org = C7X_DDR_SPACE_BASE+0x1000, len = 0x01BF0000-0x1000  /*  27.9MB - 4KB DDR  */
    }
    
    SECTIONS
    {
        boot:
        {
          boot.*<boot.oe71>(.text)
        } load > C7X_BOOT_D ALIGN(0x200000)
        .vecs       >       C7X_VECS_D ALIGN(0x400000)
        .secure_vecs    >   C7X_DDR_SPACE ALIGN(0x200000)
        .text:_c_int00_secure > C7X_DDR_SPACE ALIGN(0x200000)
        .text       >       C7X_DDR_SPACE ALIGN(0x200000)
    
        .bss        >       C7X_DDR_SPACE  /* Zero-initialized data */
        RUN_START(__BSS_START)
        RUN_END(__BSS_END)
    
        .data       >       C7X_DDR_SPACE  /* Initialized data */
    
        .cinit      >       C7X_DDR_SPACE  /* could be part of const */
        .init_array >       C7X_DDR_SPACE  /* C++ initializations */
        .stack      >       L2SRAM
        .args       >       C7X_DDR_SPACE
        .cio        >       C7X_CIO_MEM
        .const      >       C7X_DDR_SPACE
        .switch     >       C7X_DDR_SPACE /* For exception handling. */
        .sysmem     >       L2SRAM /* heap */
    
        GROUP:              >  C7X_DDR_SPACE
        {
            .data.Mmu_tableArray          : type=NOINIT
            .data.Mmu_tableArraySlot      : type=NOINIT
            .data.Mmu_level1Table         : type=NOINIT
            .data.gMmu_tableArray_NS       : type=NOINIT
            .data.Mmu_tableArraySlot_NS   : type=NOINIT
            .data.Mmu_level1Table_NS      : type=NOINIT
        }
    
        .benchmark_buffer:     > C7X_DDR_SPACE ALIGN (32)
    
    }
    

    同时为 L2SRAM 存储器区域添加 MPU 区域条目。 请参阅下面的屏幕截图。

    请告知我们上述解决方案是否有效。

    此致、

    Tushar

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

    尊敬的 Tushar Thakur:

    感谢您的支持、我可以使用链接器和 MMU 设置运行。 但是、当我想确认它是否真正在 L2SRAM 上运行时、有一个奇怪的情况。 我编写了一个小测试、以查看指针地址是否实际位于 SRAM 上、局部变量是否位于堆栈(SRAM)上。 但当我禁用优化时、我看到指针地址位于 DDR 上。 当我将优化级别更改为0或1时、我在 SRAM 上看到它。  

    为什么优化关闭使 DDR 上的指针即使在 L2上设置链接器.sysmem 也是如此?

    选择关闭

    选项1

    感谢您的支持、

    插孔

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

    尊敬的 Jack:

    CCS 的表达式/变量视图中显示的值似乎不准确或未反映确切的状态。

    您可以尝试打印地址值吗? 我可以看到、即使优化关闭、变量也位于 L2SRAM。

    请参阅下图。

    此致、

    Tushar