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.

[参考译文] TMS320F28388D:0x63FF 处的内存违反

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1487660/tms320f28388d-memory-violation-at-0x63ff

器件型号:TMS320F28388D
Thread 中讨论的其他器件:C2000WARE

工具与软件:

您好!

我正在使用以下链接器文件、但它有一个问题、问题是我在0x63FF 地址处遇到存储器违例、我不在代码中触摸此存储器、但出现了此违例、  
我想知道是什么原因? 因为有时我的代码运行不可预测、我想这可能是原因。

.cmd 文件:

#ifdef CLA_block_included
//定义将要使用的 CLA 暂存区的大小
//由 CLA 编译器为局部符号和 temps 编译
//也强制引用标记的特殊符号
//暂存区。
CLA_SCRATCHPAD_SIZE = 0x100;
--undef_sym=_cla_scratchpad_end
-- undef_sym=____ cla_scratchpad_start
#endif //cla_block_included
小程序

第0页:
/*开始用于"引导至 SARAM"引导加载程序模式*/
begin:origin = 0x000000、length = 0x000002
begin_flash:origin = 0x080000、length = 0x000002
RAMLS_CLA_DATA:origin = 0x008000、length = 0x002000  
RAMLS_CLA_PROG:origin = 0x00A000、length = 0x002000

RAMGS_PROG:origin = 0x014000、length = 0x007000


/*闪存扇区*/
FLASHA_N:origin = 0x080002、length = 0x03FFFE /*片上闪存*/
复位:origin = 0x3FFFC0、length = 0x000002

第1页:
BOOT_RSVD:origin = 0x000002、length = 0x0001AE /*作为 M0的一部分、引导 ROM 将使用此值用于 STACK */
RAMM0M1:origin = 0x0001B0、length = 0x000650
RAMD0D1:origin = 0x00C000、length = 0x001000

RAMGS_DATA:origin = 0x010000、length = 0x004000



CLA1_MSGRAMLOW:origin = 0x001480、length = 0x000080
CLA1_MSGRAMHIGH:origin = 0x001500、length = 0x000080

CPU1TOCPU2RAM:origin = 0x03A000、length = 0x000800
CPU2TOCPU1RAM:origin = 0x03B000、length = 0x000800

CPUTOCMRAM:origin = 0x039000、length = 0x000800
CMTOCPURAM:origin = 0x038000、length = 0x000800

CANA_MSG_RAM:origin = 0x049000、length = 0x000800
CANB_MSG_RAM:origin = 0x04B000、length = 0x000800

#ifdef EMIF1_CS0_INCLUDED
EMIF1_CS0_MEMORY:origin = 0x80000000、length = 0x10000000
#endif //EMIF1_CS0_INCLUDED
#ifdef EMIF1_CS2_INCLUDED
EMIF1_CS2_MEMORY:origin = 0x00100000、length = 0x00200000
#endif //EMIF1_CS2_Included
#ifdef EMIF1_CS3_INCLUDED
EMIF1_CS3_MEMORY:origin = 0x00300000、length = 0x00080000
#endif //EMIF1_CS3_included
#ifdef EMIF1_CS4_INCLUDED
EMIF1_CS4_MEMORY:origin = 0x00380000、length = 0x00060000
#endif //EMIF1_CS4_INCLUDED
#ifdef EMIF2_CS0_INCLUDED
EMIF2_CS0_MEMORY:origin = 0x90000000、length = 0x10000000
#endif //EMIF2_CS0_INCLUDED
#ifdef EMIF2_CS2_INCLUDED
EMIF2_CS2_MEMORY:origin = 0x00002000、length = 0x00001000
#endif //EMIF2_CS2_INCLUDED
}

部分中)

/*分配方案领域:*/
codestart :> Begin_FLASH, page = 0, align(8)
.text:> FLASHA_N、page = 0、align (8)
.cinit:> FLASHA_N、page = 0、align (8)
.switch:> FLASHA_N、PAGE = 0、ALIGN (8)
#if defined (_TI_EABI__)
init_array :> FLASHA_N, page = 0, align(8)
/*初始化段进入闪存*/
.const:> FLASHA_N、PAGE = 0、ALIGN (8)
.data :> RAMGS_DATA, page = 1.
.TI.ramfunc:{}load = FLASHA_N、
RUN = RAMGS_PROG、
Load_start (RamfuncsLoadStart)、
Load_Size (RamfuncsLoadSize)、
Load_End (RamfuncsLoadEnd)、
RUN_START (RamfuncsRunStart)、
RUN_SIZE (RamfuncsRunSize)、
RUN_END (RamfuncsRunEnd)、
PAGE = 0、ALIGN (8)

