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.

TMS320F28377D: 重新上电不能工作

Part Number: TMS320F28377D


不断电debug,可以运行。

但重启以后运行不了,删除部分变量以后,断电可以重启。cmd文件如下:


MEMORY
{
PAGE 0 : /* Program Memory */
/* Memory (RAM/FLASH) blocks can be moved to PAGE1 for data allocation */
RAMM0 : origin = 0x000122, length = 0x0002DE
RAMD0 : origin = 0x00B000, length = 0x000800
RAMLS0 : origin = 0x008000, length = 0x000800
RAMLS1 : origin = 0x008800, length = 0x000800
RAMLS2 : origin = 0x009000, length = 0x000800
RAMLS3 : origin = 0x009800, length = 0x000800
RAMGS14 : origin = 0x01A000, length = 0x001000
RAMGS15 : origin = 0x01B000, length = 0x001000
RESET : origin = 0x3FFFC0, length = 0x000002

#ifdef __TI_COMPILER_VERSION__
#if __TI_COMPILER_VERSION__ >= 20012000
GROUP { /* GROUP memory ranges for crc/checksum of entire flash */
#endif
#endif

/* BEGIN is used for the "boot to Flash" bootloader mode */
BEGIN : origin = 0x080000, length = 0x000002

/* Flash sectors */
FLASHA : origin = 0x080002, length = 0x001FFE /* on-chip Flash */
FLASHB : origin = 0x082000, length = 0x002000 /* on-chip Flash */
FLASHC : origin = 0x084000, length = 0x002000 /* on-chip Flash */
FLASHD : origin = 0x086000, length = 0x002000 /* on-chip Flash */
FLASHE : origin = 0x088000, length = 0x008000 /* on-chip Flash */
FLASHF : origin = 0x090000, length = 0x008000 /* on-chip Flash */
FLASHG : origin = 0x098000, length = 0x008000 /* on-chip Flash */
FLASHH : origin = 0x0A0000, length = 0x008000 /* on-chip Flash */
FLASHI : origin = 0x0A8000, length = 0x008000 /* on-chip Flash */
FLASHJ : origin = 0x0B0000, length = 0x008000 /* on-chip Flash */
FLASHK : origin = 0x0B8000, length = 0x002000 /* on-chip Flash */
FLASHL : origin = 0x0BA000, length = 0x002000 /* on-chip Flash */
FLASHM : origin = 0x0BC000, length = 0x002000 /* on-chip Flash */
FLASHN : origin = 0x0BE000, length = 0x002000 /* on-chip Flash */
#ifdef __TI_COMPILER_VERSION__
#if __TI_COMPILER_VERSION__ >= 20012000
} crc(_table_name, algorithm=C28_CHECKSUM_16)
#endif
#endif

PAGE 1 : /* Data Memory */
/* Memory (RAM/FLASH) blocks can be moved to PAGE0 for program allocation */

BOOT_RSVD : origin = 0x000002, length = 0x000120 /* Part of M0, BOOT rom will use this for stack */
RAMM1 : origin = 0x000400, length = 0x000400 /* on-chip RAM block M1 */
RAMD1 : origin = 0x00B800, length = 0x000800

RAMLS4 : origin = 0x00A000, length = 0x000800
RAMLS5 : origin = 0x00A800, length = 0x000800

RAMGS0 : origin = 0x00C000, length = 0x001000
RAMGS1 : origin = 0x00D000, length = 0x001000
RAMGS2 : origin = 0x00E000, length = 0x001000
RAMGS3 : origin = 0x00F000, length = 0x001000
RAMGS4 : origin = 0x010000, length = 0x001000
RAMGS5 : origin = 0x011000, length = 0x001000
RAMGS6 : origin = 0x012000, length = 0x001000
RAMGS7 : origin = 0x013000, length = 0x001000
RAMGS8 : origin = 0x014000, length = 0x001000
RAMGS9 : origin = 0x015000, length = 0x001000
RAMGS10 : origin = 0x016000, length = 0x001000
RAMGS11 : origin = 0x017000, length = 0x001000
RAMGS12 : origin = 0x018000, length = 0x001000
RAMGS13 : origin = 0x019000, length = 0x001000


CPU2TOCPU1RAM : origin = 0x03F800, length = 0x000400
CPU1TOCPU2RAM : origin = 0x03FC00, length = 0x000400
}


