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.

[参考译文] 编译器/TMS470MF06607:链接器 ECC 编译器错误

Guru**** 2618835 points

Other Parts Discussed in Thread: TMS470MF06607, NOWECC

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/780721/compiler-tms470mf06607-linker-ecc-compiler-bug

器件型号:TMS470MF06607
主题中讨论的其他器件: NOWECC

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

您好!

我一直在尝试编译一个具有 ECC 保护的基于 TMS470的项目、但是每次我通过闪存错误检测和校正控制寄存器1 (FEDACCTRL1 - 0xFFF87008)启用检测和校正时、处理器都会进入 NMI ISR 例程并重新启动。  

当程序启用 EDAC 时、处理器进入该中断并报告错误位于函数调用的地址、该函数调用启用保护、然后在进入 NMI 后、错误地址变为 NMI 函数的地址

我们一直在使用 CCS 8.3.0.00009编译程序。 我们随后尝试使用较旧版本的 CCS 6.1.0.00104进行编译和编程、生成的程序没有相同的问题、并且在启用 EDAC 保护的情况下运行得很愉快。

由于两个实例中使用的源代码是相同的、并且我们没有在项目设置中启用任何特殊功能、因此我们确定这一定是编译器问题、但我们确切地不确定、未对齐或错误生成的 ECC 字节或其他内容

谢谢、

