Estoy tratando de trasladar una aplicación escrita para un micro a Visual Studio para poder ejecutar más fácilmente el depurador y escanear el código, en lugar de depurar en el chip, lo cual es un poco molesto cuando se quiere saber cómo funciona la aplicación. fue escrito. No soy en absoluto un gurú de la programación, y sigo recibiendo este error, que figura a continuación, que está relacionado con una estructura:
error C2059: syntax error : '.'
El código está en la lista a continuación, ¿puede alguien apuntarme en la dirección correcta?
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;
.regs = USART1_BASE,
que parece no estándar, pero ninguno de ese código UART funcionará en una PC sin muchos cambios.designated initializer
. El OP debe asegurarse de que los indicadores del compilador estén configurados para admitir C99, que es el estándar que agregó esto.CreateFile
llamada.Respuestas:
En todos los casos es mucho trabajo, pero es posible:
En el paso 2, puede hacer incluso algo de inteligencia en las funciones si desea probar eso. Además, no necesita cambiar ningún archivo que se ejecute en el micro que usted mismo creó, porque solo las micro bibliotecas tienen una contraparte de PC.
Acerca de C99, asegúrese de no usar las funciones específicas de C99 en el código genérico (su código del microcontrolador) y, si lo necesita, cree ese código en funciones separadas que pueda transferir a VS o tal vez no sean necesarias Como forman parte de las bibliotecas de microcontroladores o funciones de fachada.
fuente
Hay dos cuestiones a considerar:
Lo más probable es que esté compilando el código como C ++. Pero C ++ no es C y viceversa, no son lenguajes compatibles. Debe imponer la compilación de C, que normalmente se hace al nombrar su archivo
.c
en lugar de.cpp
.Incluso en el modo C, Visual Studio tiene un soporte horrible para el estándar C. El
.
La sintaxis de inicialización se conoce como inicializadores designados y se introdujo en el año 1999. Sin embargo, Microsoft ha insistido en no actualizar su compilador de C, hasta hace algunos años un intento poco entusiasta. Pueden o no pueden apoyar inicializadores designados, no lo sé.Recomendaría encarecidamente a cualquier programador principiante que use un compilador estándar compilante en su lugar. Puede decirle a VS que use el compilador gcc en lugar del crap predeterminado, o puede descargar otro IDE como Codeblocks, que viene con gcc / mingw preinstalado por defecto.
fuente
Su problema específico es porque, como ha descubierto, el inicializador designado
.regs = USART1_BASE
No funciona en Visual Studio.Normalmente uso GCC y un makefile al probar mis proyectos de microcontroladores en Windows. Esto parece funcionar mucho mejor cuando se intenta usar características de un estándar específico como C99.
Como han señalado otros, es probable que tenga que hacer mucha refactorización para que todo su proyecto se ejecute en Windows. Por lo general, dividí mi proyecto en módulos simples que puedo compilar y probar en Windows con GCC, y luego combino esos módulos bien probados en una aplicación más grande que puedo ejecutar y probar en el dispositivo de destino.
fuente