0

我正在使用MC9S08DZ60.hCodeWarrior创建一个 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
4

3 回答 3

1

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

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

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

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

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


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

于 2012-08-17T06:12:37.537 回答
0

如果MXVDEV未由预处理器定义,您将拥有声明

extern volatile PTDDDSTR _PTDDD @0x00000007;

@0x00000007部分可能是 CodeWarrior 编译器的扩展,它不在 Visual Studio 编译器中,这意味着您会收到错误消息。

于 2012-08-17T05:47:15.177 回答
0

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

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

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

向飞思卡尔抱怨是徒劳的。我已经为我的地区一路跑到联合GM,甚至在他们的论坛上抱怨,他们不听。

于 2013-07-19T09:47:53.103 回答