Jonathan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否使用由链接器生成的 ECC 或诸如 ECC470之类的后处理工具? 您在 CCS6中使用的编译器/链接器版本是什么?您现在在 CCS8中使用的版本是什么?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我们使用链接器生成的 ECC

    对于 CCS 的两个安装、我们都使用随附的编译器

    CCS6编译器版本:5.2.2

    CCS8编译器版本:18.1.4.LTS

    所使用的链接器文件

    /*------------------ //
    /* sys_link.cmd */
    * */
    *
    版权所有(C) 2009-2016德州仪器(TI)公司- www.ti.com
    *
    
    *
    *只要
    符合以下条件*,就允许以源代码和二进制形式重新分发和使用,无论是否进行*修改:
    *
    *源代码的重新分发必须保留上述版权
    声明*、此条件列表和以下免责声明。
    *
    *二进制形式的再发行必须在
    
    *
    发行版随附的*文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。
    *
    *未经
    
    事先书面许可、不得使用德州仪器公司的名称或*其贡献者的名称认可或推广从本软件派生的产品*。
    *
    *本软件由版权所有者和贡献者
    *按原样"提供、
    
    且不承认任何明示或暗示的保证、包括但不限于*特定用途*的适销性和适用性的暗示保证。 在任何情况下、版权
    *所有者或贡献者都不对任何直接、间接、偶然、
    *特殊、模范、 或相应的损害(包括但不
    限于*采购替代产品或服务;丧失使用、
    *数据或利润; 或业务中断)、但出于
    任何*责任理论、无论是合同、严格责任还是侵权
    行为*(包括疏忽或其他原因)、即使
    被告知可能会造成此类损坏、也是出于此类责任理论。
    *
    */
    
    /* */
    //*--------------------------------------------------------------------------------------------------------- */
    /*用户代码开始(0)*/
    /*用户代码结束*/
    
    /*-->------------------------------------ */
    /*链接器设置 */
    
    -l rtsv7M3_T_be_eabi.lib
    
    --retain="*(.intvecs)"
    
    /*用户代码开始(1)*/
    ecc{
    algoFMCF035:address_mask = 0x003ff8 //地址位21:3 */
    hamming_mask = FMC /*使用闪存包装程序掩码*/
    奇偶校验掩码= 0xFC /*设置哪些 ECC 位为偶校验和奇校验*/
    镜像= F035 /* TMS470M 是在 F035中构建的*/
    }
    #define FLASH_ECC_origin (0x00400000)
    /*用户代码结束*/
    
    /*--------------- */
    /*内存映射 */
    
    MEMORY
    {
    * Embedded Flash */
    /* Bank 0 */
    向量(RX):origin=0x00000000 长度= 0x00000100 fill=0xffffffff
    FLASH0 (RX):origin=(end (vectors)) length=(0x00010000 - size (vectors))(长度=(0x00010000 -大小( vfill=0xffffffff
    /*组1 */*
    FLASH1 (RX):origin=0x00080000 长度= 0x00000000 vfill=0xffFFFFFF*/*
    组0 ECC */
    ECC_VEC (R):origin=(flash_ECC_origin +(start[向量]>> 1) length=(size (vectors)>> 1) ECC={algoFMCF035,input_range=vectors}
    ECC_FLA0 (R):=(vr= 1
    )+(fRACb)+ 1 (fr= 1)+ FLA0 (fr= 1)+(frc = 1)+ 1)+输入(fr= 1)+ 1 (fr= 1)
    origin=(flash_ecc_origin +(start (FLASH1)>> 1)) length=(size (FLASH1)>> 1) ecc={algoFMCF035、input_range=FLASH1}*/
    /*嵌入式 SRAM */
    堆栈(RW):origin=0x08000000 长度= 0x00000800
    RAM(RW):origin=0x08000800 length=0x00004800/*在0x08005000 */
    }
    
    /*用户代码开始(3)*/
    /*用户代码结束*/
    
    /*--------- */
    /*段配置 */
    
    SECTIONS
    {
    .intvecs:{} palign =8>vectors
    vim_table:{} vim_table
    .text:{} palign =8>FLASH0
    .const:{}palign = 8 > FLASH0
    .cinit:{}palign = 8 > FLASH0
    .pinit:{} palign =8>FLASH0
    .bss :{}> RAM
    .data :{}> RAM
    
    .stack : /*软件系统堆栈 */
    { /*初始堆栈指针值 *
    。 += 0x00000400;_Stack_Table_Pointer =.;
    。 += 0x00000400;_Stack_Handler_pointer =.;
    }> stacks
    
    //用户代码开始(4)*/
    */*用户代码结束*/
    }
    

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

    当您使用版本18.1.4进行构建时、是否会收到此警告?

    "./source/sys_link.cmd "、第8行:警告#10437-D:已弃用指定 ECC 汉明掩码"FMC";删除汉明掩码规范
    

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

    我可以重复您的问题。 当 TMS470MF06607淘汰汉明掩码"FMC"功能时、生成的 ECC 似乎不正确。 目前有两种解决方法。

    您可以在 CCS8中的编译器版本搜索路径中添加编译器版本5.2.2。 从菜单中选择"Window"(窗口)->"Preferences"(首选项)。 然后添加到编译器5.2.2版的路径。 如图所示(您的机器上的位置可能不同)

    第二个选项是使用 nowECC 生成 ECC 作为编译后处理操作。

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

    您好!

    我已经将旧版编译器添加到我的 CCS8安装中、正如您所说、这可以正常工作并正确编译。 这是我暂时要使用的设置

    我研究了如何使用 NowECC、但该工具在到达文件末尾后仍会崩溃、并且从未为我提供输出文件

    展望未来、此编译器问题是否会得到解决? 或者、我们是否应该将其保留为安装过程的一部分、以便安装此旧版本的编译器并将其添加到 CCS 中? 您能否告诉我最后能够正确生成 ECC 字节的编译器是哪一个?

    谢谢、

    Jonathan

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

    您好、Jonathan、

    我正在与工具团队合作更换链接命令文件中的"FMC"选项以解决问题。 我希望很快能获得更多信息。

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

    是否已针对此问题开发了解决方案? 我是否希望它包含在下一个编译器版本中?

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

    有人告诉我他们确实想为将来的版本修复此问题、但我尚未收到修复此问题的时间表。 同时、有一种变通办法适用于较旧和较新的链接器(可能会继续使用较新版本)。 将链接器命令文件中的 ECC 算法定义替换为以下定义:

    ECC{
    algoFMCF035:address_mask = 0x003ff8 //地址位21:3 */
    汉明_mask =
    0x00AAA750、0x0005D688、0x00154DA8、0x00343C68、0x000CFC18、 0x0003FC00、0x000FFC00、0x000003F8、
    0x4B2E4B2E、0x15571557、0xA699A699、0x38E338E3、0xC0FCC0FC、 0xFF00FF00、0xFF0000FF、0xFF0000FF、
    0xB4D1B4D1、0x15571557、0xA699A699、0x38E338E3、0xC0FCC0FC、 0xFF00FF00、0xFF0000FF、0x00FFFF00
    奇偶校验掩码= 0xFC /*设置哪些 ECC 位是奇数奇偶校验*/
    镜像= F035 /* TMS470M 在 F035中构建*/
    }