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/OMAP-L138:巨大的 COFF .out 文件

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/750104/ccs-omap-l138-huge-coff-out-file

器件型号:OMAP-L138

工具/软件:Code Composer Studio

您好!

我的项目在 OMAP-L138的 C674x 侧运行 NDK,输出文件始终约为300KB。  

最近我向其添加了 http 服务器支持。 输出文件非常大! 现在大约为26MB!  

我没有对 linker.cmd 文件进行任何更改或添加任何内容。

我认为这是具有.far 段的内容。 出于某种原因、我不知道为什么、它在 .far 段中插入填充大小为0x17e4bae 且填充了"A"的填充。

以下是% ofd6x - obj_display=none、sections MyApp.out 的输出

目标文件:MyApp.out

段信息

ID 名称 加载 addr run addr 大小对齐 alloc
---- ------ ---- ------ ----
1 $build.attributes 0x00000000 0x00000000 0x24 1 N
2 .stack 0xc17e4bb0 0xc17e4bb0 0x100000 8年
3.bss 0xc1938e00 0xc1938e00 0x2cc 8年
4 .cinit 0xc1935a40 0xc1935a40 0x2e24 8年
5.Pinit 0x00000000 0x00000000 0x0 1 N
6.数据 0xC0000000 0xC0000000 0x0 1年
7 .sysmem 0x00000000 0x00000000 0x0 1 N
8 .args 0xC0000000 0xC0000000 0x0 4 N
9 xdc.meta 0xC0000000 0xC0000000 0xe7 8 N
10 .text:_c_int00 0x80010000 0x80010000 0xe0 32 Y
11 .debug_info 0x00000000 0x00000000 0xf2c2a 1 N
12 .debug_frame 0x00000000 0x00000000 0x44e9 1 N
13 .debug_line 0x00000000 0x00000000 0x14596 1 N
14 .text 0xc18e4bc0 0xc18e4bc0 0x47120 32 Y
15 .const.1 0xc18e4bb0 0xc18e4bb0 0x10 4年
16 .const.2 0xc192bce0 0xc192bce0 0x9d5e 8年
17.switch 0xc1938864 0xc1938864 0x37c 4年
18 .far 0xC0000000 0xC0000000 0x17e4bae 128 Y
19 .cio 0xc19390cc 0xc19390cc 0x120 4年
20 .vecs 0xc1938c00 0xc1938c00 0x200 1024 Y
21 .debug_Abbrev 0x00000000 0x00000000 0xC3e 1 N

在% ofd6x -x -g MyApp.out 的输出中、.far 段填充了大约3、000万"A"  

.far 
0x12 
0xC0000000 
0xC0000000 
0x17e4bae 
0x0 
0x0 
0x1. 
0x80 
对 

0x15fce4 
0x0 
0x0 


AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

CCS 5.3

CGT 7.4.1

XDC 3.24.5.48

SYS/BIOS 6.34.2.18

NDK 2.21.0.32

有什么建议吗?

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

    [引用 user="Aidin Haddadi"]它在 .far 段中插入填充大小为0x17e4bae 的填充值

    您在 OFD XML 文件中看到的不是实际的二进制值、而是这些二进制值的 MIME base64编码。  字符 A 表示二进制值0。  因此、.far 段会用值0填充大量字节。

    far 段未初始化。 但在您的情况下、它会被初始化并填充为0。  通常情况下、这是因为一个目标文件中名为.far 的某些输入段已初始化。  我们需要找出哪个目标文件提供这个已初始化的.far 段。

    请将您的地图文件附加到下一个帖子。  因此论坛将接受它、添加文件扩展名.txt

    谢谢、此致、

    乔治

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

    你(们)好

    非常感谢您的快速回复。 far 段中的每一行都有[fill = 0]。

    e2e.ti.com/.../MyApp.map.txte2e.ti.com/.../linker.cmd.txt

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

    输出段.far 中的所有输入段都显示[fill = 0],除了这个...

    c179cb80 0001b706 webpage.obj (.far:NDK_OBJMEM) 

    文件 webpage.c (或可能是 webpage.cpp)中的输入段已初始化。  请检查它并找出发生这种情况的原因。

    这个初始化的输入段是导致.far 输出段被初始化的部分、这意味着它中所有其他未初始化的输入段都用0填充。

    谢谢、此致、

    乔治

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

    在 NDK http 服务器添加到项目中的 webdirect.c 文件中、有包含 Web 数据和 DATA_SECTION 指令的头文件:

    #pragma DATA_SECTION (默认值、".far:NDK_OBJMEM");
    #include 
    #pragma DATA_SECTION (LOGOBAR、".far:NDK_OBJMEM");
    #include 
    

    我删除了  

    #pragma DATA_SECTION 

    行和.out 文件大小恢复为正常范围。 到目前为止、该应用还可以在目标上正常工作。

    这些是 NDK 样片。 为什么会发生这种情况?

    更新:

    我的应用程序只能在目标上的调试模式下正常工作。 当我使用 ASIgen 创建.bin 并将其刷写到 SPI 闪存中时、某些功能将无法正常工作。  

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

    要说明的是、您的应用在通过 JTAG 加载时工作正常、但在从 SPI 闪存引导时不工作吗?
    如果是这种情况、您能否创建一个包含 AISgen 配置和引导设置详细信息的新线程?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你(们)好

    [引用 USER="Sahin Okur)]要说明,您的应用程序在通过 JTAG 加载时工作正常,但在从 SPI 闪存引导时不工作吗? [/报价]

    是的、这正是我的意思。

    [报价用户="Sahin Okur"]您能否创建一个包含 AISgen 配置和引导设置详细信息的新线程?

    好的、我会的。

    但是这些#pragma 会对应用程序做什么?

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

    Aidin、您好!

    该 pragma 用于定义 NDK 使用的一些特殊存储器段。 ".far:NDK_OBJMEM"部分是其他大型数据缓冲区声明的全部内容。 它被示例应用程序代码和 OS 适配层(用于打印缓冲区)使用。 更多信息、请参阅 NDK 用户指南的第3.1.3节。

    您可以尝试将段放置在.far 以外的其他存储器段中吗?  

x 出现错误。请重试或与管理员联系。