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.

[参考译文] CCS/AM4376:ARM GCC 编译器.data 初始化代码

Guru**** 2522770 points
Other Parts Discussed in Thread: AM4379

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/895085/ccs-am4376-arm-gcc-compiler-data-init-code

器件型号:AM4376
主题中讨论的其他器件:AM4379

工具/软件:Code Composer Studio

在裸机上使用 AM437x 的最新 PDK 推荐 GCC。 我看到代码将.bss 段清零、但没有任何内容可初始化.data 段(从 ROM 复制到 RAM)。 是否有人可以将我指向执行此操作的代码?  

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

    您好!

    我不确定您使用的模板或示例代码、但传统上您需要:

    -在定义目标(VMA)和原始(LMA)地址的.data 存储器段上使用 at>运算符

    -在链接器脚本.data 和非易失性存储器段的边界处定义全局符号(__data_start__、__data_end__等)。

    -创建在初始化时调用的 C 或 ASM 函数,并使用上面定义的符号复制数据。   

    我尚未对 CCS 提供的裸机初始化文件(startup_arMCA9.S 和 AM437x.lds,位于 ccs_install_DIR/Ccs/Ccs_base/arm/include 下)执行此操作,但以下   参考文献中的 at (ldadr)部分显示了一个非常通用的示例:

    https://ftp.gnu.org/old-gnu/Manuals/ld-2.9.1/html_chapter/ld_3.html#SEC21 

    希望这对您有所帮助、

    拉斐尔  

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

    感谢您的回答、我在 startup_arMC9.S 或_start from crt0.S 中找不到它(我正在使用 PDK 的 gcc-arm-none-eabi-7-2018-Q2-update 和 CCS10的测试 helloworld 程序来查看启动序列)。 因此、这似乎需要手动完成。  

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

    Arun、

    我对此做了一些工作。 使用 CCS 项目向导中的简单 Hello World 项目(菜单 File -> New -> CCS Project)、我修改了 STARTUP_ARMCA9.S 和 AM437x.lds 文件、以保存从 DDR 到 L3OCMC0的段副本。  

    请检查所附项目。 我将一个数组(位于文件 testdataset_32kB.h 中)分配给具有不同加载(LMA)和虚拟(VMA)存储器地址的单独存储器段.edata (在 GNU LD lingo 中)。

    执行复制的例程位于 STARTUP_ARMCA9.S 内、并使用链接器创建的符号来分隔要复制的存储器范围。  

    我在 AM4379 IDK 上测试了代码、但它是通用的、也可以在其他 AM437x 开发板上运行。  

    希望这对您有所帮助、

    拉斐尔

    e2e.ti.com/.../Relocation_5F00_test_5F00_A9.zip 

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

    谢谢 Rafael。