SECTIONS
{
/* Allocate program areas: */
.cinit : > FLASHB | FLASHC | FLASHD | FLASHE PAGE = 0, ALIGN(4)
.pinit : > FLASHB | FLASHC | FLASHD | FLASHE, PAGE = 0, ALIGN(4)
.text : >> FLASHB | FLASHC | FLASHD | FLASHE PAGE = 0, ALIGN(4)
codestart : > BEGIN PAGE = 0, ALIGN(4)

#ifdef __TI_COMPILER_VERSION__
#if __TI_COMPILER_VERSION__ >= 15009000
.TI.ramfunc : {} LOAD = FLASHB | FLASHC | FLASHD | FLASHE,
RUN = RAMLS0 | RAMLS1 | RAMLS2 |RAMLS3,
LOAD_START(_RamfuncsLoadStart),
LOAD_SIZE(_RamfuncsLoadSize),
LOAD_END(_RamfuncsLoadEnd),
RUN_START(_RamfuncsRunStart),
RUN_SIZE(_RamfuncsRunSize),
RUN_END(_RamfuncsRunEnd),
PAGE = 0, ALIGN(4)
#else
ramfuncs : LOAD = FLASHB | FLASHC | FLASHD | FLASHE,
RUN = RAMLS0 | RAMLS1 | RAMLS2 |RAMLS3,
LOAD_START(_RamfuncsLoadStart),
LOAD_SIZE(_RamfuncsLoadSize),
LOAD_END(_RamfuncsLoadEnd),
RUN_START(_RamfuncsRunStart),
RUN_SIZE(_RamfuncsRunSize),
RUN_END(_RamfuncsRunEnd),
PAGE = 0, ALIGN(4)
#endif
#endif

/* Allocate uninitalized data sections: */
.stack : > RAMM1 PAGE = 1
.ebss : >> RAMLS4 | RAMLS5 | RAMGS0 | RAMGS1 PAGE = 1
.esysmem : >> RAMLS4 | RAMLS5 PAGE = 1

/* Initalized sections go in Flash */
.econst : >> FLASHF | FLASHG | FLASHH PAGE = 0, ALIGN(4)
.switch : > FLASHB PAGE = 0, ALIGN(4)

.reset : > RESET, PAGE = 0, TYPE = DSECT /* not used, */

Filter_RegsFile : > RAMGS0, PAGE = 1

SHARERAMGS0 : > RAMGS0, PAGE = 1
SHARERAMGS1 : > RAMGS1, PAGE = 1

/* The following section definitions are required when using the IPC API Drivers */
GROUP : > CPU1TOCPU2RAM, PAGE = 1
{
PUTBUFFER
PUTWRITEIDX
GETREADIDX
}

GROUP : > CPU2TOCPU1RAM, PAGE = 1
{
GETBUFFER : TYPE = DSECT
GETWRITEIDX : TYPE = DSECT
PUTREADIDX : TYPE = DSECT
}

/* crc/checksum section configured as COPY section to avoid including in executable */
.TI.memcrc : type = COPY

}

