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.

[参考译文] TMS320F280025C:#10099-D 段对齐/分块失败以及.quot;.const "即使有足够的存储器

Guru**** 2399305 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1269214/tms320f280025c-10099-d-placement-with-alignment-blocking-fails-for-section-const-even-though-there-is-enough-memory

器件型号:TMS320F280025C

你(们)好!

我收到主题行错误、并了解我的".const"大小已超过1个闪存存储体扇区的大小。 每个扇区大小为0x1000、而我编译的.const 大小显然为0x1004。 请参阅下面的存储器分配屏幕截图。 我正在做一堆打印类型的语句、其中我认为文本会占用大量的内存。

为了解决这个问题、我尝试用以下行增加分配的闪存大小: .const:>> FLASH_BANK0_SEC11| FLASH_BANK0_SEC12 | FLASH_BANK0_SEC13 | FLASH_BANK0_SEC14、ALIGN (8)  

(请在该问题的底部查看我的完整链接器文件)

即使分配了足够多的内存(4个扇区)、这也无法修复错误。 我认为它可能与连续要求/对齐(8)有什么关系? 我可以在链接器/程序文件中修改一下吗、将其拆分为多个可用扇区?  

提前感谢您的帮助、

内存
{
begin:origin = 0x080000、length = 0x000002
BOOT_RSVD:origin = 0x00000002、length = 0x00000126
RAMM0:origin = 0x00000128、length = 0x000002D8
RAMM1:origin = 0x00000400、length = 0x000003F8 /*片上 RAM 块 M1 */
// RAMM1_RSVD:origin = 0x000007F8,length = 0x00000008 /*根据勘误建议"存储器:预取超出有效存储器"保留代码且不使用*/

RAMLS4:origin = 0x0000A000、length = 0x00000800
RAMLS5:origin = 0x0000A800、length = 0x00000800
RAMLS6:origin = 0x0000B000、length = 0x00000800
RAMLS7:origin = 0x0000B800、length = 0x00000800

/*组合所有 LS RAM */
// RAMLS4567:origin = 0x0000A000,length = 0x00002000
RAMGS0:origin = 0x0000C000、length = 0x000007F8
// RAMGS0_RSVD:origin = 0x0000C7F8,length = 0x00000008 /*保留且不使用勘误建议"存储器:预取超出有效存储器"中的代码*/


// FLASHBANK1:origin = 0x00080000,length = 0x0000FFF0
// FLASH_BANK1_RSVD:origin = 0x0008FFF0,length = 0x00000010 /*根据勘误建议"存储器:预取超出有效存储器",保留代码,且不用于此代码*/
BootROM:origin = 0x003F0000、length = 0x00008000
BootROM_EXT:origin = 0x003F8000、length = 0x00007FC0
复位:origin = 0x003FFFC0、length = 0x00000002
/*闪存扇区*/
/*组0 */
FLASH_BANK0_SEC0:origin = 0x080002、length = 0x000FFE /*片上闪存*/
FLASH_BANK0_SEC1:origin = 0x081000、length = 0x001000 /*片上闪存*/
FLASH_BANK0_sec2:origin = 0x082000、length = 0x001000 /*片上闪存*/
FLASH_BANK0_SEC3:origin = 0x083000、length = 0x001000 /*片上闪存*/
FLASH_BANK0_SEC4:origin = 0x084000、length = 0x001000 /*片上闪存*/
FLASH_BANK0_SEC5:origin = 0x085000,length = 0x001000 /*片上闪存*/
FLASH_BANK0_SEC6:origin = 0x086000、length = 0x001000 /*片上闪存*/
FLASH_BANK0_sec7:origin = 0x087000、length = 0x001000 /*片上闪存*/
FLASH_BANK0_SEC8:origin = 0x088000、length = 0x001000 /*片上闪存*/
FLASH_BANK0_SEC9:origin = 0x089000、length = 0x001000 /*片上闪存*/
FLASH_BANK0_SEC10:origin = 0x08A000、length = 0x001000 /*片上闪存*/
FLASH_BANK0_SEC11:origin = 0x08B000、length = 0x001000 /*片上闪存*/
FLASH_BANK0_SEC12:origin = 0x08C000、length = 0x001000 /*片上闪存*/
FLASH_BANK0_SEC13:origin = 0x08D000、length = 0x001000 /*片上闪存*/
FLASH_BANK0_SEC14:origin = 0x08E000,length = 0x001000 /*片上闪存*/
FLASH_BANK0_SEC15:origin = 0x08F000、length = 0x000FF0 /*片上闪存*/
// FLASH_BANK0_SEC15_RSVD:origin = 0x08FFF0,length = 0x000010 /*保留代码,且不使用勘误建议"存储器:预取有效存储器之外的代码"*/


部分
{
codestart :> beging, align (8)
.text:>> FLASH_BANK0_sec2 | FLASH_BANK0_SEC3 | FLASH_BANK0_SEC4 | FLASH_BANK0_SEC5 | FLASH_BANK0_SEC6 | FLASH_BANK0_SEC7 | FLASH_BANK0_SEC8 | FLASH_BANK0_SEC9 | FLASH_BANK0_SEC6 | FLASH (0)、10
.cinit:> FLASH_BANK0_SEC0、align (8)
.switch:> FLASH_BANK0_SEC0、ALIGN (8)
.reset:> reset,type = DSECT /*未使用,*/

.stack:> RAMM1

//.init_array:> FLASH_BANK0_SEC1、ALIGN (8)//ss 因某种原因未使用
.bss :> RAMLS4
.bss:输出:> RAMLS4
bss:CIO:> RAMGS0
.const:>> FLASH_BANK0_SEC11| FLASH_BANK0_SEC12 | FLASH_BANK0_SEC13 | FLASH_BANK0_SEC14、ALIGN (8)  
.data :> RAMLS6
.sysmem :> RAMLS5

ramgs0:> RAMGS0

/*分配 IQ 数学领域:*/
IQMath :> RAMLS5
IQmathTables :> RAMLS5

.TI.ramfunc:load = FLASH_BANK0_SEC1、//WAS sec1
运行= RAMGS0、
Load_start (RamfuncsLoadStart)、
Load_Size (RamfuncsLoadSize)、
Load_End (RamfuncsLoadEnd)、
RUN_START (RamfuncsRunStart)、
RUN_SIZE (RamfuncsRunSize)、
RUN_END (RamfuncsRunEnd)、
对齐(8)


/*
//========================================
//文件结尾。
//========================================
*/

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

    周老师、您好!

    很抱歉耽误你的时间。  这项任务是今天分配给我的。   

    我认为这与 ALIGN (8)无关。

    您能否尝试合并几个扇区(如下面.const 大小所需)并将.cosnt 段映射到该存储器范围?

       FLASH_BANK0_SEC11_14:origin = 0x08B000、length = 0x004000 /*片上闪存*/

    谢谢。此致、
    瓦姆西

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

    尊敬的 Vamsi:

    感谢您提供的宝贵建议。 这起作用了! 有没有想过、我的将.const 传播到多个扇区的声明与你的声明有什么不同?

    无论哪种方式都对结果满意。

    再次感谢。

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

    Steve、

    在您的情况下、映射到.const 的内容可能是长度为0x10004的单个大型结构/表?  

    谢谢。此致、
    瓦姆西