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.

[参考译文] 编译器:RTS.Lib与引入单独的文件(autoinit.c) auto_init_elf函数问题

Guru**** 2608275 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/633222/compiler-rts-lib-vs-bringing-in-separate-files-autoinit-c-auto_init_elf-function-problems

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

您好,

    我正在尝试将autoinit.c引入我的项目。  我成功构建。  我的链接程序顺序是autoinit.c,rts.lib,链接程序生成。  它加载到板上,但最终以abort()结束。  我在while循环中放置了一个索引计数器。  索引在发生故障时为1,默认为0,在构造函数调用后递增

unsigned int* x=0xEFFFFFF08; //几乎位于内存顶部。

*x=0;

While (&(__TI_INITARRAY_Base[I])!=__TI_INITARRAY_LIMIT)

{  

   __TI_INITARRAY_Base[I++]();

   (*x)++;

 }

第一次调用 我的全局 构造函数似乎返回正常,但第二次没有返回。  此中止中的NRP值为0x0000_0000。0000。   总共约有30至40个构造函数。  RTS库本身工作正常。  

  1.  你是否知道这是否已经过测试和有效?  它是否有失败的原因?   我的项目位于一台独立的计算机上; 请告诉我是否应该尝试创建一个示例项目(这可能不容易)。  

2. 假设我想使用auto_init更改重建RTS库。  为什么我看不到我的任意存储位置被填充。  我可以在重建的RTS.lib中使用printf()来完成此操作

设置:

Code Composer Studio 5.x

Big Endian,ELF格式。  添加 了隔离文件 auto_init.c所需的"__TI_EABI"标志,并在项目中执行auto_init_elf()函数。

CGT 7.3 .................23 (这是我从中获取RTS.src的位置)

起点:一种已投入使用的产品。  已知可成功引导并使用基本RTS库执行。  

     重建RTS库似乎可以正常工作,但我看不到全局指针填充 内存中的任意空间。  我证明我可以在printf.c文件中执行此操作,但在auto_init.c::auto_init_elf()中却没有。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    问题和修复是我正在使用XDC。 XDC和RTS都有auto_init文件和auto_init_elf函数。 崩溃很可能是由于在auto_init_elf中没有调用"XDC_startup"。

    问题已解决。 回答:如果您使用XDC工具,请使用autoinit.c,否则使用RTS。

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