/*
//===========================================================================
// End of file.
//===========================================================================
*/

  • 你好,我觉得这个问题应该说明一下删除的哪些变量?

    但是一般来说,仿真可以运行但flash不能运行的话跟变量应该关系不大,程序如果使用flash.cmd文件的话能正常仿真吗?

  • 我删除的是我自己定义的一些volatile uint16,int16,float32,int64等格式的数据。

    我的float32和int64的数据有个几十个。

    通过删除变量,控制ebss使用率不超过1024,就能正常重新上电运行。如果>1024,就会异常。

    现在很愁,整个问题严重影响了我们的项目进度,如果是377不够用,还要换芯片。

  • 仿真使用的flash.cmd, debug运行无异常。

  • 这些变量是我自己定义的。

    volatile float32 f32X1Adc1Voltage = 0;

    volatile int64 s64Adc1Voltage = 0;

    类似的变量。

  • 不帮忙解决嘛?

  • 抱歉刚看到。

    .ebss部分包含全局变量,文件级静态变量和函数级静态变量。照例说如果仿真能正常运行的话flash也没问题。

    你看一下ram和flash的两个CMD文件中.ebss的划分大小是相同的吗?

    另外,可以在CCS内使用View-->Memory Allocation 来查看内存使用情况。

    也可以参考一下这个页面的说明:software-dl.ti.com/.../c2000_c28x-compiler-understanding-linking.html

  • 发一下你编译后的map文件。另外,你可以把有些变量通过  DATA_SECTION的方式指定到其他的RAM。这种一般是有些程序没有下载到flash,只是下载到ram,所以仿真时可以运行,但是脱离仿真器之后就运行异常了。

  • MEMORY CONFIGURATION

    name origin length used unused attr fill
    ---------------------- -------- --------- -------- -------- ---- --------
    PAGE 0:
    RAMM0 00000122 000002de 00000000 000002de RWIX
    RAMLS0 00008000 00000800 0000003b 000007c5 RWIX
    RAMLS1 00008800 00000800 00000000 00000800 RWIX
    RAMLS2 00009000 00000800 00000000 00000800 RWIX
    RAMLS3 00009800 00000800 00000000 00000800 RWIX
    RAMLS4 0000a000 00000800 00000000 00000800 RWIX
    RAMD0 0000b000 00000800 00000000 00000800 RWIX
    RAMGS14 0001a000 00001000 00000000 00001000 RWIX
    RAMGS15 0001b000 00001000 00000000 00001000 RWIX
    BEGIN 00080000 00000002 00000002 00000000 RWIX
    FLASHA 00080002 00001ffe 00000000 00001ffe RWIX
    FLASHB 00082000 00002000 00001ffd 00000003 RWIX
    FLASHC 00084000 00002000 00001eee 00000112 RWIX
    FLASHD 00086000 00002000 00000d61 0000129f RWIX
    FLASHE 00088000 00008000 00000000 00008000 RWIX
    FLASHF 00090000 00008000 000001c0 00007e40 RWIX
    FLASHG 00098000 00008000 00000000 00008000 RWIX
    FLASHH 000a0000 00008000 00000000 00008000 RWIX
    FLASHI 000a8000 00008000 00000000 00008000 RWIX
    FLASHJ 000b0000 00008000 00000000 00008000 RWIX
    FLASHK 000b8000 00002000 00000000 00002000 RWIX
    FLASHL 000ba000 00002000 00000000 00002000 RWIX
    FLASHM 000bc000 00002000 00000000 00002000 RWIX
    FLASHN 000be000 00002000 00000000 00002000 RWIX
    RESET 003fffc0 00000002 00000000 00000002 RWIX

    PAGE 1:
    BOOT_RSVD 00000002 00000120 00000000 00000120 RWIX
    RAMM1 00000400 00000400 00000100 00000300 RWIX
    ADCA_RESULT 00000b00 00000020 00000018 00000008 RWIX
    ADCB_RESULT 00000b20 00000020 00000018 00000008 RWIX
    ADCC_RESULT 00000b40 00000020 00000018 00000008 RWIX
    ADCD_RESULT 00000b60 00000020 00000018 00000008 RWIX
    CPU_TIMER0 00000c00 00000008 00000008 00000000 RWIX
    CPU_TIMER1 00000c08 00000008 00000008 00000000 RWIX
    CPU_TIMER2 00000c10 00000008 00000008 00000000 RWIX
    PIE_CTRL 00000ce0 00000020 0000001a 00000006 RWIX
    PIE_VECT 00000d00 00000200 000001c0 00000040 RWIX
    DMA 00001000 00000200 000000e0 00000120 RWIX
    CLA1 00001400 00000040 0000003e 00000002 RWIX
    EMIF2_CS2n 00002000 00001000 00000000 00001000 RWIX
    EPWM1 00004000 00000100 00000100 00000000 RWIX
    EPWM2 00004100 00000100 00000100 00000000 RWIX
    EPWM3 00004200 00000100 00000100 00000000 RWIX
    EPWM4 00004300 00000100 00000100 00000000 RWIX
    EPWM5 00004400 00000100 00000100 00000000 RWIX
    EPWM6 00004500 00000100 00000100 00000000 RWIX
    EPWM7 00004600 00000100 00000100 00000000 RWIX
    EPWM8 00004700 00000100 00000100 00000000 RWIX
    EPWM9 00004800 00000100 00000100 00000000 RWIX
    EPWM10 00004900 00000100 00000100 00000000 RWIX
    EPWM11 00004a00 00000100 00000100 00000000 RWIX
    EPWM12 00004b00 00000100 00000100 00000000 RWIX
    ECAP1 00005000 00000020 00000020 00000000 RWIX
    ECAP2 00005020 00000020 00000020 00000000 RWIX
    ECAP3 00005040 00000020 00000020 00000000 RWIX
    ECAP4 00005060 00000020 00000020 00000000 RWIX
    ECAP5 00005080 00000020 00000020 00000000 RWIX
    ECAP6 000050a0 00000020 00000020 00000000 RWIX
    EQEP1 00005100 00000040 00000022 0000001e RWIX
    EQEP2 00005140 00000040 00000022 0000001e RWIX
    EQEP3 00005180 00000040 00000022 0000001e RWIX
    DACA 00005c00 00000010 00000008 00000008 RWIX
    DACB 00005c10 00000010 00000008 00000008 RWIX
    DACC 00005c20 00000010 00000008 00000008 RWIX
    CMPSS1 00005c80 00000020 00000020 00000000 RWIX
    CMPSS2 00005ca0 00000020 00000020 00000000 RWIX
    CMPSS3 00005cc0 00000020 00000020 00000000 RWIX
    CMPSS4 00005ce0 00000020 00000020 00000000 RWIX
    CMPSS5 00005d00 00000020 00000020 00000000 RWIX
    CMPSS6 00005d20 00000020 00000020 00000000 RWIX
    CMPSS7 00005d40 00000020 00000020 00000000 RWIX
    CMPSS8 00005d60 00000020 00000020 00000000 RWIX
    SDFM1 00005e00 00000080 00000080 00000000 RWIX
    SDFM2 00005e80 00000080 00000080 00000000 RWIX
    MCBSPA 00006000 00000040 00000024 0000001c RWIX
    MCBSPB 00006040 00000040 00000024 0000001c RWIX
    SPIA 00006100 00000010 00000010 00000000 RWIX
    SPIB 00006110 00000010 00000010 00000000 RWIX
    *** 00006120 00000010 00000010 00000000 RWIX
    SPID 00006130 00000010 00000000 00000010 RWIX
    UPP 00006200 00000100 00000048 000000b8 RWIX
    WD 00007000 00000040 0000002b 00000015 RWIX
    NMIINTRUPT 00007060 00000010 00000007 00000009 RWIX
    XINT 00007070 00000010 0000000b 00000005 RWIX
    SCIA 00007200 00000010 00000010 00000000 RWIX
    SCIB 00007210 00000010 00000010 00000000 RWIX
    SCIC 00007220 00000010 00000010 00000000 RWIX
    SCID 00007230 00000010 00000010 00000000 RWIX
    I2CA 00007300 00000040 00000022 0000001e RWIX
    I2CB 00007340 00000040 00000022 0000001e RWIX
    ADCA 00007400 00000080 00000080 00000000 RWIX
    ADCB 00007480 00000080 00000080 00000000 RWIX
    ADCC 00007500 00000080 00000080 00000000 RWIX
    ADCD 00007580 00000080 00000080 00000000 RWIX
    INPUT_XBAR 00007900 00000020 00000020 00000000 RWIX
    XBAR 00007920 00000020 00000020 00000000 RWIX
    SYNC_SOC 00007940 00000010 00000006 0000000a RWIX
    DMACLASRCSEL 00007980 00000040 0000001a 00000026 RWIX
    EPWM_XBAR 00007a00 00000040 00000040 00000000 RWIX
    CLB_XBAR 00007a40 00000040 00000000 00000040 RWIX
    OUTPUT_XBAR 00007a80 00000040 00000040 00000000 RWIX
    GPIOCTRL 00007c00 00000180 00000180 00000000 RWIX
    GPIODAT 00007f00 00000030 00000030 00000000 RWIX
    RAMLS5 0000a800 00000800 000004da 00000326 RWIX
    RAMD1 0000b800 00000800 00000000 00000800 RWIX
    RAMGS0 0000c000 00001000 00000000 00001000 RWIX
    RAMGS1 0000d000 00001000 00000000 00001000 RWIX
    RAMGS2 0000e000 00001000 00000000 00001000 RWIX
    RAMGS3 0000f000 00001000 00000000 00001000 RWIX
    RAMGS4 00010000 00001000 00000000 00001000 RWIX
    RAMGS5 00011000 00001000 00000000 00001000 RWIX
    RAMGS6 00012000 00001000 00000000 00001000 RWIX
    RAMGS7 00013000 00001000 00000000 00001000 RWIX
    RAMGS8 00014000 00001000 00000000 00001000 RWIX
    RAMGS9 00015000 00001000 00000000 00001000 RWIX
    RAMGS10 00016000 00001000 00000000 00001000 RWIX
    RAMGS11 00017000 00001000 00000000 00001000 RWIX
    RAMGS12 00018000 00001000 00000000 00001000 RWIX
    RAMGS13 00019000 00001000 00000000 00001000 RWIX
    CPU2TOCPU1RAM 0003f800 00000400 00000000 00000400 RWIX
    CPU1TOCPU2RAM 0003fc00 00000400 00000000 00000400 RWIX
    EMIF1 00047000 00000800 00000070 00000790 RWIX
    EMIF2 00047800 00000800 00000070 00000790 RWIX
    CANA 00048000 00000800 00000164 0000069c RWIX
    CANB 0004a000 00000800 00000164 0000069c RWIX
    IPC 00050000 00000024 00000024 00000000 RWIX
    FLASHPUMPSEMAPHORE 00050024 00000002 00000002 00000000 RWIX
    DEV_CFG 0005d000 00000180 0000012e 00000052 RWIX
    ANALOG_SUBSYS 0005d180 00000080 00000048 00000038 RWIX
    CLK_CFG 0005d200 00000100 00000032 000000ce RWIX
    CPU_SYS 0005d300 00000100 00000082 0000007e RWIX
    ROMPREFETCH 0005e608 00000002 00000002 00000000 RWIX
    DCSM_Z1 0005f000 00000030 00000024 0000000c RWIX
    DCSM_Z2 0005f040 00000030 00000024 0000000c RWIX
    DCSM_COMMON 0005f070 00000010 00000008 00000008 RWIX
    MEMCFG 0005f400 00000080 00000080 00000000 RWIX
    EMIF1CONFIG 0005f480 00000020 00000020 00000000 RWIX
    EMIF2CONFIG 0005f4a0 00000020 00000020 00000000 RWIX
    ACCESSPROTECTION 0005f4c0 00000040 00000040 00000000 RWIX
    MEMORYERROR 0005f500 00000040 00000040 00000000 RWIX
    ROMWAITSTATE 0005f540 00000002 00000002 00000000 RWIX
    FLASH0_CTRL 0005f800 00000300 00000182 0000017e RWIX
    FLASH0_ECC 0005fb00 00000040 00000028 00000018 RWIX
    DCSM_Z1_OTP 00078000 00000020 00000020 00000000 RWIX
    DCSM_Z2_OTP 00078200 00000020 00000020 00000000 RWIX
    EMIF1_CS2n 00100000 00200000 00000000 00200000 RWIX
    EMIF1_CS3n 00300000 00080000 00000000 00080000 RWIX
    EMIF1_CS4n 00380000 00060000 00000000 00060000 RWIX
    EMIF1_CS0n 80000000 10000000 00000000 10000000 RWIX
    EMIF2_CS0n 90000000 10000000 00000000 10000000 RWIX


    SECTION ALLOCATION MAP

    output attributes/
    section page origin length input sections
    -------- ---- ---------- ---------- ----------------
    .cinit 0 00082000 000009dd
    00082000 00000974 GLOBAL.obj (.cinit)
    00082974 00000018 F2837xD_DefaultISR.obj (.cinit)
    0008298c 0000000e rts2800_fpu32.lib : exit.c.obj (.cinit)
    0008299a 0000000c MONITOR.obj (.cinit)
    000829a6 0000000c emif1_16bit_asram.obj (.cinit)
    000829b2 0000000b emif1_16bit_asram.obj (.cinit:_s16ReadTest)
    000829bd 00000005 rts2800_fpu32.lib : _lock.c.obj (.cinit:__lock)
    000829c2 00000005 : _lock.c.obj (.cinit:__unlock)
    000829c7 00000004 F2837xD_sci_io.obj (.cinit)
    000829cb 00000004 GLOBAL.obj (.cinit:_u16SciARxBuff)
    000829cf 00000004 GLOBAL.obj (.cinit:_u16SciATxBuff)
    000829d3 00000004 GLOBAL.obj (.cinit:_u16SciBRxBuff)
    000829d7 00000004 GLOBAL.obj (.cinit:_u16SciBTxBuff)
    000829db 00000002 --HOLE-- [fill = 0]

    .pinit 0 00082000 00000000 UNINITIALIZED

    codestart
    * 0 00080000 00000002
    00080000 00000002 F2837xD_CodeStartBranch.obj (codestart)

    .stack 1 00000400 00000100 UNINITIALIZED
    00000400 00000100 --HOLE--

    .reset 0 003fffc0 00000002 DSECT
    003fffc0 00000002 rts2800_fpu32.lib : boot28.asm.obj (.reset)

    .TI.ramfunc
    * 0 00086000 0000003b RUN ADDR = 00008000
    00086000 00000037 F2837xD_SysCtrl.obj (.TI.ramfunc)
    00086037 00000004 F2837xD_usDelay.obj (.TI.ramfunc)