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.

[参考译文] 编译器/TMS320F280049C:测试 ECC Data_Error

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/938587/compiler-tms320f280049c-testing-ecc-data_error

器件型号:TMS320F280049C
主题中讨论的其他器件:DAC8562C2000WARE

工具/软件:TI C/C++编译器

请仔细阅读以下详细信息、并告知我为何无法注入和测试 ECC DATA_ERROR。

------------------------------------------------------------------

以下行取自函数'main':

if (软件版本=0x300)

while (1);

注意: const UINT16软件版本= 0x0300;

------------------------------------------------------------------

以下行取自映射文件:

页  地址   名称  

0   0000c1f2  _SoftwareVersion  

------------------------------------------------------------------

构建目标:"XYZ.OUT"

调用:C2000链接器
"c:/ti/ccs920/ccs/tools/compiler/ti-cgt-c2000_18.12.4.LTS/bin/cl2000 -v28 -ml -mt --cla_support=cla2 -float_support=fpu32 -tmu_support=tmu0 -vcu_support=vcu0 -off -advice:performance=all -define=cpu1 -define -define -define=-diag_suppress=10063 -vcu_support=vcu-off-0x42=cla_display-ram_error-ram_background-ram_off-ram_error-cn-cn-recon_display-ram_off-ram_error-cn-recon-ram_background-cn=0x42=econ_off-recon_error-rab-rab-rab-recon_display-rab-rab-rab-rab-rab-rab-rab-rab-rabout-rab-rab-rab-rab-rabout-rab-/ti/ccs920/ccs/tools/compiler/ti-cgt-c2000_18.12.4.LTS/include /ti/ccs920/ccs/tools/compiler/ti-cgt-c2000_18.12.4.LTS/lib xml_link_info="XYZ_linkInfo.xml"--entry_point=code_start -- rom_model -o "XYZ.out""./O2_SST_funcs.obj""./O2_CLA_Init.obj""./f28004x_code.obj "./f28004x_funf28004x_funobj ./f28004x./f28004x./f28004x./f2800_exfiltisobj /f284x./f284x./f284x./f28004x./f284x./f28004x.obj /driverlib/pmbus.obj /driverlib/pga.obj /driverlib/memcfg.obj /driverlib/lin.obj /driverlib/interrupt.obj /driverlib/i2c.obj /driverlib/hrpwm.obj /driverlib/hrcap.obj /driverlib/gpio.obj /driverlib/fsi.obj /driverlib/flash.obj /driverlib/eqep.obj /driverlib/epwm.obj /driverlib/ecap.obj /driverlib/dma.obj /driverlib/dcsm.obj /driverlib/dcc.obj /driverlib/dac.obj /driverlib/cputimer.obj /driverlib/cmpss.obj /driverlib/clapromcrc.obj /driverlib/cla.obj /driverlib/can.obj /driverlib/asysctl.obj /driverlib/adc.obj /device/device.obj "./driverlib/sci.obj "./driverlib/sdfm.obj "./driverlib/spi.obj "./driverlib/sysctl.obj "./ti/c2000/C2000Ware_2_00_00_02/libraries/flash_api/f28004x/lib/F021_ROM_API_F28004x_FPU32.lib "./driverlib/version.obj "./driverlib/xbar.obj "./vcu/vcu0_crc_32.obj "../O2_Flash_lnk.cmd""./driverlib.lib""./f28004x_headers_nonbios.cmd""./driverlib/ccs/Debug/driverlib.lib /Development/XYZ/driverlib.lib "./driverlib/ccs/Release/driverlib.lib -l"/ti/C2000/C2000Ware_2_00_00_02/libraries/math/CLAmath/c28/lib/cla2_math_library_fpu32.lib -l":C:/ti/c2000/C2000Ware_2_00_00_02/libraries/flash_api/f28004x/lib/F021_API_F28004x_FPU32.lib /ti/C2000/C2000Ware_2_00_00_02/libraries/dsp/FPU/c28/lib/c28x_fpu_dsp_library.lib

错误#10404-D:位错误应该是两个或三个逗号分隔的整数、带有可选的基本符号:[symbol+]address、[page、]error_mask
警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"RAM_Test_Block"
错误#10010:链接期间遇到错误;未生成"XYZ.OUT"

>>编译失败
Makefile:217:目标'XYZ.OUT"的配方失败
gmake.1]:***[XYZ.OUT]错误1
gmake[1]:目标"辅助输出"不会由于错误而重新生成。
Makefile:213:目标'all'的配方失败
gmake:***[全部]错误2.

