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.

[参考译文] TMS320F28027:程序无法放入可用的存储器中、或者该段包含一个调用点、该调用点需要能够为该段生成't 的蹦床函数。 对于段".econst"大小为 0x100 第 1 页、带有对齐/分块的放置失败

Guru**** 2434370 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1527793/tms320f28027-program-will-not-fit-into-available-memory-or-the-section-contains-a-call-site-that-requires-a-trampoline-that-can-t-be-generated-for-this-section-placement-with-alignment-blocking-fails-for-section-econst-size-0

器件型号:TMS320F28027

工具/软件:

引导我扩展存储器、为了便于参考、我在这里添加了.cmd 文件。

“../28027_RAM_lnk.cmd",“,第、第 123 行:错误#10099-D:程序将无法放入可用的存储器中、或者该段包含一个需要无法为该段生成的蹦床函数的调用站点。 对于段“.econst"大小“大小 0x100 第 1 页、带有对齐/分块的放置失败。 可用存储器范围:
DRAML0 大小:0x700 未使用:0xf8 最大孔:0xf7


移动数据

第 0 页:
/*在本示例中、L0 在页 0 和页 1 之间拆分*/
/* BEGIN 用于“引导至 SARAM“引导加载程序模式*/

begin:origin = 0x000000、length = 0x000002
RAMM0:原点= 0x000050、长度= 0x0003B0
PRAML0:origin = 0x008000、length = 0x000999
Reset:origin = 0x3FFFC0、length = 0x000002

IQTABLES:origin = 0x3FE000、length = 0x000B50 /* Boot ROM 中的 IQ 数学表*/
IQTABLES2:origin = 0x3FEB50、length = 0x00008C /* Boot ROM 中的 IQ 数学表*/
IQTABLES3:origin = 0x3FEBDC、length = 0x0000AA /* Boot ROM 中的 IQ 数学表*/

BootROM:origin = 0x3FF27C、长度= 0x000D44
FLASHB_D:origin = 0x3F0000、length = 0x006000 /*片上闪存 B、C 和 D */
D_FLASHA:origin = 0x3F6000、length = 0x001F80 /*片上闪存 A */

第 1 页:

/*在本示例中、L0 在页 0 和页 1 之间拆分*/
BOOT_RSVD:origin = 0x000002、length = 0x00004E /* M0 的一部分、引导 ROM 将对堆栈使用此值*/
RAMM1:origin = 0x000400、length = 0x000400 /*片上 RAM 块 M1 */
DRAML0:原点= 0x008999、长度= 0x000700
}


很重要

/*“引导至 SARAM“模式的设置:
codestart 段(位于 DSP28_CodeStartBranch.asm 中)
将执行重定向到用户代码的开头。 */
codestart:> begin、page = 0
ramfuncs :> RAMM0 page = 0
.text:> FLASHB_D、page = 0
.cinit:> FLASHB_D、PAGE = 0
.pinit:> FLASHB_D PAGE = 0
.switch:> RAMM0、page = 0
.reset:> reset、page =0、type = DSECT /*未使用、*/

.stack :> RAMM1, page = 1.
.ebss :> DRAML0, page = 1.
.econst:> DRAML0、PAGE = 1
.esysmem :> RAMM1, page = 1.

IQMath:> PRAML0、PAGE = 0
IQmathTables:> IQTABLES、PAGE = 0、TYPE = NOLOAD
// IQmathTables:load = IQTABLES、page = 0、type = noLoad

/*如果调用 IQNexp() 或 IQexp()、则取消注释以下部分
IQmath.lib 库中的函数、以便利用
引导 ROM 中的相关 IQ 数学表(这可以节省空间和引导 ROM
为 1 等待状态)。 如果未取消注释此部分、则为 IQmathTables2
将加载到其他存储器(SARAM,闪存等)并存储数据
可增加空间、但等待状态为 0。
*/

/* IQmathTables2 :> IQTABLES2, page = 0, type = noLoad

IQmath.lib (IQmathTablesRam)

}*/

/*如果调用 IQNasin() 或 IQasin()、则取消注释以下部分
IQmath.lib 库中的函数、以便利用
引导 ROM 中的相关 IQ 数学表(这可以节省空间和引导 ROM
为 1 等待状态)。 如果未取消注释此部分、则为 IQmathTables2
将加载到其他存储器(SARAM,闪存等)并存储数据
可增加空间、但等待状态为 0。
*/

/* IQmathTables3 :> IQTABLES3, page = 0, type = noLoad

IQmath.lib (IQmathTablesRam)

}*/

}

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

    尊敬的 Ramya:

    我看到该错误与没有空间将 econst 变量分配给 DRAML0 有关。  

    如果您需要在 DRAML0 中运行 econst、我认为您需要从第 0 页的 PRAML0 占用更多内存并增加 DRAML0 大小。

    或者、您需要删除映射到 DRAML0 的项目、例如 ebss。

    问题是 econst 无法容纳在 DRAML0 中、因此我们需要添加更多内存。

    谢谢

    Aswin

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

    您好、Aswin、

    感谢您的回答、

    我们使用闪存解决了问题。 我们喜欢使用数据帧存储器区域、特别是外设帧 0、1 和 2。 我们如何访问这些存储器区域?“

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

    您好、  

    外设帧用于外设寄存器、不能将.econst 段存储在这些内存寄存器中。  

    此致

    Siddharth