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.

[参考译文] MSP430FR5994:H文件混淆

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1093398/msp430fr5994-h-file-confusion

部件号:MSP430FR5994

我有这两个h文件:

  • MSP430F5XX_F6XXGENERIC.h
  • MSP430FR5994.h

有些寄存器在一个文件中正确命名,而另一些寄存器在另一个文件中正确命名。  具体来说 ,ADC12_b文件在特定于设备的h-文件中似乎是正确的,而timer_a在通用h-文件中似乎是正确的。

例如,在库timer_a. c文件中 ,使用在Generic文件中定义的寄存器偏移OFS_TAxCCR0。  但特定于设备的文件定义 了OFS_TA0CCR0。  两者具有相同的偏移值(0x12)。

如果同时包含这两个文件,则会收到其它寄存器重复定义的警告。

管理这两个文件的正确方法是什么?

谢谢!

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

    通常的方法是包含msp430.h,并让编译器根据MCU设置来整理要包含的内容。(这只是一个长长的#ifdef系列。)

    但它通常是特定于设备的头文件。

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

    我在概念上同意您的看法,但我在使其发挥作用时遇到了困难。

    我将项目属性中的所有预定义符号都摊回到设备_MSP430FR5994_。  我在所有c文件中添加了#include <MSP4S.h>。

    我收到数百条类似如下的警告:
    "C:/ti/ccs1000/CCS_base/MSP430/include/msp430fr5xx_6xxgeneric.h",第454行:警告#48-D:宏"ADC12SHT0_0"的重新定义不兼容(在“C:\ti\ccs1000\MSP4\CCS\base\msp430frh”的第686行声明)

    此外,我收到以下错误:

    "../AFE.c",第41行:错误#20:标识符"ADC12_B_SAMPLEHOLDSOURCE_SC"未定义
    "../AFE.c",第42行:错误#20:标识符"ADC12_B_CLOCKSOURCE_MCLK"未定义
    "../AFE.c",第43行:错误#20:标识符"ADC12_B_CLOCKDIVIDER_2未定义

    如果我强制编译器选择其中一个h文件,我可以解决许多错误,但不是所有错误。

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

    现在我可以看到您正在使用CCS编译器,它不同于我所使用的GCC。 对于CCS,我只能建议阅读文档。

    看着GCC报头,我看到了OFS_TA0CCR0等的定义,但想不出为什么我会使用它而不仅仅是TA0CCR0。

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

    David,我正在使用的MSP库使用来自模块基本地址的偏移,以便在有多个模块(例如TA0,TA1)时允许使用通用代码。

    感谢您的关注。

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

    Dan,您好!

    很抱歉稍后回复您,您使用GCC编译器? 您是否使用我们的示例设计您的项目?

    还是只创建一个空的人并自己添加一些文件?

    谢谢!

    此致

    强生

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

    我正在将CCS与提供的MSP430库配合使用。  这些对我使用其他MSP430器件非常有用,但5994目标会给我这些警告和错误。

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

    Dan,您好!

    找不到“MSP430F5XX_F6XXGENERIC.h”文件,OFS_TAxCCR0在legacy.h文件中定义:

    谢谢!

    此致

    强生

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

    谢谢。  我感到困惑的是,您没有找到该文件,因为它位于基目录中。  C:/ti/ccs1000/CCS/CCS_base/MSP4S/include/msp430fr5xx_6xxgeneric.h 如何说服CCS排除"generic.h"文件并添加"legend.h"?  如何修改CCS项目设置以进行编译?  正确使用MSP430库对我的工程团队非常重要。

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

    Dan,您好!

    我用driverlib创建一个项目,然后一切看起来都正常。

    也许您可以在SDK中创建新项目或引用我们的示例代码。

    谢谢!

    此致

    强生

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

    我正在使用MSP430_driverlib_2_91_31_01中提供的代码。  我不明白您所描述的内容。

    我正在运行10.0 .0。

    请澄清。

    谢谢。

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

    我不知道CCS,但有了GCC,generic.h文件的包含由MSP430.h中的各种#ifdef语句控制 当然,如果您愿意,还可以明确包含。 (或者可能由IDE负责。)

    在msp430fr5994.h上,我看到它定义了__MSP430_HS_TAX__,它控制着您在legacy.h中所需的符号,并且它包括legacy.h,除非定义了exclude_legacy符号。 快速检查显示在GCC中使用OFS_TAX_符号 时没有问题。

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

    David -非常感谢。  这是我关于CCS的第三个项目,使用3种不同的MSP430处理器。  前两个不存在这些问题-配置参数和H文件都运行正常。  有3个不同的H文件相互矛盾,这令人困惑和失望。  我知道我可以用推土机把它弄清楚,并创建我自己的寄存器和位图,但这不是它应该发挥的作用。

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

    Dan,您好!

    David的评论是否能解决您的问题?  

    谢谢!

    此致

    强生

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

    David的回答说,CCS未正确管理H文件,我应该使用#defines手动调整这3个文件之间的链接。

    我不认为这是一个解决办法,但如果这是你的建议,我会勉强这样做。

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

    不完全是。 我说过,GCC对此没有任何问题。 我不知道CCS为什么会做一些不同的事情。 查看头文件并查看它们正在执行的操作。 它们是否正在执行您不希望的操作,因为符号已定义或未定义?

    我提到GCC没有问题的原因是,我认为两个系统的标头是从一个共同来源生成的,应该非常相似。

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

    我将项目属性中的所有预定义符号都摊回到设备_MSP430FR5994_。  我在所有c文件中添加了#include <MSP4S.h>。

    我收到数百条类似如下的警告:

    [/引述]

    您能否发布生成这些警告的示例项目? 因为我不知道是什么导致 了msp430fr5xx_6xxgeneric.h被包括在内。

    TI MSP430编译器具有为源文件创建预处理输出的选项,这有助于调试包含问题。 请参阅 预处理源文件 或 MSP430编译器手册

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

    我找到了对通用h文件的引用。  我对它们进行了评论,所有的东西都汇编妥当,这是有意义的。  我不知道为什么此文本存在于hw_memmap.h文件中,该文件包含在库的大多数h文件中。

    #ifndef __HW_MEMMAP__
    #define __HW_MEMMAP__

    #define __DRIVERLIB_MSP430FR5XX_6XX_family__
    //*************************************************************************************************
    //
    //包括特定于设备的头文件
    //
    //*************************************************************************************************
    #include <MSP4S.h>

    #ifndef __Autogenerated __
    #include "msp430fr5xx_6xxgeneric.h"
    #endif
    #include "msp430fr5xx_6xxgeneric.h"

    #include "stdint.h"
    #include "stdbool.h"

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

    Dan,您好!

    您的问题是否已解决? 是否可以正常编译项目?

    谢谢!

    此致

    强生

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

    通过注释掉对_generic.h文件的引用,我的程序编译时没有错误或警告,并且可以正常运行。

    很高兴知道为什么该文件包含在hw_memmap.h文件中,该文件级别很低,不应由开发人员编辑-它是一个库文件。

    我将此标记为已解决。