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.

[参考译文] Compiler/TM4C129XNCZAD:如何引用段名是 C 代码?

Guru**** 2394295 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/688713/compiler-tm4c129xnczad-how-to-reference-section-name-is-c-code

器件型号:TM4C129XNCZAD

工具/软件:TI C/C++编译器

是否可以通过编程方式获取不同段的地址? 例如、在我的代码中、我要为堆的开头分配一个指针、该堆位于.sysmem 段中。 我是否可以引用一些全局符号? 在.map 文件中、我看到了一个名为_sys_memory 的符号、但编译器在尝试使用它时会生成错误。

此外、编译器手册指出、链接器会生成一个名为__SYSMEM_SIZE 的全局符号、该符号应该是段的大小。 它位于.map 文件中、但当我尝试使用它时、我也会遇到编译器错误。

此致、

Dave

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

    我怀疑您使用的链接器创建的符号不正确。  请参阅  ARM 汇编工具手册中标题为在 C/C++应用中使用链接器符号的部分。   

    您可以使用一种常规方法为段的开头创建符号。  在链接器命令文件中、使用运算符 run_start (name_for_symbol)。  有关详细信息、请参阅同一手册中的"地址和尺寸运算符"一节。

    谢谢、此致、

    乔治

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

    谢谢、George。 我在阅读 "使用链接器符号"部分后能够使内容正常工作。 如果其他人感兴趣、我最终得到的结果是:

    #ifdef init_heap
    extern void *_sys_memory;
    extern void *__SYSMEM_size;
    void *heapAddr =&_SYS_MEMORY;
    void * heapSize =&_SYSMEM_SIZE;
    
    memset (heapAddr、'*'、(size_t)(heapSize));
    #endif
    

    此致、

    Dave