ramfuncs:load = FLASHA_N、
RUN = RAMGS_PROG、
Load_start (MW_RamfuncsLoadStart)、
Load_Size (MW_RamfuncsLoadSize)、
Load_End (MW_RamfuncsLoadEnd)、
RUN_START (MW_RamfuncsRunStart)、
RUN_SIZE (MW_RamfuncsRunSize)、
RUN_END (MW_RamfuncsRunEnd)、
PAGE = 0、ALIGN (8)
#else
.pinit :> FLASHA_N, PAGE = 0, ALIGN (8)
/*初始化段进入闪存*/
econst:> FLASHA_N、page = 0、align (8)
.TI.ramfunc:{}load = FLASHA_N、
RUN = RAMGS_PROG、
Load_start (_RamfuncsLoadStart)、
Load_Size (_RamfuncsLoadSize)、
Load_End (_RamfuncsLoadEnd)、
RUN_START (_RamfuncsRunStart)、
RUN_SIZE (_RamfuncsRunSize)、
RUN_END (_RamfuncsRunEnd)、
PAGE = 0、ALIGN (8)

ramfuncs:load = FLASHA_N、
RUN = RAMGS_PROG、
Load_start (_mw_RamfuncsLoadStart)、
Load_Size (_mw_RamfuncsLoadSize)、
Load_End (_mw_RamfuncsLoadEnd)、
RUN_START (_MW_RamfuncsRunStart)、
RUN_SIZE (_mw_RamfuncsRunSize)、
RUN_END (_MW_RamfuncsRunEnd)、
PAGE = 0、ALIGN (8)
#endif //已定义(__TI_EABI__)

#if defined (_TI_EABI__)
bss :>> RAMGS_DATA , page = 1.
#else
.ebss :>> RAMGS_DATA , page = 1.
#endif //已定义(__TI_EABI__)

/*分配 IQmath 区域:*/
IQMath :> FLASHA_N, PAGE = 0, ALIGN (8)/*数学代码*/
IQmathTables :> FLASHA_N, page = 0, align (8)

#if defined (_TI_EABI__)
.sysmem :> RAMD0D1 , page = 1.
#else
.esysmem :> RAMD0D1, page = 1.
.cio:>RAMGS_DATA、page = 1.
#endif //已定义(__TI_EABI__)
stack:> RAMM0M1、页= 1.
.reset :> RESET , PAGE = 0, TYPE = DSECT /*未使用,*/
MSGRAM_CPU1_TO_CPU2:> CPU1TOCPU2RAM、page = 1、align (4)、type = NOINIT
MSGRAM_CPU2_TO_CPU1:>CPU2TOCPU1RAM、page = 1、align (4)、type = NOINIT
MSGRAM_CPU_TO_CM:>CPUTOCMRAM、PAGE = 1、ALIGN (4)、TYPE = NOINIT
MSGRAM_CM_TO_CPU:>CMTOCPURAM、PAGE = 1、ALIGN (4)、TYPE = NOINIT
#if Defined (EMIF1_CS0_included)&& defined (EMIF2_CS0_included)
.farbss:> EMIF1_CS0_MEMORY | EMIF2_CS0_MEMORY、PAGE = 1
.farconst:> EMIF1_CS0_MEMORY | EMIF2_CS0_MEMORY、PAGE = 1
#elif!defined (EMIF1_CS0_included)&& defined (EMIF2_CS0_included)
.farbss:> EMIF2_CS0_MEMORY、PAGE = 1
.farconst:> EMIF2_CS0_MEMORY、PAGE = 1
#elif defined (EMIF1_CS0_included)&&!defined (EMIF2_CS0_included)
.farbss:> EMIF1_CS0_MEMORY、PAGE = 1
.farconst:> EMIF1_CS0_MEMORY、PAGE = 1
#else
//无 EMIF 内存段
#endif // defined (EMIF1_CS0_included)&& defined (EMIF2_CS0_included)
#ifdef EMIF1_CS0_INCLUDED
Em1Cs0:> EMIF1_CS0_MEMORY、PAGE = 1
#endif //EMIF1_CS0_INCLUDED
#ifdef EMIF2_CS0_INCLUDED
Em2Cs0:> EMIF2_CS0_MEMORY、PAGE = 1
#endif //EMIF2_CS0_INCLUDED
#ifdef EMIF1_CS2_INCLUDED
Em1Cs2:> EMIF1_CS2_MEMORY、PAGE = 1
#endif //EMIF1_CS2_Included
#ifdef EMIF1_CS3_INCLUDED
Em1CS3:> EMIF1_CS3_MEMORY、PAGE = 1
#endif //EMIF1_CS3_included
#ifdef EMIF1_CS4_INCLUDED
Em1Cs4 :> EMIF1_CS4_MEMORY, page = 1.
#endif //EMIF1_CS4_INCLUDED
#ifdef MW_EMIF2_CS2_INCLUDED
Em2Cs2:> EMIF2_CS2_MEMORY、PAGE = 1
#endif //MW_EMIF2_CS2_INCLUDED


}

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

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

    您好!

    对迟交的答复深表歉意。 您能否共享.map 文件以供进一步分析?

    我没有看到该存储器映射到链接器 cmd 文件中的任何存储器位置。  

    您能否尝试使用我们 SDK 中存在的任何链接器 cmd 文件、并检查是否仍然遇到类似错误?

    位置- C2000Ware_5_04_00_00\device_support\f2838x\common\cmd

    我想在您的程序中、您正在尝试 对该位置执行读取/写入操作。 您是否可以尝试逐步调试代码并检查哪个指令导致了此问题?

    谢谢

    Aswin