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.

[参考译文] 编译器/F28M36P63C2:使用 NDK 时未分段.const 段

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/591256/compiler-f28m36p63c2-unintialised-const-section-when-using-ndk

器件型号:F28M36P63C2

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

在 F28M36 Concerto 的 M3内核上使用 TI-RTOS NDK 时遇到一些问题。

tcpecho 示例之后、我尝试按如下方式将 NDK 添加到.cfg 文件中。

/*========================= NDK 配置=================== *
VAR NDK      = XDC.loadPackage ('ti.NDK.config');
VAR Global   = xdc.useModule('ti.ndk.config.Global');
VAR IP       = xdc.useModule('ti.ndk.config.Ip');
VAR TCP      = xdc.useModule('ti.ndk.config.Tcp');
VAR UDP      = xdc.useModule('ti.ndk.config.Udp');

global.ipv6 = false;
global.stackLibType = Global. min;
Global.networkOpenHook ="&net_open_hook";

//自动调用 fdOpen/CloseSession 以执行套接字任务*/
Global.autoOpenCloseFD = true;

global.pktNumFrameBufs=10;
global.memRawPageCount = 6;
global.ndkThreadStackSize = 8192;
global.lowTaskStackSize = 1024;
Global.normTaskStackSize = 1024;
global.highTaskStackSize = 1024;
tcp.transmitBufSize = 1024;
tcp.receiveBufSize = 1024;

添加此项后、整个.const 段未初始化、这会由于.const 中任何内容的第一个取消引用崩溃而导致引导失败、这恰好是 XDC runtine Startup_Impexecl (即.const:XDC_RUNTIME_Startup_execImpl_C)用作指针时。

这是唯一做出的更改。 链接器.cmd 文件也没有变化。

如果.cfg 文件中没有 NDK、.map 文件会显示:

init_array
0            00218000   00000000    未初始化

.const    0   00227a80   0000233e
                 00227a80   00001840    prog_m3_pem3.oem3 (.const:XDC_runtime_text_charTab__a)

如果 NDK 位于.cfg 文件中:

init_array
0            00218000   00000000    未初始化

.const    0   0023364   00002554    未初始化
                 00233364   0000186f    prog_m3/pem3.oem3 (.const:XDC_runtime_text_charTab_A)
                 
导致此段未初始化的原因是什么、如何解决?

编译器为 ARM_15.12.3.LTS、TI-RTOS 版本为 tirtos_c2000_2_16_01_14。

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

    我刚刚使用 tirtos_c2000_2_16_01_14和 ARM_15.12.2.LTS 通过 CC6.2构建了 tcpEcho 示例。 已初始化.const (如预期)。 您对开箱即用示例进行了哪些更改? 以上行已在.cfg 文件中。

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

    您好 Todd、

    感谢您的回复。 该示例构建正常、但在将上述配置转置到我正在进行的工程中时、先前初始化的.const 段将变为未初始化。

    我对项目所做的唯一更改是添加此部分。 我已经检查了配置的其余部分是否存在差异、但除了一些分配大小等、基本上是相同的。

    我没有向代码中添加任何需要 NDK 的调用,甚至没有添加 EMAC_init()。 实际上、在我的项目中、唯一需要实现它的就是在.cfg 文件中添加行。 这似乎是我可以放置的最小配置:

    VAR NDK      = XDC.loadPackage ('ti.NDK.config');
    VAR Global   = xdc.useModule('ti.ndk.config.Global');
    VAR IP       = xdc.useModule('ti.ndk.config.Ip');

    global.memRawPageCount = 6;

    省略此处的任何行会导致未定义的符号链接器错误、或者(对于页数)无法放置.bss 段。 .const 始终未初始化。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这毫无意义。 您能否为附加映射文件和.cfg 文件
    不使用.cfg 中最后一个帖子中的4行
    由于.cfg 中最后一个帖子中的4行、.const 未初始化。