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.

[参考译文] AM263P4:参考链接时的原点和长度

Guru**** 2589300 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1420488/am263p4-referring-to-origin-and-length-at-link-time

器件型号:AM263P4

工具与软件:

您好!

我知道如何为段生成链接器符号。  但是、是否有办法为存储器生成链接器符号?

例如、我能否  在链接时在代码中引用 OCRAM 的原点(0x70080000)和长度(0x40000):

谢谢你。

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

    尊敬的 Kier:

    [quote userid="479799" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1420488/am263p4-referring-to-origin-and-length-at-link-time 我知道如何为段生成链接器符号。  但是、是否有办法为存储器生成链接器符号?[/QUOT]

    在 TI ARM CLANG 链接器中创建存储器符号:  10.3.调用链接器—TI Arm Clang 编译器工具用户指南

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid="479799" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1420488/am263p4-referring-to-origin-and-length-at-link-time "]例如、我能否  在链接时引用我的代码中 OCRAM 的来源(0x70080000)和长度(0x40000):

    根据代码是指您的链接器文件、那么是的、您可以实现它。

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

    尊敬的 Nilabh:

    根据代码、您的意思是链接器文件

    我是说源代码中的代码。

    例如、这就是如何引用输出段.bss。

    链接器:

        GROUP  :   {
        .bss : {
        } palign(8)
        RUN_START(__BSS_START)
        RUN_END(__BSS_END)

    来源:

    extern uint32_t __BSS_START;
    extern uint32_t __BSS_END;
    
    int32_t _system_pre_init(void)
    {
        uint32_t bss_size = ((uintptr_t)&__BSS_END - (uintptr_t)&__BSS_START);
        (void) memset((void*)&__BSS_START, 0x00, bss_size);
        return 1;
    }

    这已经很清楚了。

    问题是如何为一个存储器区域创建类似符号?

     

        OCRAM   : ORIGIN = 0x70040000 , LENGTH = 0x80000 

    例如、OCRAM origin 和 OCRAM length 的值。

    如果是、请使用什么语法?

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

    在源代码中:(.c fike)

    uint8_t globalBufMem[ICSS_EMAC_PKT_BUF_MEM_SIZE]__attribute__((aligned (128)、section (".bss.buf_mem"));

    在链接器文件中:

     首选
      /* ICCS 使用的数据包缓冲存储器*/
      bss.buf_mem (NoLoad):{}> BUF_MEM  
    }
    小程序
      /*在 ICCS 和该内核之间使用的共享存储器。 标记为非高速缓存或高速缓存+可共享*/
      Buf_MEM    :origin = 0x70000000、length = 0x00010000
    }
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid="479799" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1420488/am263p4-referring-to-origin-and-length-at-link-time/5445776 #5445776"]

    例如、OCRAM origin 和 OCRAM length 的值。

    如果是、请使用什么语法?

    [报价]

    我分享了一个示例、其中您将 globalBufMem 数组放置在.bss.buf_mem 段中

    稍后、您可以参考段名称并创建内存区域 BUF_MEM (确保这不会重叠)、并可以使用下面提到的语法来放置它。

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

    这有几个问题。

    • 以上内容仅有助于确定  globalBufMem 的起点和 globalBufMem 的长度、而不是 BUF_MEM 的起点和长度。 globalBufMem 可能不会放在 BUF_MEM 的前面、并且值 ICSS_EMAC_PKT_BUF_MEM_SIZE 可能与 BUF_MEM 的长度相同、但我需要在编译时手动检查这一点。 关键是在链接时确定这些值。
    • 我不想使用段来确定存储器条目的属性。

    用例是、我希望检查写入存储器访问是否具有特定范围。 因此、我的应用需要知道链接时的值和 BUF_MEM 原点和 BUF_MEM 长度。

    答案似乎是"否、没有语法可用于确定 源代码中链接时 BUF_MEM origin 和 BUF_MEM length 的值。" 好了、我只需要知道答案就是这样。

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

    尊敬的 Kier:

    https://software-dl.ti.com/codegen/docs/tiarmclang/compiler_tools_user_guide/compiler_manual/linker_description/05_linker_command_files/assigning-symbols-at-link-time-stdz0758478.html?highlight=start#assigning-exact-start-end-and-size-values-of-a-section-to-a-symbol

    请告诉我这对您是否有帮助。

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

    谢谢 Nilabh、但是没有

    最接近的是最后一个运算符、但该运算符仅给出最后一个占用地址的存储器范围。 我会为存储器范围寻找开始和结束运算符、但这些运算符仅适用于存储器段。

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

    Kier 这是支持 DIN 我们的 连接器的运算符列表,我认为这是我可以提供的最佳选项,似乎它不是你正在寻找的。 那么我要说、我们不支持 存储器范围的 START 和 END 运算符