Red de conocimientos turísticos - Información de alquiler - Acerca de la depuración de archivos de encabezado en arm bare metal

Acerca de la depuración de archivos de encabezado en arm bare metal

1) Debido a la diferencia entre el estándar C y el estándar C++, por ejemplo, la siguiente función:

void fun(int x, int y);

El nombre de este La función después de ser compilada por el compilador de C es __fun, y el nombre compilado por el compilador de C++ es __fun_int_int (Nota: _stdcall, _cdecl y _fastcall tienen nombres diferentes, los anteriores son solo ejemplos).

En este caso, si el código compilado en C++ llama a una biblioteca compilada con un compilador de C, no se encontrará la función "divertida", lo que provocará que el enlace falle y viceversa.

Con este fin, C++ define el identificador externo "C", que por un lado le dice al compilador que use la convención de nomenclatura de C para nombrar funciones definidas por el externo "C", y por otro lado le dice el vinculador utilice la convención de nomenclatura de C al ver esta definición. Utilice el estándar de C para buscar funciones.

2) Dado que C no admite la etiqueta externa "C", si esta etiqueta se encuentra durante la compilación de C, se informará un error. Por lo tanto, cuando C++ compila bibliotecas disponibles en lenguaje C, agregará "C" externa antes de las funciones en el archivo de encabezado, pero cuando se usa en lenguaje C, este prefijo debe eliminarse del archivo de encabezado, lo cual es más problemático.

Por lo tanto, C++ define una macro predeterminada, __cplusplus, que se define de forma predeterminada si se usa el compilador de C++ y no existe si se usa el compilador de C. Así:

#ifdef __cplusplus

extern "C" {

#endif

void fun(int, int);

#ifdef __cplusplus

}

#endif

De esta manera puedes usarlo en C y C++.

3) En ARM, cada módulo (como el módulo GPIO) tiene un registro correspondiente a la dirección física bajo el bus AHB BUS; la MMU puede asignar la dirección física al descaching virtual y al caché, respectivamente, a la dirección de memoria.

Acceder a esta dirección es en realidad acceder al registro.

¿Por qué rGPIOACON en la estructura controla el registro GPACON de GPIO A? Creo que esto se debe a que el puntero a la variable de estructura se asigna directamente a esta dirección.