工具/软件:TI C/C++编译器
您好,我遇到了一个不愉快的错误。
是的,这是非常具体的问题,但是...
在某些模式下,我的RAM中的数据会损坏。 这是随机损坏。
我找不到我在哪里做的事! 我有很多中断,这是一个大项目,但以前的项目是基于同一个程序,我没有遇到任何问题。
我正在使用--opt_level = 4;--opt_for _speed =5。
有我的内存链接(对于F2808):
内存
{
第0页:/*程序内存*/
/*内存(RAM/FLASE/OTP)块可移至Page1以进行数据分配*/
RAML0_1 :原点= 0x0.8万,长度= 0x0.2万 /*片上RAM块L0+L1!@ PVE 18.10 .........17 @! *
OTP :原点= 0x3D7800,长度= 0x0.04万 /*片上OTP */
FLASHD :原点= 0x3E8000,长度= 0x0.4万 /*片上闪存*/
FLASHC :原点= 0x3EC000,长度= 0x0.4万 /*片上闪存*/
FLASHA :原点= 0x3F4000,长度= 0x003F80 /*片上闪存*/
CSM_RSVD:原点= 0x3F7F80,长度= 0x0.0076万 /* FLASHA的一部分。 在使用CSM时使用所有0x0000编程。 */
开始 :原点= 0x3F7FF6,长度= 0x0.0002万 /* FLASHA的一部分。 用于“引导至闪存”引导加载程序模式。 */
CSM_PWL :原点= 0x3F7FF8,长度= 0x0.0008万 /* FLASHA的一部分。 FLASHA */中的CSM密码位置
ROM :原点= 0x3FF000,长度= 0x000FC0 /* Boot ROM */
reset :原点= 0x3FFFC0,长度= 0x0.0002万 /*引导ROM */
矢量的一部分 :原点= 0x3FFFC2,长度= 0x0.0003万E /*启动ROM的一部分*/
第1页:/*数据存储器*/
/*内存(RAM/FLASE/OTP)块可以移动到PAGE0以进行程序分配*/
/*寄存器保留在Page1上 */
RAMM0 :原始= 0x0万,长度= 0x0.04万 /*片上RAM块M0 */
BOOT_RSVD:Origin = 0x0.04万,length = 0x0.008万 /* M1的一部分,引导ROM将使用此堆栈*/
RAMM1 :原点= 0x0.048万,长度= 0x0.038万 /*片上RAM块M1 */
RAMH0 :原点= 0x00A000,长度= 0x0.1万 /*片上RAM块H0 (第一部分-用于数据)-复制到数据空间!@ PVE 18.10 16 @! */
RAMH0_F :原点= 0x00B000,长度= 0x0.1万 /*片上RAM块H0 (第二部分-用于过滤器)-复制到数据空间!@ PVE 18.10 16 @! *
FLASHB :原点= 0x3F0000,长度= 0x0.4万 /*片上闪存*/
}/*
将段分配给内存块。
注意:
DSP28_CodeStartBranch.asm中的codegstart用户定义部分用于重定向代码
引导至闪存时执行
ramfuncs用户定义的部分,用于存储将从Flash复制到RAM
*/
部分
{
/*分配计划领域:*/
.cinit :> FLASHA 页面= 0
。Pinit :> FLASHA, 页面= 0
.text :> FLASHA 页面= 0
代码开始 :>开始 页面= 0
ramfuncts :负载= FLASHD,
Run = RAML0_1,
load_start(_RamfuncsLoadStart),
load_end (_RamfuncsLoadEnd),
run_start(_RamfuncsRunStart),
页面= 0
csmpasswds :> CSM_PWL 页=0
csm_rsvd :> CSM_RSVD页面= 0
/*分配未初始化的数据段:*/
.stack :> RAMM0 页面= 1
.ebss :> RAMH0 页面= 1
个.esysmem :> RAMH0 Page = 1
firldb1 align (0x100)> RAMH0_F,page = 1
firldb2 align (0x100)> RAMH0_F,page = 1
firldb3 align (0x100)> RAMH0_F,page = 1
firldb4 align (0x100)> RAMH0_F,page =
1
align (0x100,首页 ) 页面= 1
firldb8 align(0x100)> RAMH0_F,页面= 1
firldb9 align(0x100)> RAMH0_F,页面= 1
firldb10 align(0x100)> RAMH0_F,页面= 1
/*初始化书帖进入Flash */*
要对这些进行编程,必须将它们分配到第0页*
.econst :> FLASHA 页面= 0
。switch :> FLASHA 页面= 0
/*分配IQ数学领域:*/
IQmath :> FLASHC 页面= 0 /*数学代码,FLASHC -原始位置*/
IQmathTables :> ROM Page =0,type = NoLoad /* ROM */*中的数学表
。reset是编译器使用的标准部分。 它包含
_c_int00 for C Code的起始地址*/*。 /*
/*使用引导ROM时
,不需要此部分和CPU矢量*/*表。 因此,默认类型在此处设置为*/*
DSECT */
.reset :>重置, Page =0,type = DSECT
引导程序 :>引导程序 页面=0,类型= DSECT
}
链接是否正确? 或者我有一些错误?
以及如何调试此问题(因为这只发生在运行中的真实设备上)
内存{PAGE 0: /* Program Memory */ /*内存(RAM/FLASE/OTP)块可移至Page1以进行数据分配*/
RAML0_1 :原点= 0x0.8万,长度= 0x0.2万 /*片上RAM块L0+L1!@ PVE 18.10 17 @! * OTP :原始= 0x3D7800,长度= 0x0.04万 /*片上OTP */ FLASHD :原始= 0x3E8000,长度= 0x0.4万 /*片上闪存*/ FLASHC :原始= 0x3EC000,长度= 0x0.4万 /*片上闪存*/ FLASHA :原始= 0x3F4000,长度= 0x003F80 /CSM_STIC/ 原点= 0x3F7F80,长度= 0x0.0076万 /* FLASHA的一部分。 在使用CSM时使用所有0x0000编程。 */ BEGIN :Origin = 0x3F7FF6,length = 0x0.0002万 /*部分FLASHA。 用于“引导至闪存”引导加载程序模式。 */ CSM_PWL :原点= 0x3F7FF8,长度= 0x0.0008万 /* FLASHA的一部分。 FLASHA */ ROM中的CSM密码位置 :原始= 0x3FF000,长度= 0x000FC0 /*引导ROM */ 重置 :原始= 0x3FFFC0,长度= 0x0.0002万 /*引导ROM的一部分 */ 矢量 :原始= 0x3FFFC2,长度= 0x0.0003万E /*引导ROM的一部分 */
第1页:/* 数据存储器*/ /*内存(RAM/FLASE/OTP)块可以移动到PAGE0以进行程序分配*/ /*寄存器保留在Page1上 */
RAMM0 :Origin = 0x0万,length = 0x0.04万 /*片上RAM块M0 */ BOOT_RSVD :origin = 0x0.04万,length = 0x0.008万 /* M1的一部分,boot ROM将对stack */ RAMM1使用此选项 :origin = 0x0.048万,length = 0x0.038万 /*片上RAM块M1 *// RAML1 : 原点= 0x0.96万,长度= 0x000A00 /*片上RAM块L1 -已更改:从9000到9600,从1000到A00!@ PVE 18.10 .................17 @! */ RAMH0 :原点= 0x00A000,长度= 0x0.1万 /*片上RAM块H0 (第一部分-用于数据)-复制到数据空间!@ PVE 18.10 16 @! */ RAMH0_F :原点= 0x00B000,长度= 0x0.1万 /*片上RAM块H0 (第二部分-用于过滤器)-复制到数据空间!@ PVE 18.10 16 @! */ FLASHB :Origin = 0x3F0000,length = 0x0.4万 /*片上闪存*/// RAMH0 :origin = 0x3FA000,length = 0x0.2万 /*片上RAM块H0 */}
/*将部分分配给内存块。 注意: DSP28_CodeStartBranch.asm中的codegstart用户定义部分用于重定向代码 引导至闪存时执行 ramfuncs 用户定义的部分,用于存储将从Flash复制到RAM*/ 部分{ /*分配程序区域:*/ .cinit的函数 :> FLASHA 页面= 0 。Pinit :> FLASHA, page = 0 .text :> FLASHA 页面= 0 代码启动 :>开始 页面= 0 ramfuncs. :负载= FLASHD, Run = RAML0_1, load_start(_RamfuncsLoadStart), load_end (_RamfuncsLoadEnd), run_start(_RamfuncsRunStart), 页面= 0
csmpasswds :> CSM_PWL 页面= 0 CSM_rsvd. :> CSM_RSVD page = 0 /*分配未初始化的数据段:*/ .stack :> RAMM0 page = 1// .ebss :> RAML1 page = 1 .ebss :> RAMH0 page = 1 .esysmem :> RAMH0 页面= 1
FIRldb1 align(0x100)> RAMH0_F, page = 1 firldb2 align(0x100)> RAMH0_F, page = 1 firldb3 align(0x100)> RAMH0_F, page = 1 firldb4 align(0x100)> RAMH0_F, page = 1 align(0x100) Page = 1 firldb8 align (0x100)> RAMH0_F, page = 1 firldb9 align (0x100)> RAMH0_F, page = 1 firldb10 align (0x100)> RAMH0_F, page = 1
/*初始化部分进入Flash *//* 要使SDFlash对这些部分进行编程,必须将它们分配到第0页*/ .econst :> FLASHA PAGE = 0 .SWITCH :> FLASHA 页面= 0
/*分配IQ数学领域:*/ IQmath :> FLASHC 页面= 0 /*数学代码,FLASHC -原始位置*/ IQmathTables :> ROM Page =0,type = NoLoad /* ROM中的数学表*/
/*.reset是编译器使用的标准部分。 它包含 _c_int00 for C Code的起始地址*/*。 /* /*使用引导ROM时 ,不需要此部分和CPU矢量*/*表。 因此,默认类型在此处设置为 */* DSECT */ .reset :>重置, 页=0,类型= DSECT 引导程序 :>引导 程序页面=0,类型= DSECT
}