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.

[参考译文] TMS320F280041:段声明被忽略、带有"警告#10068-D:没有匹配的段"

Guru**** 2533950 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1193542/tms320f280041-section-declaration-is-ignored-with-warning-10068-d-no-matching-section

器件型号:TMS320F280041

你好。  

最初、我尝试将标准库放在工具链21.06.0 LTS 版本的单独闪存部分中。  
它起了作用。  
但是、降级到20.2.5工具链后、会忽略 placement 语句、并显示以下错误:  

"/home/eugensoldatenko/work/lv/F280041.cmd", line 110: warning #10068-D:
   no matching section
        --library=libc.a<*>(.text)


因此、标准库符号会在不可预测的位置自动分配。  

链接器命令文件:  
 

//代码区域校验和
#ifdef app_crc
_appl_cs_val = app_crc;
其他
/*_appl_cs_val = 0x6FFF;*/
_appl_cs_val = 0x487d;
#endif
#ifdef boot_crc
boot_cs_val = boot_crc;
其他
/*_boot_cs_val = 0x0FFF;*
_boot_cs_val = 0x3026;
#endif

/*-l f28004x_headers_nonbios.cmd */

存储器

第0页:
RAMLS0:origin = 0x008000、length = 0x000800
/*闪存扇区:当 RAM 被填满时,您可以将闪存用于程序存储器*/
/*组0 */
FLASH_BOOT_JMP:origin = 0x080000,length = 0x000010 //代码入口位置*/
FLASH_BOOT_SEC0:origin = 0x080010、length = 0x001FB0 //片上闪存*
FLASH_BOOT_UPDATE_FLAG:origin = 0x081FC0,length = 0x00003D //固件更新标志,在64位边界上对齐*/
FLASH_BOOT_CS:origin = 0x081FFD,length = 0x000001 //片上闪存*/

/*闪存扇区从2到15 */
FLASH_stdlib:origin = 0x082000、length = 0x001FFD
begin:origin = 0x083FFE,length = 0x000002/*片上闪存*/
FLASH_APP_JMP:origin = 0x084000,length = 0x000004 /*代码入口位置*/
FLASH_APP_SEC0:origin = 0x084004、length = 0x001551 //片上闪存*
FLASH_5555:origin = 0x085555,length = 0x000020 //片上闪存 UL PC test *
FLASH_APP_SEC1:origin = 0x085575,length = 0x005535 //片上闪存*
FLASH_AAAA:origin = 0x08AAAA、length = 0x000020 //片上闪存 UL PC test *
FLASH_APP_SEC2:origin = 0x08AACA、length = 0x00550C //片上闪存*
FLASH_APP_GITHASH:origin = 0x08FFD6,length = 0x000029 //片上闪存*
FLASH_APP_CS:origin = 0x08FFFF,length = 0x000001 //片上闪存*/
复位:origin = 0x3FFFC0,length = 0x000040
第1页:
/* RAM 扇区*/

BOOT_RSVD:origin = 0x000000,length = 0x000080 // M0的一部分,引导 ROM 将此用于栈*/
RAMM0:origin = 0x000080,length = 0x000380 //片上 RAM 块 M0 */
RAMM1:origin = 0x000400、length = 0x0003E8 //片上 RAM 块 M1 *
RAMM1ul:origin = 0x0007E8,length = 0x000010 // ul ram test RAM block M1
// RAMM1_RSVD:origin = 0x0007F8,length = 0x000008 //根据勘误咨询“Memory:Prepetching Beyond valid Memory”(内存:超出有效内存的预取),保留并不用于代码*/
RAMLS1_6:origin = 0x008800,length = 0x003000

RAMGS0:origin = 0x00C000、length = 0x002000
RAMGS1:origin = 0x00E000、length = 0x002000
RAMGS2:origin = 0x010000、length = 0x002000
RAMGS3:origin = 0x012000,length = 0x001FF8
// RAMGS3_RSVD:origin = 0x013FF8,length = 0x000008 //根据勘误咨询“Memory:Prepetching Beyond valid Memory”(内存:有效内存之外的预取)来保留代码且不用于代码*/

第2页://针对代码和变量的引导 RAM (区域上方的覆盖层)
BOOT_RAM:origin = 0x008000、length = 0x004000 //对于引导代码和变量(L0-L7) RAM
// RAMGS3_RSVD:origin = 0x013FF8,length = 0x000008 //根据勘误咨询“Memory:Prepetching Beyond valid Memory”(内存:有效内存之外的预取)来保留代码且不用于代码*/

第3页://引导初始化、只是常量

