主题中讨论的其他器件:MSP430FR59941
工具/软件:Code Composer Studio
尊敬的 Sirs:
有一个包含多个文件模块的工程、但需要将 main.obj 文件首先链接到主框架存储器中。
它所做的是有时将 main()放置在0x10000处,有时将较大的函数放置在0x10000处,将 main()放置得更远。
您能否查看链接 cmd 文件并对其进行修改以将 main.obj 放在首位?
谢谢
John
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.
工具/软件:Code Composer Studio
尊敬的 Sirs:
有一个包含多个文件模块的工程、但需要将 main.obj 文件首先链接到主框架存储器中。
它所做的是有时将 main()放置在0x10000处,有时将较大的函数放置在0x10000处,将 main()放置得更远。
您能否查看链接 cmd 文件并对其进行修改以将 main.obj 放在首位?
谢谢
John
谢谢、George:
现时的组别似乎均不合适,因此我加入本集团如下:
组(signature_SHAREDMEMORY)
{
ipesignature :{}/* IPE Signature *//
.jtagpassword :{} /* JTAG 密码 */
}> IPESIGNATURE
组(INITIALMEMORY)
{
main.obj (.text)
}>(FRAM | FRAM2)
.bss :{}> RAM /*全局和静态变量 */
.data :{}>RAM /*全局和静态变量 */
.TI.noinit :{}>RAM /* for #pragma noinit */
.stack :{}> RAM (高) /*软件系统堆栈 */
tinyram :{}> TINYRAM /* Tiny R
这会导致错误: 需要段类型(COPY、DSECT 或 NOLOAD)而不是".text"。
然后删除了导致其编译的(.text)、但 main()仍位于0x13d84。 链接命令文件的方式
由 CCS 自动生成。
我应该怎么做?
John
您好、George:
为了促进此解决方案、我将生成一个测试项目、其中包含 main.c、FuncA.c 和 FuncB.c 模块。
此项目已附加。 希望将 FuncA.obj 放置在 Fram 中、位置约为0x4800 (FRAM)、main 位于0x10000以上(FRAM2)。
我尝试了几条指令(标记为 John)、但没有一条指令实现了这一目的。
希望您能找到实现这一目标的方法。
谢谢、e2e.ti.com/.../TestLinkCmd-2_2D00_12_2D00_19B.zip
John
当你说...
[引用 user="John Moore39"]但需要将 main.obj 文件首先链接到主框架存储器[/quot]
假设您希望首先链接 main.obj 中的代码。 如果 main.obj 定义了任何数据、则该数据的分配不应更改。 这意味着、只有来自 main.obj 的.text 段需要特殊处理。
当你写的时候,你就在附近了。。。
[引用用户="John Moore39"]
[/报价]
写它...
.text { main.obj (.text) *(.text) } >> FRAM2 | FRAM
关于 CCS 自动生成链接器命令文件... 我知道它看起来是这样的。 一旦您告诉 CCS 您使用的是哪种处理器,它就会从类似的目录位置复制正确的链接器命令文件...
C:\ti\ccsv8\ccs_base\msp430\include
谢谢、此致、
乔治
e2e.ti.com/.../8863.TestLinkCmd-2_2D00_12_2D00_19B.zipThanks、George:
这还不适用于实际项目、因此返回到所附的 TestLinkCfg 测试项目。
希望 main 从>0x10000开始、AFE 从0x4800开始。
结果是:
这不运行:
.text
{
main.obj (.text)
*(.text)
}>> FRAM | FRAM2 //John/George
这将一切都置于低 FRAM 中:
.text
{
main.obj (.text)
*(.text)
}>> FRAM | FRAM2 //John/George
这会将 main 放置在0x4080、将 AFUN()放置在0x4104。 (希望 main 从>0x10000开始、AFE 从0x4800开始)
.text
{
FuncA.obj (.text)
*(.text)
}>> FRAM | FRAM2 // John/George
此项目作为压缩文件附加。
谢谢、
John
[引用用户="John Moore55926"]希望 main 从>0x10000开始,AFE 从0x4800开始。
在 SECTIONS 指令的开头添加这两行...
.text:main > 0x10000 .text:AFun > 0x4800
第一行创建一个名为.text:main 的输出段。 它将所有输入段与同名匹配。 只有一个这样的输入段、它来自 main.obj。 它被分配给硬编码地址0x10000。 第二行执行同样的操作、但对于功能 AFE。
与硬编码地址不同,在命令文件中更早地创建#define 名称可能更有意义...
#define FRAM2_START 0x10000 #define ANALE_NAME 0x4800
然后使用它们。 在出现0x10000的地方、将其替换为 FRAM2_START。 它使代码能够自我记录。 而且、如果 FRAM2的开始发生变化(非常不可能、但可能)、那么您只需在一个位置进行更改。
谢谢、此致、
乔治
e2e.ti.com/.../lnk_5F00_msp430fr5994.zipHiGeorge:
嗯、这在实际项目中不起作用。 相反、它在0x8184放置 main、在0xdd8c 放置 AFun。
相信代码小于64k、那么链接器可能没有使用大型模型??
附件是压缩的链接命令文件。
John
更改此行...
.text:AFun > 0x4800
类似于...
output_section_for_functions { *(.text:AFun) *(.text:BFunc) }> 0x4800
这将创建一个名为 output_section_for_functions 的输出段。 它按顺序包含所有名为.text:AFunc 的输入段以及所有名为.text:BFunc 的输入段。 但每个此类输入段中只有一个。
谢谢、此致、
乔治