c语言 - 我正在使用 CodeWarrior 的 MC9S08DZ60.h 来创建 Visual Studio 项目,我收到错误 C2054:预期'('遵循'_PTDD'



我正在使用CodeWarrior的MC9S08DZ60.h来创建Visual Studio项目。我得到:

错误 C2054:预期"("跟在"_PTDD"之后。

MC9S08DZ60.h是微控制器MC9S08DZ60的头文件(来自飞思卡尔半导体):

typedef union {
    byte Byte;
    struct {
        byte PTDDD0  :1;  /* Data Direction for Port D Bit 0 */
        byte PTDDD1  :1;  /* Data Direction for Port D Bit 1 */
        byte PTDDD2  :1;  /* Data Direction for Port D Bit 2 */
        byte PTDDD3  :1;  /* Data Direction for Port D Bit 3 */
        byte PTDDD4  :1;  /* Data Direction for Port D Bit 4 */
        byte PTDDD5  :1;  /* Data Direction for Port D Bit 5 */
        byte PTDDD6  :1;  /* Data Direction for Port D Bit 6 */
        byte PTDDD7  :1;  /* Data Direction for Port D Bit 7 */
    } Bits;
} PTDDDSTR;
#ifndef MXVDEV //sri
extern volatile PTDDDSTR _PTDDD @0x00000007;
#else
PTDDDSTR _PTDDD;
#endif
#define PTDDD             _PTDDD.Byte
#define PTDDD_PTDDD0      _PTDDD.Bits.PTDDD0
#define PTDDD_PTDDD1      _PTDDD.Bits.PTDDD1
#define PTDDD_PTDDD2      _PTDDD.Bits.PTDDD2
#define PTDDD_PTDDD3      _PTDDD.Bits.PTDDD3
#define PTDDD_PTDDD4      _PTDDD.Bits.PTDDD4
#define PTDDD_PTDDD5      _PTDDD.Bits.PTDDD5
#define PTDDD_PTDDD6      _PTDDD.Bits.PTDDD6
#define PTDDD_PTDDD7      _PTDDD.Bits.PTDDD7

Codewarrior 寄存器映射不遵循 C 标准。用于在特定地址分配变量的 @ 运算符不是标准的,也不是 int 以外的任何类型的位字段。

他们使用非标准语法的原因是因为他们希望为寄存器生成调试信息,以便用户可以在调试器中查看它们。您可以使用标准 C 手动定义它们:

#define PTDDD (*(volatile unsigned char*)0x0007)

但是,如果您打算在寄存器映射中定义所有寄存器,这将需要相当多的工作。

就我个人而言,我讨厌非标准语法,所以我使用我自己编写的小程序来解析 pdf 手册,并根据手册中的名称生成与上述语法相同的寄存器映射。


然而。。。为什么要在Windows中编译MCU寄存器映射?这没有任何意义。Visual Studio知道飞思卡尔微控制器是无效的,因此无法为它们生成任何二进制文件。

如果预处理器未定义MXVDEV,则将具有以下声明

extern volatile PTDDDSTR _PTDDD @0x00000007;

@0x00000007部分可能是CodeWarrior编译器的扩展,它不在Visual Studio编译器中,这意味着你会得到一个错误。

CodeWarrior 中的大量内容不遵循 C 标准。Lundin 说这是 100% 正确的,这样做是为了调试器可以查看 HIWAVE 中的寄存器。

位寄存器定义也是非标准的,在某些情况下,在将代码移植到其他处理器时会导致我出现问题。许多其他工具链遵循严格的 ANSI C 规则。

我能想到的唯一原因,为什么它被拉到Visual Studio中是因为提出问题的人要么正在为该处理器开发工具,要么可能是模拟器,甚至是一个完整的IDE/开发工具。考虑到Codewarrior现在有多糟糕,并非完全不可能。

向飞思卡尔投诉是徒劳的。我一路去了我所在地区的联合总经理,甚至在他们的论坛上抱怨,他们不听。

最新更新