M01START:origin = 0x000080,length = 0x000780
M01END:origin = 0x000800,length = 0x01
L07START:origin = 0x008800,length = 0x001800
L07END:origin = 0x00A000,length = 0x01

BOOTSTART:origin = 0x080000,length = 0x002000
BOOTEND:origin = 0x082000,length = 0x01

第4页://引导初始化继续,只是常量
APPLSTART:origin = 0x084000,length = 0x00B000
APPLEND:origin = 0x090000,length = 0x01

/*当 RAM 被填满时,您可以将.text、.cinit、.const、.pinit、.switch 和.econst 排列到闪存中。*/
部分

appentry:> flash_app_jmp page = 0 //必须从 FLAShapp 开始!
boot_cs:> flash_boot_cs,page = 0
codestart:> begin,page = 0
Githash:> FLASH_APP_GITHASH PAGE = 0
appl_cs:> flash_app_cs page = 0
.cinit:> flash_app_SEC0,page = 0
.pinit:> flash_app_SEC0,page = 0
.text:>> flash_app_SEC0 | flash_app_SEC1 | flash_app_sec2,page = 0
text_AAAA:> FLASH_AAAA PAGE = 0
text_5555:> flash_5555 page = 0
switch:> flash_app_SEC0,page = 0
.reset:> reset,page = 0,type = DSECT //未使用,*/
binit:> flash_stdlib,page = 0

//在 RAM 中运行引导代码
bootentry :> flash_boot_jmp page = 0 //引导代码跳转表
btext:> flash_boot_SEC0 page = 0 //启动代码启动
bootconst:load = flash_boot_SEC0 page = 0,//闪存中的通信常量,然后加载到 ram 中
运行= BOOT_RAM PAGE = 2、// RAM 加载区域
load_start (_BootconstLoadStart)、//常量开始(闪存地址)
load_end (_BootconstLoadEnd)、//常数结束(闪存地址)
run_start (_BootconstRunStart)//运行启动(RAM 地址)
bootfuncs:load = flash_boot_SEC0 page = 0,
运行= BOOT_RAM PAGE = 2、
load_start (_BootfuncsLoadStart)、
load_end (_BootfuncsLoadEnd)、
run_start (_BootfuncsRunStart)

stdlib

--library=libc.a<*>(.text)
}> FLASH_stdlib、PAGE = 0

GROUP (BSS_HELAG_GROUP ):>RAMLS1_6

.ebss:{}
esysmem:{}

rtext:> flash_app_sec2 page = 0 // 这是传统还是电流? 似乎什么都不做
ramfuncs:load = flash_app_sec2 page = 0,
运行= RAMGS0页= 1、
load_start (_RamfuncsLoadStart)、
load_end (_RamfuncsLoadEnd)、
run_start (_RamfuncsRunStart)

.TI.ramfunc:load = flash_app_SEC0,page = 0,align (4)
运行= RAMGS0、页= 1、
load_start (_TIRamfuncsLoadStart)、
load_size (_TIRamfuncsLoadSize)、
load_end (_TIRamfuncsLoadEnd)、
run_start (_TIRamfuncsRunStart)、
run_size (_TIRamfuncsRunSize)、
run_end (_TIRamfuncsRunEnd)、

表(BINIT)

ulbss:>RAMM1ul PAGE = 1// ul ram 测试数据存储
.stack:>RAMM0,page = 1.


.cio:>RAMLS0,page = 0
econst:>> flash_app_SEC0 | flash_app_SEC1 | flash_app_sec2,page = 0,align (4)

bss:> BOOT_RAM PAGE = 2.

RAMS0:>RAMGS0,PAGE = 1
ramgs1:>RAMGS1,page = 1.

//引导虚拟段
//由启动代码用于清除 RAM 和执行校验和
.dummy0:> M01START PAGE = 3{_ramm01_start =.;}
.dummy0e:> M01END page = 3{_ramm01_end =.;}
.dummy1:> L07START PAGE = 3 {_raml07_start =.;}
.dummy1e:> L07END page = 3{_raml07_end =.;}
.dummy2:> APPLSTART PAGE = 4 {_appl_start=.;}
.dummy2e:> APPLEND page = 4{_appl_end =.;}
.dummy3:> BOOTSTART PAGE = 3 {_BOOT_START =.;}
.dummy3E:> BOOTEND PAGE = 3 {_BOOT_END =.;}
.dummy4:>开始页面= 0{_code_start =.;}

/*
//============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
//文件结束。
//============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
*

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

    这意味着链接器无法从 libc.a 中找到任何.text 段

    libc.a 基本上是指向 rtsXXX.Lib 的索引库。 是否可以尝试使用 RTS 库名称而不是 libc.a?

    此致、

    Veena