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.

[参考译文] LAUNCHXL2-570LC43:TMS570 链接器生成的 CRC 表

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1607324/launchxl2-570lc43-tms570-linker-generated-crc-table

部件号: LAUNCHXL2-570LC43

您好:

我遵循了 SPNA235–2016 年 8 月、以便创建链接器生成的 CRC 表。 如下所示:

.text:{}palign=8、fill=0xffffff、crc_table (textCrcTable、algorithm=TMS570_CRC64_iso)> FLASH0 | FLASH 1

在源代码 (.c) 中之后、我声明了 extern 变量、如下所示:  

extern const crc_table textCrcTable;

这样我就可以到达链接器生成的 CRC 值。 但是、当我对 MISRA C 2012 执行规则检查时、会出现“'textCrcTable'对象没有定义“问题。 不过我正在同一源文件中定义的函数中使用。

该规则规定“具有外部链接的标识符应具有一个外部定义。“

自从 SPNA235–2016 年 8 月文档指出:

->有多种方法可以定义和访问由链接器创建的 CRC 表。 建议为 C 代码中的 CRC 表使用以下定义:  

extern const crc_table _my_crc_table;  

 

您能帮助我实施通过 MISRA 规则检查的任何其他方法吗?

谢谢你。

 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    当我对 MISRA C 2012 执行规则检查时、出现问题“'textCrcTable'对象没有定义。“

    您的项目编译中是否包含或排除了 MISRA_C 规则?  默认情况下、排除所有 Misra C 规则。

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

    声明为可在不同文件之间访问的变量或函数(外部链接)必须使其实际实现(定义)在整个程序中仅出现一次、以避免链接器错误和未定义的行为、即使使用 extern 多次声明也是如此。

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

    感谢您的答复。

    问题是链接器会生成 CRC 表并将其放置在闪存中的特定段中。 根据参考文档、建议可以通过声明与表同名的 extern 变量来访问该段中的数据。 因此、您会声明 extern 变量、但源代码中不存在该定义。 因为链接器 已经定义并存储了该变量的值。 此外、如果您对该变量进行定义、则会丢失链接器已写入的数据。  

    因此、我想除了生成这个外部问题之外、还要寻找一种方法来访问存储在闪存中的数据。

    对于 MISRA、使用另一个静态分析工具检查 I m。 但违反工具报告是可以理解的。

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

    我将示例导入到 CCS 12.8 中、并在一个 C 文件中声明了外部常量: extern const crc_table _my_crc_table。 我在 CCS 12.8 中选择了所有 MISRA C 2004 规则、没有得到您提到的错误:  

    “具有外部链接的标识符应具有一个外部定义。“

    extern const crc_table textCrcTable;

    请将 CRC 表映射到链接器 cmd 文件中的.const 段?

    .text:{}palign=8、crc_table (_my_crc_table、algorithm=TMS570_CRC64_iso)> FLASH0 | FLASH1 /*可执行代码和常量*/
    .const:{}palign=8、crc_table (_my_crc_table、algorithm=TMS570_CRC64_iso)> FLASH0 | FLASH1 /*显式初始化的全局和静态常量变量*/
    .cinit:{}palign=8、crc_table (_my_crc_table、algorithm=TMS570_CRC64_iso)>显式初始化的全局变量和静态变量的 FLASH0 | FLASH1 /*表*/

    .TI.crctab:{}palign=8 > FLASH0 | FLASH1 /*由链接器生成的 CRC 表是在特殊段.TI.crctab */中创建的