【问题标题】:Change from C compiler to C++ compiler causes compiler errors for MSP430 firmware从 C 编译器更改为 C++ 编译器会导致 MSP430 固件的编译器错误
【发布时间】:2012-09-20 02:40:24
【问题描述】:

我正在尝试使用新编译器(C++ 编译器,在 Visual Studio 下使用 VisualGDB)为德州仪器 MSP430 微控制器编译一个经过验证的真实固件。

此固件的所有先前版本均使用 C 编译器编译,零错误和零警告。从 C 编译器到 C++ 编译器的更改一定是我的问题的原因。 (用C编译器编译的代码已经运行了五年没有问题。)

鉴于此代码 sn-p:

#include <msp430x14x.h>
WDTCTL = WDTPW+WDTHOLD;

我收到此错误:

错误:'WDTCTL' 没有命名类型 c:\msptest\LedBlink\LedBlink.cpp

WDTCLT 在 msp430x14x.h 中声明。

有人可以指点我正确的方向吗?

【问题讨论】:

  • #define WDTCTL_ 0x0120 /* 看门狗定时器控制 */ sfrw(WDTCTL, WDTCTL_);
  • 那是不符合标准的代码。您需要将类型 int 添加到该声明中。
  • C 不是 C++ 的子集。没有理由期望它能够正常工作,即使它可以编译。 C 和 C++ 之间有许多微妙而奇怪的区别。例如,'a' 在 C++ 中的类型为 char,在 C 中为 int
  • 您给我们的定义定义了 WDTCTL_。 WDTCTL 是如何定义的?您还可以给我们更多关于WDTCTL = WDTPW+WDTHOLD; 的背景信息吗?它在一个函数中吗?是全局声明的吗?
  • 您需要明确定义 C 编译器(供应商/版本)和 C++ 编译器。将信息添加到问题中,而不是作为评论 - 您之前添加的评论也是如此。

标签: c++ c embedded msp430


【解决方案1】:

有两种可能:

  • 每个编译器提供的msp430x14x.h 是不同的 - 这种头文件没有标准格式,每个供应商可能对它们进行不同的定义。
  • 您正在将一个编译器的标头与另一个编译器一起使用,并且它使用了不兼容的编译器扩展或语法。

毫无疑问,这里有大量特定于编译器的或“宏魔法”——您需要查看的是这些宏是如何被预处理器扩展的。编译器抱怨的是扩展代码,而不是您发布的源代码。

这里使用了预处理器来创建在其他情况下不是有效的 C 或 C++ 的语法,因此如果不考虑扩展,则无法确定太多。而且由于每个编译器都可能提供不同的 msp430x14x.h,而在不确切知道使用什么 C 和什么 C++ 编译器的情况下,也不能说太多。请记住,必须考虑 full 扩展 - 因此,如果宏是根据其他宏定义的,则它们也必须进行扩展。 GCC 有一个 n 选项 top output 预处理器输出,也可以直接单独运行预处理器(可执行文件为“cpp”)。

【讨论】:

    【解决方案2】:

    问题在于WDTCTL 是使用sfrw 定义的,尽管您的代码中没有显示,sfrwiomacros.h 中定义为内联asm 语句。显然,内联 asm 将依赖于处理器,适用于 msp430 的内容在 Visual Studio 中不起作用。

    【讨论】:

    • 他似乎使用 Visual Studio 作为 IDE,但使用 GCC 作为编译器。我认为 Visual Studio 在这里有点牵强。
    【解决方案3】:

    感谢所有回复。除了我提出的问题之外,这些回答很有帮助。

    我发现并纠正了这个问题。我必须承认,问题是我的一个粗心错误。我将完成的 C 程序中的代码剪切并粘贴到测试程序中,省略

    int main()

    因此,编译器抱怨的赋值语句在源代码的错误范围内。

    我过早地发布了我的问题。

    也就是说,您的回答对于决定继续使用 GCC 编译器(使用 Visual Studio 作为 IDE)或使用我用于此固件所有先前版本的相同编译器最有帮助。我从您提供的一系列答案中学到了很多东西。

    谢谢!

    【讨论】:

      猜你喜欢
      • 2011-02-20
      • 2014-09-29
      • 2021-05-17
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 2013-05-03
      • 2010-11-24
      相关资源
      最近更新 更多