****构建完成****

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

    Sandeep、

    配置 --ecc:data_error=0xC1F2+1,0x42时,要包含 ECC 错误的地址是什么?

    谢谢、此致、
    Vamsi

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

    我认为"const UINT16 SoftwareVersion = 0x0300;"被分配在.econst 中、进入"flash_BANK0_HALF1"部分。 但是映射文件中显示的"SoftwareVersion"的地址为0xC1F2。 如何在 FLASH_BANK0_HALF1中选择常量变量来引入 ECC:DATA_ERROR?

    存储器

    第0页:
    RAMM0:origin = 0x0000F5,length = 0x00030B
    RAMLS0LS1:origin = 0x008000、length = 0x001000
    RAMLS2:origin = 0x009000,length = 0x000800
    RAMLS3:origin = 0x009800,length = 0x000800
    RAMLS4:origin = 0x00A000,length = 0x000800

    复位:origin = 0x3FFFC0,length = 0x000002

    /*闪存扇区*/
    /*组0 */
    FLASH_BANK0_HALF1:origin = 0x00080000,length = 0x008000 vfill=0xFFFF //*段0到7 */
    FLASH_BANK0_HALF2:origin = 0x00088000、length = 0x008000 vfill=0xFFFF /* SECTIONS 8至15 */

    /*银行1 */
    FLASH_BANK1_SEC0:origin = 0x00090000,length = 0x001000 vfill=0xFFFF //片上闪存*
    FLASH_BANK1_SEC1:origin = 0x00091000、length = 0x001000 vfill=0xFFFF //片上闪存*
    FLASH_BANK1_SEC2:origin = 0x00092000、length = 0x001000 vfill=0xFFFF //片上闪存*
    FLASH_BANK1_SEC3:origin = 0x00093000、length = 0x001000 vfill=0xFFFF //片上闪存*
    FLASH_BANK1_SEC4:origin = 0x00094000、length = 0x001000 vfill=0xFFFF //片上闪存*
    FLASH_BANK1_SEC5:origin = 0x00095000、length = 0x001000 vfill=0xFFFF //片上闪存*
    FLASH_BANK1_SEC6:origin = 0x00096000、length = 0x001000 vfill=0xFFFF //片上闪存*
    FLASH_BANK1_SEC7:origin = 0x00097000、length = 0x001000 vfill=0xFFFF //片上闪存*
    FLASH_BANK1_SEC8:origin = 0x00098000、length = 0x001000 vfill=0xFFFF //片上闪存*
    FLASH_BANK1_SEC9:origin = 0x00099000、length = 0x001000 vfill=0xFFFF //片上闪存*
    FLASH_BANK1_SEC10:origin = 0x0009A000、length = 0x001000 vfill=0xFFFF //片上闪存*
    FLASH_BANK1_SEC11:origin = 0x0009B000、length = 0x001000 vfill=0xFFFF //片上闪存*
    FLASH_BANK1_SEC12:origin = 0x0009C000、length = 0x001000 vfill=0xFFFF //片上闪存*
    FLASH_BANK1_SEC13:origin = 0x0009D000、length = 0x001000 vfill=0xFFFF //片上闪存*
    FLASH_BANK1_SEC14:origin = 0x0009E000、length = 0x001000 vfill=0xFFFF //片上闪存*
    FLASH_BANK1_SEC15:origin = 0x0009F000、length = 0x000FF8 vfill=0xFFFF //片上闪存*
    PROG_CRC32:origin = 0x0009FFF8,length = 0x000008 vfill=0xFFFF //片上闪存*/

    RAMGS0GS3:origin = 0x0000C000,length = 0x008000

    ECC_FLAX0:origin = 0x01080000,
    长度= 0x001000、
    ECC ={INPUT_RANGE = FLASH_BANK0_HALF1、INPUT_PAGE = 0、算法= C2000_ALGO、Fill = true}

    ECC_FLAX1:origin = 0x01081000,
    长度= 0x001000、
    ECC ={INPUT_RANGE = FLASH_BANK0_HALF2、INPUT_PAGE = 0、算法= C2000_ALGO、Fill = true}


    // ECC_FLAY0:origin = 0x01082000,
    //长度= 0x000200、
    // ECC ={input_range = flash_bank1_SEC0、input_page = 0、算法= c2000_Algo、fill = true}

    // ECC_FLAY1:origin = 0x01082200,
    //长度= 0x000200、
    // ECC ={input_range = flash_bank1_SEC1、input_page = 0、算法= c2000_Algo、fill = true}

    ECC_FLAY2:origin = 0x01082400,
    长度= 0x000200、
    ECC ={INPUT_RANGE = FLASH_BANK1_SEC2、INPUT_PAGE = 0、算法= C2000_ALGO、Fill = true}

    ECC_FLAY3:origin = 0x01082600、
    长度= 0x000200、
    ECC ={INPUT_RANGE = FLASH_BANK1_SEC3、INPUT_PAGE = 0、算法= C2000_ALGO、Fill = true}

    ECC_FLAY4:origin = 0x01082800,
    长度= 0x000200、
    ECC ={INPUT_RANGE = FLASH_BANK1_SEC4、INPUT_PAGE = 0、算法= C2000_ALGO、Fill = true}

    ECC_FLAY5:origin = 0x01082A00,
    长度= 0x000200、
    ECC ={INPUT_RANGE = FLASH_BANK1_SEC5、INPUT_PAGE = 0、算法= C2000_ALGO、Fill = true}

    ECC_FLAY6:origin = 0x01082C00,
    长度= 0x000200、
    ECC ={INPUT_RANGE = FLASH_BANK1_SEC6、INPUT_PAGE = 0、算法= C2000_ALGO、Fill = true}

    ECC_FLAY7:origin = 0x01082E00,
    长度= 0x000200、
    ECC ={INPUT_RANGE = FLASH_BANK1_SEC7、INPUT_PAGE = 0、算法= C2000_ALGO、Fill = true}

    ECC_FLAY8:origin = 0x01083000,
    长度= 0x000200、
    ECC ={INPUT_RANGE = FLASH_BANK1_SEC8、INPUT_PAGE = 0、算法= C2000_ALGO、Fill = true}

    ECC_FLAY9:origin = 0x01083200,
    长度= 0x000200、
    ECC ={INPUT_RANGE = FLASH_BANK1_SEC9、INPUT_PAGE = 0、算法= C2000_ALGO、Fill = true}

    ECC_FLAY10:origin = 0x01083400,
    长度= 0x000200、
    ECC ={INPUT_RANGE = FLASH_BANK1_SEC10、INPUT_PAGE = 0、算法= C2000_ALGO、Fill = true}

    ECC_FLAY11:origin = 0x01083600,
    长度= 0x000200、
    ECC ={INPUT_RANGE = FLASH_BANK1_SEC11、INPUT_PAGE = 0、算法= C2000_ALGO、Fill = true}

    ECC_FLAY12:origin = 0x01083800、
    长度= 0x000200、
    ECC ={INPUT_RANGE = FLASH_BANK1_SEC12、INPUT_PAGE = 0、算法= C2000_ALGO、Fill = true}

    ECC_FLAY13:origin = 0x01083A00,
    长度= 0x000200、
    ECC ={INPUT_RANGE = FLASH_BANK1_SEC13、INPUT_PAGE = 0、算法= C2000_ALGO、Fill = true}

    ECC_FLAY14:origin = 0x01083C00,
    长度= 0x000200、
    ECC ={INPUT_RANGE = FLASH_BANK1_SEC14、INPUT_PAGE = 0、算法= C2000_ALGO、Fill = true}

    ECC_FLAY15:origin = 0x01083E00,
    长度= 0x0001FF、
    ECC ={INPUT_RANGE = FLASH_BANK1_SEC15、INPUT_PAGE = 0、算法= C2000_ALGO、Fill = true}

    ECC_FLAY16:origin = 0x01083FFF,
    长度= 0x000001、
    ECC ={INPUT_RANGE = PROG_CRC32、INPUT_PAGE = 0、算法= C2000_ALGO、Fill = true}

    第1页:

    /*闪存扇区*/
    /*组0 */
    //flash_BANK0_HALF1:origin = 0x080002,length = 0x007FFE //*段0到7 */
    //FLASH_BANK0_HALF2:origin = 0x088000、length = 0x008000 //* SECTIONS 8至15 */

    BOOT_RSVD:origin = 0x000002,length = 0x0000F3 // M0的一部分,引导 ROM 将此用于栈*/
    RAMM1:origin = 0x000400、length = 0x000400 //片上 RAM 块 M1 *

    RAMLS5:origin = 0x00A800,length = 0x000800
    RAMLS6:origin = 0x00B000、length = 0x000800
    RAMLS7:origin = 0x00B800,length = 0x000800

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

    ECC { c2000_算法:奇偶校验掩码= 0xFC 镜像= F021 }

    部分

    codestart:> FLASH_BANK0_HALF1,PAGE = 0,PALIGN (4)
    .text:> FLASH_BANK0_HALF1,PAGE = 0,PALIGN (4)
    .cinit:> FLASH_BANK0_HALF1,PAGE = 0,PALIGN (4)
    .pinit:> FLASH_BANK0_HALF1,PAGE = 0,PALIGN (4)
    .switch:> FLASH_BANK0_HALF1,PAGE = 0,PALIGN (4)
    .reset:> reset,page = 0,type = DSECT //未使用,*/

    .cio:> RAMGS0GS3,PAGE = 0
    .stack:>RAMM1,PAGE = 1.
    .ebss:> RAMGS0GS3,PAGE = 0
    .esysmem:> RAMGS0GS3,PAGE = 0
    .econst:> FLASH_BANK0_HALF1、
    运行= RAMGS0GS3、
    load_start (_econst_loadstart)、
    run_start (_econst_runstart)、
    load_size (_econst_loadsize)、page = 0、PALIGN (4)
    /*
    .cio:>RAMS3LS7,page = 0
    .stack:>RAMM1,PAGE = 1.
    .ebss:> RAMGS0GS3,PAGE = 0
    .esysmem:>RAMS3LS7,PAGE = 0
    .econst:> RAMS3LS7,
    运行= RAMS3LS7、
    load_start (_econst_loadstart)、
    run_start (_econst_runstart)、
    load_size (_econst_loadsize)、page = 0、PALIGN (4)
    *

    O2_OperParms:> FLASH_BANK1_SEC0 PAGE = 0
    O2_CalCoeffs:> FLASH_BANK1_SEC1 PAGE = 0
    STORE_Prog_CRC32:> PROG_CRC32 PAGE = 0

    // CLA 段
    Cla1Prog:> FLASH_BANK0_HALF2、
    运行= RAMLS0LS1、
    run_start (_Cla1ProgRunStart)、
    Load_start (_Cla1ProgLoadStart)、
    load_size (_Cla1ProgLoadSize)、page = 0、PALIGN (4)
    暂存区:> RAMLS0LS1,PAGE = 0
    .bss_cla:> RAMLS0LS1,page = 0
    .CONST_CLA:> FLASH_BANK0_HALF2、
    运行= RAMLS0LS1、
    run_start (_Cla1ConstRunStart)、
    Load_start (_Cla1ConstLoadStart)、
    load_size (_Cla1ConstLoadSize)、page = 0、PALIGN (4)
    Cla1ToCpuMsgRAM:> CLA1_MSGRAMLOW,page = 1.
    CpuToCla1MsgRAM:>CLA1_MSGRAMHIGH,PAGE = 1.
    Cla1DataRam:> RAMLS2,page = 0

    /* RAM 函数*/

    .TI.ramfunc:load = flash_BANK0_HALF1,
    运行= RAMGS0GS3、
    load_start (_RamfuncsLoadStart)、
    load_size (_RamfuncsLoadSize)、
    load_end (_RamfuncsLoadEnd)、
    run_start (_RamfuncsRunStart)、
    run_size (_RamfuncsRunSize)、
    run_end (_RamfuncsRunEnd)、
    PAGE = 0、PALIGN (4)

    /*
    econst.ram:load = flash_BANK0_HALF1,
    运行= RAMGS0GS3、
    load_start (_econst_loadstart)、
    run_start (_econst_runstart)、
    load_size (_econst_loadsize)、
    PAGE = 0、PALIGN (4)

    Cla1Prog:LOAD = FLASH_BANK0_HALF2、
    运行= RAMLS0LS1、
    Load_start (Cla1ProgLoadStart)、
    Load_size (Cla1ProgLoadSize)、
    RUN_START (Cla1ProgRunStart)、
    PAGE = 0、PALIGN (4)

    const_CLA:load = flash_BANK0_HALF2、
    运行= RAMLS3、
    RUN_START (Cla1ConstRunStart)、
    Load_start (Cla1ConstLoadStart)、
    load_size (Cla1ConstLoadSize)、
    PAGE = 0、PALIGN (4)
    *

    /*
    //============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
    //文件结束。
    //============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
    *

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

    之前:

    .econst:> FLASH_BANK0_HALF1、
    运行= RAMGS0GS3、
    load_start (_econst_loadstart)、
    run_start (_econst_runstart)、
    load_size (_econst_loadsize)、page = 0、PALIGN (4)

    --------------------------------------------------------------------

    现在、我在链接器文件中按如下方式进行了更改、将"软件版本"放置在 FLASH_BANK0_HALF1中。

    .econst      :> FLASH_BANK0_HALF1,PAGE = 0,PALIGN (4)

    现在、映射文件显示:

    页地址        名称

    0     0008105e   _SoftwareVersion

    --------------------------------------------------------------------

    构建目标:"XYZ.OUT"
    调用:C2000链接器
    "c:/ti/ccs920/ccs/tools/compiler/ti-cgt-c2000_18.12.4.LTS/bin/cl2000 -v28 -ml -mt --cla_support=cla2 -float_support=fpu32 -tmu_support=tmu0 -vcu_support=vcu0 -off -advice:performance=all -define=cpu1 -define -define -tag_suppress=10063 --vcu_support=vcu-off-0x8105_error-rabi_ram_display-ram_ram_background-out-0x02=ecnature=ecnate-display-display-ram_background-out-out-display-命令/ti/ccs920/ccs/tools/compiler/ti-cgt-c2000_18.12.4.LTS/lib -命令0x8105_error-recnate-ram_display-ram_off-out-recnate-background-out-out-out-out-命令-recnecnate-display-命令/ti/ccs920/ccs/tools/compiler/ti-cgt-c2000_18.12.4.LTS/include -命令0x80_display-de-de-de-de-de-display-rab-recnecnecnecnate-display xml_link_info="XYZ_linkInfo.xml"--entry_point=code_start -- rom_model -o "XYZ.out""./O2_SST_funcs.obj""./O2_CLA_Init.obj""./f28004x_code.obj "./f28004x_funf28004x_funobj ./f28004x./f28004x./f28004x./f2800_exfiltisobj /f284x./f284x./f284x./f28004x./f284x./f28004x.obj /driverlib/pmbus.obj /driverlib/pga.obj /driverlib/memcfg.obj /driverlib/lin.obj /driverlib/interrupt.obj /driverlib/i2c.obj /driverlib/hrpwm.obj /driverlib/hrcap.obj /driverlib/gpio.obj /driverlib/fsi.obj /driverlib/flash.obj /driverlib/eqep.obj /driverlib/epwm.obj /driverlib/ecap.obj /driverlib/dma.obj /driverlib/dcsm.obj /driverlib/dcc.obj /driverlib/dac.obj /driverlib/cputimer.obj /driverlib/cmpss.obj /driverlib/clapromcrc.obj /driverlib/cla.obj /driverlib/can.obj /driverlib/asysctl.obj /driverlib/adc.obj /device/device.obj "./driverlib/sci.obj "./driverlib/sdfm.obj "./driverlib/spi.obj "./driverlib/sysctl.obj "./ti/c2000/C2000Ware_2_00_00_02/libraries/flash_api/f28004x/lib/F021_ROM_API_F28004x_FPU32.lib "./driverlib/version.obj "./driverlib/xbar.obj "./vcu/vcu0_crc_32.obj "../O2_Flash_lnk.cmd""./driverlib.lib""./f28004x_headers_nonbios.cmd""./driverlib/ccs/Debug/driverlib.lib /Development/XYZ/driverlib.lib "./driverlib/ccs/Release/driverlib.lib -l"/ti/C2000/C2000Ware_2_00_00_02/libraries/math/CLAmath/c28/lib/cla2_math_library_fpu32.lib -l":C:/ti/c2000/C2000Ware_2_00_00_02/libraries/flash_api/f28004x/lib/F021_API_F28004x_FPU32.lib /ti/C2000/C2000Ware_2_00_00_02/libraries/dsp/FPU/c28/lib/c28x_fpu_dsp_library.lib

    错误#10404-D:位错误应该是两个或三个逗号分隔的整数、带有可选的基本符号:[symbol+]address、[page、]error_mask
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"RAM_Test_Block"
    错误#10010:链接期间遇到错误;未生成"XYZ.OUT"

    >>编译失败
    Makefile:217:目标'XYZ.OUT"的配方失败
    gmake.1]:***[XYZ.OUT]错误1
    gmake[1]:目标"辅助输出"不会由于错误而重新生成。
    Makefile:213:目标'all'的配方失败
    gmake:***[全部]错误2.

    ****构建完成****

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

    我发现我不应该在地址旁边提到"+0"。 这使得链接正常、但当读取符号"SoftwareVersion"时、我预计会导致不可纠正的错误和未发生的 NMI 中断。 有什么建议?

    "-ecc:data_error=0x8105e+0、0、0x42"  

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

    Sandeep、

    很高兴讨论有所帮助。

    关于 NMI/不可纠正的错误: 您是否在 CCS 闪存插件 GUI 中禁用了 AutoEccGeneration?  如果没有、请禁用它-如果它保持启用状态、ECC 将被正确编程。

    谢谢、此致、
    Vamsi