Visual Studio 和结构

Visual Studio 和结构

我正在尝试将为微处理器编写的应用程序移植到 Visual Studio,这样我就可以更轻松地运行调试器并扫描代码,而不是在芯片上进行调试,当您想要了解应用程序的编写方式时,这有点麻烦。我根本不是一个编程专家,我不断收到此错误(如下所示),它与结构有关:

error C2059: syntax error : '.'

代码如下所示,有人能给我指出正确的方向吗?

typedef struct usart_reg_map 
{
    volatile uint32 SR;
    volatile uint32 DR;
    volatile uint32 BRR;
    volatile uint32 CR1;
    volatile uint32 CR2;
    volatile uint32 CR3;
    volatile uint32 GTPR;
}usart_reg_map;

#define USART1_BASE ((struct usart_reg_map*))

typedef struct usart_dev 
{
    usart_reg_map *regs;
}usart_dev;

struct usart_dev usart1 =
{
    .regs = USART1_BASE, 
};

usart_dev *USART1 = &usart1;

答案1

有两个问题需要考虑:

  • 您很可能将代码编译为 C++。但 C++ 不是 C,反之亦然 - 它们不是兼容的语言。您需要强制执行 C 编译,这通常是通过命名文件.c而不是 来完成的.cpp

  • 即使在 C 模式下,Visual Studio 对标准 C 的支持也很糟糕。.初始化语法称为指定初始化器并于 1999 年引入。然而,微软一直坚持不升级他们的 C 编译器,直到几年前才做了一些半心半意的尝试。他们可能支持也可能不支持指定的初始化器,我不知道。

我强烈建议任何初学者都使用符合标准的编译器。您可以告诉 VS 使用 gcc 编译器而不是默认的垃圾编译器,或者您可以下载另一个 IDE,例如 Codeblocks,它默认预装了 gcc/mingw。

答案2

在所有情况下,这都需要大量工作,但并非不可能:

  1. 从微型库中找出您需要的类、结构、类型和功能。
  2. 为它们创建文件,类似于微库,最好具有相同的文件结构,但位于不同的位置。这些只能在 PC 版本中运行。
  3. 为非微环境创建一个新项目,其中使用步骤2中的文件而不是步骤1。这可以通过更改包含路径来实现。

在步骤 2 中,如果您想测试,甚至可以在函数中实现一些智能化。此外,您不需要更改任何在您自己创建的微机上运行的文件,因为只有微机库才有 PC 对应库。

关于 C99,请确保您不在通用代码(您的微控制器代码)中使用 C99 特定的功能,如果需要,请将该代码放在单独的函数中,您可以将其移植到 VS,或者可能不需要它们,因为它们是微控制器库或外观函数的一部分。

答案3

您的具体问题是因为,正如您所发现的,指定的初始化程序.regs = USART1_BASE在 Visual Studio 中不起作用。

在 Windows 上测试微控制器项目时,我通常使用 GCC 和 makefile。当尝试使用 C99 等特定标准的功能时,这种方法似乎效果更好。

正如其他人指出的那样,您可能需要进行大量重构才能使整个项目真正在 Windows 上运行。我通常会将项目分解为一些简单的模块,然后使用 GCC 在 Windows 上进行编译和测试,然后将这些经过良好测试的模块组合成一个更大的应用程序,以便在目标设备上运行和测试。

相关内容