¿Qué debo saber al hacer una biblioteca para el Arduino?

8

Se me ocurre que, más allá de mi problema actual, debería preguntar: "¿Qué debo saber al hacer una biblioteca para el Arduino?"

Primero, lo que estoy haciendo:

Estoy usando Eclipse como editor y escribiendo código en C ++. He escrito una aplicación Arduino simple que incluye mi archivo de cabecera y estoy trabajando por errores.

Primer problema: ¿cómo hago una 'compilación limpia'? Estoy viendo errores que creo que he solucionado, casi como si el archivo de encabezado estuviera en caché. (Sí, es muy probable que esté haciendo algo estúpido [ edit : lo era], pero todavía me gustaría saber cómo limpiar la biblioteca, y no sé dónde están los archivos de objetos).

En segundo lugar: ¿de qué convenciones debo tener en cuenta? No he usado el Arduino tanto como me gustaría, y es muy bueno estar programando en C ++, pero sé que la intención de las bibliotecas es mantener las cosas agradables y simples para los usuarios. ¿Hay convenciones para los nombres de funciones? ¿Crear constantes (parece que el espacio de nombres global está contaminado con #defines)? Y así sucesivamente.

Por último, ¿hay algo más que deba saber?

Debo mencionar que he visto el Tutorial de la Biblioteca de Arduino , lo cual es bueno, pero no lo hace ' vas muy lejos También he echado un vistazo a algunas de las bibliotecas que están instaladas en mi sistema.

    

1 respuesta

3

Voy a tomar una puñalada. No he escrito código para Arduino, pero he hecho mucha programación en C y C ++. Ayudaría si realmente viera sus errores, pero no obstante.

Lo principal que debe recordar siempre al utilizar C ++ con el código C es que su código C ++ necesita funciones declaradas con "C" externa "si desea que el código C pueda vincularse con el código C ++. El "extern" C "" es lo que le dice al compilador de C ++ que estoy creando un código vinculable para archivos C o que estoy usando código de C archivos. Por lo tanto, todas sus funciones en el encabezado de la API de la biblioteca deben correlacionarse con una función en el archivo de origen definido como "extern" C "dosímetro vacío ()". Si está intentando utilizar clases en C ++, recuerde que el código C no puede llamarlo, deberá crear funciones (extern "C") para acceder al objeto. Ahora, si su código C está compilado con un compilador de C ++, entonces no se preocupe por "extern" C ".

Si desea llamar al código C dentro de su código C ++, necesita envolver el encabezado C con una construcción como esta:

#ifdef ___cplusplus
extern "C" {
#endif

///all my C function declarations... yada yada

#ifdef __cplusplus
}  //end extern "C"
#endif

Si trabajas en C ++, no uses mucho # defines a menos que estés creando marcas de tiempo de compilación como "DEBUG" o "VERSION2" para crear conjuntos especiales de código. De lo contrario, utilice "const int / char / float" para las definiciones de número para la verificación segura de tipos. Los compiladores suelen ser lo suficientemente inteligentes como para optimizarlos, por lo que terminan en un espacio de código / ROM (aunque depende). Además, no cree MACROS, use las funciones en línea. Además, no siempre siga la convención cuando programe si es estúpido, como usar muchas macros y números definidos en C ++. Lo mismo se aplica a la versión C99 de C, ha agregado cosas como funciones en línea y consts de C ++. La industria se da cuenta de que la cantidad de código con errores y el código difícil de mantener proviene del uso excesivo del lenguaje del preprocesador.

Eclipse generalmente almacena los archivos obj en un directorio debajo de su proyecto. Si está realizando una compilación "Depurar", se encuentra debajo de la carpeta "Depurar" debajo de la carpeta de su proyecto. Si está realizando una compilación "Release", busque en "Release", etc. Normalmente, una compilación limpia simplemente funciona para mí en Eclipse, así que no sé qué está mal con su configuración. Supongo que asegúrate de no estar creando encabezados precompilados.

    
respondido por el Jay Atkinson

Lea otras preguntas en las etiquetas