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.

[参考译文] 编译器/MSP430FR5848:编译器的__ MSP430_BASEADDRESS_TLV_定义是什么?

Guru**** 2524550 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/802962/compiler-msp430fr5848-what-defines-__msp430_baseaddress_tlv__-to-the-compiler

器件型号:MSP430FR5848

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

你(们)好。

我一直在浏览一些 driverlib 以了解如何实现 tlv 层、并遇到两个实例、在这两个实例中、为器件 ID 字段指定了确切的地址、即0x1A04和0x1A05。

我很惊讶、对于每个芯片、它们没有相对于运行时头文件中的 TLV_base 定义进行定义。

我为此指定了它们、编译失败的原因是 __MSP430_BASEADDRESS_TLV_在任何地方都不存在。 显然、如果我将其定义为0x1A00、它适用于我的芯片-但我不确定该地址是否适用于其他芯片。 我分析了所有头文件并生成了 TLV_END 的可能值列表、该列表以0x1AFF 或0x13FF 的形式出现、TLV_START 为0x1A08或0x13C0。

我看了这个芯片、i2020和 tlv 实际上开始于0x13C0、而 fr5848的 tlv 开始于0x1A00 -头文件中的 TLV_START 含义中的冲突。 它们的定义显然不同。

在计算校验和时、用于 fr5842的 TLV CRC 的数据构成了从存储的 CRC 之后到结束的范围、而对于 i2020、它构成什么? 如何通过编程方式确定此范围?

针对 fr5848的 TLV_START (0x1A08)的定义似乎是芯片记录的第一个字节、这将是第一个有效标签、但是这个'信息块'中的某些字节也被制成为 CRC 的一部分。

driverlib 实现的标签搜索算法、用于解析 TLV 从这些文件中定义的 TLV_START 到 TLV_END 的标签标识符搜索、跳过中间的任何字节。 那么、如果 i2020的 CRC 包含有效的标签标识符、会发生什么情况?

fr5848似乎具有正确的结构,以便此搜索正常运行。

一天结束时、我需要了解三个方面:

  • 谁定义 了__MSP430_BASEADDRESS_TLV__、ME 或编译器(这表明我缺少某些内容)
  • TLV_START 实际上表示什么
  • 如何通过编程方式确定 TLV CRC 寄存器中存储的字节的有效 CRC 范围

此致、

Matt P

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

    您好!

    [引用用户="Matthew Sergei Perrin"]

    我一直在浏览一些 driverlib 以了解如何实现 tlv 层、并遇到两个实例、在这两个实例中、为器件 ID 字段指定了确切的地址、即0x1A04和0x1A05。

    我很惊讶、对于每个芯片、它们没有相对于运行时头文件中的 TLV_base 定义进行定义。

    我为此指定了它们、编译失败的原因是 __MSP430_BASEADDRESS_TLV_在任何地方都不存在。 显然、如果我将其定义为0x1A00、它适用于我的芯片-但我不确定该地址是否适用于其他芯片。 我分析了所有头文件并生成了 TLV_END 的可能值列表、该列表以0x1AFF 或0x13FF 的形式出现、TLV_START 为0x1A08或0x13C0。

    [/报价]

    你是对的。   _MSP430_BASEADDRESS_TLV_ 或 TLV_BASE 定义似乎不能在任何地方使用、这可能是由于该地址因器件而异。 我建议使用 TLV_START 作为有效基址、因为此定义是特定于器件的、并且在该器件的头文件中应该是正确的。 我将让我们的软件团队了解这一点、以便他们可以删除这些未使用的定义。 感谢您指出!

    [引用用户="Matthew Sergei Perrin">我看了这个芯片、i2020和 tlv 实际上开始于0x13C0、而 fr5848的 tlv 开始于0x1A00 -冲突的含义是标头中的 TLV_START。 这些定义显然不同。[/引述]

    完全正确。 TLV 结构与器件相似、但可能存在于不同的存储器位置。 有关 TLV 信息、最好参考特定器件的数据表。

    [引用用户="Matthew Sergei Perrin"]

    在计算校验和时、用于 fr5842的 TLV CRC 的数据构成了从存储的 CRC 之后到结束的范围、而对于 i2020、它构成什么? 如何通过编程方式确定此范围?

    针对 fr5848的 TLV_START (0x1A08)的定义似乎是芯片记录的第一个字节、这将是第一个有效标签、但是这个'信息块'中的某些字节也被制成为 CRC 的一部分。

    driverlib 实现的标签搜索算法、用于解析 TLV 从这些文件中定义的 TLV_START 到 TLV_END 的标签标识符搜索、跳过中间的任何字节。 那么、如果 i2020的 CRC 包含有效的标签标识符、会发生什么情况?

    fr5848似乎具有正确的结构,以便此搜索正常运行。

    [/报价]

    为了在多个器件之间实现此功能、我将为每个选定器件使用预处理程序#defines、并使用不同的代码根据相关定义指定该器件的 CRC 范围。 您可以在以下主题中了解有关如何执行此操作的更多信息。

    预处理器

    此致、

    James