工具/软件:Code Composer Studio
大家好、
我使用 TMS320F28069已经有几年了(非常高兴)!!
当我开始时、我使用了"非对称 PWM"示例、并更改了 Main.c.
现在、我的代码行号会增加、并且"程序将无法放入"错误代码库。
我知道问题出在内存分配(F2806x_FLASH_AsymmetricPWM.CMD 文件)中、
但我不知道如何修改它。
请有人可以帮助我吗??
非常感谢
Nicola
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
大家好、
我使用 TMS320F28069已经有几年了(非常高兴)!!
当我开始时、我使用了"非对称 PWM"示例、并更改了 Main.c.
现在、我的代码行号会增加、并且"程序将无法放入"错误代码库。
我知道问题出在内存分配(F2806x_FLASH_AsymmetricPWM.CMD 文件)中、
但我不知道如何修改它。
请有人可以帮助我吗??
非常感谢
Nicola
您好!
您可能需要更新链接器 cmd 文件以增加文本段的大小。
谢谢
Vasudha
尊敬的 Vasudha:
感谢您的回复、
我已经研究了第0页内存分配、并且我了解(也许) 从0x3F0000到 0x3F4000的内存是空的。
因此、我更改了一行(以黄色突出显示)、并且我也增加了闪存存储器分配和长度。
我是对的吗?
谢谢你
============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================ *
/*用于从闪存运行的用户特定链接器命令文件*/
============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================ *
/*文件:F2806X_FLASH_AsymmetricPWM.CMD
/**//
/*说明:链接器命令文件、用于目标为运行的用户自定义段*
/*来自闪存。 *
/**//
/*目标:TMS320F2806x *
/**//
/*版本:1.0 */
/**//
/*------------------ *
//版权所有德州仪器2010 */
/*------------------ *
/*修订历史记录:*/
/*------------------ *
/*日期|说明*/
/*------------------ *
/* 01/11/11|版本1.0 */
/*------------------ *
/*定义 F2806x 的内存块开始/长度
PAGE 0将用于组织程序段
第1页将用于组织数据段
注:
F2806x 上的存储器块是一致的(即相同的
物理存储器)。
不应该是相同的存储器区域
同时为 PAGE 0和 PAGE 1定义。
这样做将导致程序损坏
和/或数据。
L0存储器块被镜像-即
它可以在高内存或低内存中访问。
为简单起见、其中仅使用了一个实例
链接器文件。
可以是连续的 SARAM 存储器块或闪存扇区
组合在一起以创建更大的存储器块。
*
存储器
{
第0页:
/*程序存储器*/
/*内存(RAM/FLASH/OTP)块可移动到第1页进行数据分配*/
BOOT_RSVD:origin = 0x000000,length = 0x000050 // M0的一部分,引导 ROM 将此用于栈*/
程序:origin = 0x008000、length = 0x000C00
OTP:origin = 0x3D7800,length = 0x000400 //片上 OTP */
FLASHH:origin = 0x3D8000,length = 0x004000 //片上闪存*/
FLASHG:origin = 0x3DC000、length = 0x004000 //片上闪存*/
FLASHF:origin = 0x3E0000,length = 0x004000 //片上闪存*/
FLASHE:origin = 0x3E4000、length = 0x004000 //片上闪存*/
FLASHD:origin = 0x3E8000、length = 0x004000 //片上闪存*/
FLASHC:origin = 0x3EC000,length = 0x004000 //片上闪存*/
// FLASHA:origin = 0x3F4000,length = 0x003F80 //片上闪存*/
FLASHA:origin = 0x3F0000,length = 0x007F80 //片上闪存*/ //我已更改此行以增加内存分配
csm_RSVD:origin = 0x3F7F80,length = 0x000076 // FLASHA 的一部分。 当 CSM 正在使用时、使用所有0x0000进行编程。 *
begin:origin = 0x3F7FF6,length = 0x000002/* FLASHA 的一部分。 用于"引导至闪存"引导加载程序模式。 *
CSM_PWL:origin = 0x3F7FF8,length = 0x000008 // FLASHA 的一部分。 FLASHA 中的 CSM 密码位置*/
FPUTABLES:origin = 0x3FD860,length = 0x0006A0 //引导 ROM 中的 FPU 表*/
IQTABLES:origin = 0x3FDF00,length = 0x000B50 //引导 ROM 中的 IQMath 表*
IQTABLES2:origin = 0x3FEA50,length = 0x00008C //引导 ROM 中的 IQMath 表*
IQTABLES3:origin = 0x3FEADC,length = 0x0000AA /*引导 ROM 中的 IQMath 表*/
BootROM:origin = 0x3FF3B0,length = 0x000C10 // Boot ROM */
复位:origin = 0x3FFFC0,length = 0x000002 //引导 ROM 的部分*/
向量:origin = 0x3FFFC2,length = 0x00003E //引导 ROM 的部分*/
第1页:
/*数据存储器*/
/*内存(RAM/FLASK/OTP)块可被移动至 PAGE0以进行程序分配*/
/*寄存器保留在第1页中*/
RAMM0:origin = 0x000050、length = 0x0003B0 //片上 RAM 块 M0 *
RAMM1:origin = 0x000400、length = 0x000400 //片上 RAM 块 M1 *
DataRAM:origin = 0x008C00,length = 0x001400
RAML4:origin = 0x00A000、length = 0x002000 //片上 RAM 块 L4 */
RAML5:origin = 0x00C000、length = 0x002000 //片上 RAM 块 L5 */
RAML6:origin = 0x00E000、length = 0x002000 //片上 RAM 块 L6 */
RAML7:origin = 0x010000、length = 0x002000 //片上 RAM 块 L7 */
RAML8:origin = 0x012000,length = 0x002000 //片上 RAM 块 L8 */
FLASHB:origin = 0x3F4000,length = 0x002000
}
部分
{
/*分配计划领域:*/
.cinit:> FLASHA,page = 0
.pinit:> FLASHA,page = 0
.text:> FLASHA,page = 0
.sect "SINTBL":> FLASHA,PAGE = 0
codestart:> begin page = 0
ramfuncs:load = FLASHA,
运行=程序、
load_start (_RamfuncsLoadStart)、
load_end (_RamfuncsLoadEnd)、
run_start (_RamfuncsRunStart)、
PAGE = 0
csmpasswds:>csm_PWL page = 0
csm_rsvd:>csm_RSVD page = 0
/*分配未初始化的数据段:*/
.stack:>RAMM0,page = 1.
.ebss:> DataRAM,page = 1.
.esysmem:> DataRAM,page = 1.
/*初始化段进入闪存*/
/*要使 SDFlash 对这些内容进行编程、必须将它们分配到第0页*/
econst:> FLASHA PAGE = 0
.switch:> FLASHA PAGE = 0
/*分配 IQ 数学区域:*/
IQMath:> FLASHA page = 0 /*数学代码*/
IQmathTables:> IQTABLES page = 0,type = NoLoad /* ROM 中的数学表*/
/*如果调用 IQNexp()或 IQexp(),请取消注释以下部分
库中的函数、以便利用
引导 ROM 中的相关 IQ Math 表(这可以节省空间和引导 ROM
1个等待状态)。 如果此部分未注释、则为 IQmathTables2
将被加载到其他存储器(SARAM、闪存等)中并将采用
上行空间、但0等待状态是可能的。
*
/*
IQmathTables2:> IQTABLES2,PAGE = 0,TYPE = NOLOAD
{
IQMath.lib (IQmathTablesRam)
}
*
/*如果调用 IQNasin ()或 IQasin (),请取消注释以下部分
库中的函数、以便利用
引导 ROM 中的相关 IQ Math 表(这可以节省空间和引导 ROM
1个等待状态)。 如果此部分未注释、则为 IQmathTables2
将被加载到其他存储器(SARAM、闪存等)中并将采用
上行空间、但0等待状态是可能的。
*
/*
IQmathTables3:> IQTABLES3,PAGE = 0,TYPE = NOLOAD
{
IQMath.lib (IQmathTablesRam)
}
*
.reset:> reset,page = 0,type = DSECT
VECTORS:> VECTORS PAGE = 0,TYPE = DSECT
}
部分
{
net_termins:> DataRAM、page = 1.
}
尊敬的 Vasudha:
非常感谢您的回复、这让我能够继续进行 FW 开发。
但我还有一个疑问、为什么必须移除闪存 B 行?
没有 Page0和 Page1 不同的区域位置?
在非对称 PWM 示例中、有:
第0页:
/*程序存储器*/
/*内存(RAM/FLASH/OTP)块可移动到第1页进行数据分配*/
BOOT_RSVD:origin = 0x000000,length = 0x000050 // M0的一部分,引导 ROM 将此用于栈*/
程序:origin = 0x008000、length = 0x000C00
OTP:origin = 0x3D7800,length = 0x000400 //片上 OTP */
FLASHH:origin = 0x3D8000,length = 0x004000 //片上闪存*/
FLASHG:origin = 0x3DC000、length = 0x004000 //片上闪存*/
FLASHF:origin = 0x3E0000,length = 0x004000 //片上闪存*/
FLASHE:origin = 0x3E4000、length = 0x004000 //片上闪存*/
FLASHD:origin = 0x3E8000、length = 0x004000 //片上闪存*/
FLASHC:origin = 0x3EC000,length = 0x004000 //片上闪存*/
FLASHA:origin = 0x3F4000,length = 0x003F80 //片上闪存*/
csm_RSVD:origin = 0x3F7F80,length = 0x000076 // FLASHA 的一部分。 当 CSM 正在使用时、使用所有0x0000进行编程。 *
begin:origin = 0x3F7FF6,length = 0x000002/* FLASHA 的一部分。 用于"引导至闪存"引导加载程序模式。 *
CSM_PWL:origin = 0x3F7FF8,length = 0x000008 // FLASHA 的一部分。 FLASHA 中的 CSM 密码位置*/
FPUTABLES:origin = 0x3FD860,length = 0x0006A0 //引导 ROM 中的 FPU 表*/
IQTABLES:origin = 0x3FDF00,length = 0x000B50 //引导 ROM 中的 IQMath 表*
IQTABLES2:origin = 0x3FEA50,length = 0x00008C //引导 ROM 中的 IQMath 表*
IQTABLES3:origin = 0x3FEADC,length = 0x0000AA /*引导 ROM 中的 IQMath 表*/
BootROM:origin = 0x3FF3B0,length = 0x000C10 // Boot ROM */
复位:origin = 0x3FFFC0,length = 0x000002 //引导 ROM 的部分*/
向量:origin = 0x3FFFC2,length = 0x00003E //引导 ROM 的部分*/
第1页:
/*数据存储器*/
/*内存(RAM/FLASK/OTP)块可被移动至 PAGE0以进行程序分配*/
/*寄存器保留在第1页中*/
RAMM0:origin = 0x000050、length = 0x0003B0 //片上 RAM 块 M0 *
RAMM1:origin = 0x000400、length = 0x000400 //片上 RAM 块 M1 *
DataRAM:origin = 0x008C00,length = 0x001400
RAML4:origin = 0x00A000、length = 0x002000 //片上 RAM 块 L4 */
RAML5:origin = 0x00C000、length = 0x002000 //片上 RAM 块 L5 */
RAML6:origin = 0x00E000、length = 0x002000 //片上 RAM 块 L6 */
RAML7:origin = 0x010000、length = 0x002000 //片上 RAM 块 L7 */
RAML8:origin = 0x012000,length = 0x002000 //片上 RAM 块 L8 */
FLASHB:origin = 0x3F4000,length = 0x002000
}
FLASHA 和 FLASHB 同时声明且具有相同的原点。
很抱歉、所有这些问题都需要我正确理解
这一点。
非常感谢
Nicola Giuffrè í a
您好!
器件中有不同的闪存扇区、它们具有预定义的大小、如下图所示。
您已经将闪存 A 和闪存 B 区域组合成一个区域、因为它们是连续区域。 但是、在链接器命令文件中不可能出现区域重叠。 因此、需要从数据页中删除闪存 B 存储器区域。 可能会有助于将更新后的存储器部分重命名为 FlashA_B、以便更好地理解。
// FLASHA:origin = 0x3F4000,length = 0x003F80 //片上闪存*// FLASHB:origin = 0x3F0000,length = 0x004000 FLASHA_B:origin = 0x3F0000,length = 0x007F80 //片上闪存* //我已更改此行以增加内存分配
谢谢
Vasudha