Múltiples Proyectos AVR Compartir Código - Gestión de Grandes Proyectos

Estoy trabajando en un proyecto grupal que se basa en el diseño de un sistema de bus CAN automotriz. Esencialmente, hay múltiples nodos diferentes en el bus, que actúan como sensores, pantallas, controladores o transmisores. Mi pregunta es ¿cómo compartir/incluir código común?

Cada nodo se basa en un Atmel AVR µC, generalmente un Atmega o Attiny. Todos los nodos utilizan controladores CAN MCP2515 de Microchip y transceptores CAN MCP2561. Nuestro equipo consta de varios miembros, cada uno de los cuales trabaja en sus propios nodos. Estamos usando Github y SourceTree para el control de fuentes.

Algunos códigos son comunes a cada nodo, principalmente las funciones SPI/CAN para TX y RX. Tenemos esto funcionando a nivel de prueba de concepto en este momento. Estoy acostumbrado a trabajar en proyectos individuales, sin embargo, no sé cómo compartir código entre proyectos de manera efectiva.

Realmente, lo que me gustaría hacer es tener el código de cada nodo en su propio directorio y luego tener el código de 'biblioteca' común en un directorio al que se hace referencia en el código fuente de cada nodo. De esta manera, los cambios en el código de la 'biblioteca' solo deben realizarse en un lugar y no en varias copias.

Algo como esto:
Code>> Display Node>> Display_main.c Sensor Node>> Sensor_main.c TX Node>> TX_main.c Shared lib>> SPI.c SPI.h MCP2515_func.c MCP2515_func.h

Estoy usando el complemento Eclipse + AVR para mi desarrollador, otros miembros están usando Atmel Studio.

No estoy muy seguro si debería: a) Agrupar todo el código compartido en una carpeta y #incluir "../Shared lib/xxxx.h"

b) ¿Agrupar todo el código compartido en una carpeta y configurar el compilador de Eclipse para que incluya esta carpeta? entonces #include "xxxx.h" funcionará? (¿Qué pasa con los amigos de ATStudio?)

c) ¿Crear un proyecto de Eclipse sin main.c, que contenga todo el código e incluir este proyecto con mis otros proyectos?

d) ¿Compilar el código en una 'biblioteca estática'?

He investigado bastante y no he encontrado ninguna buena idea de dirección. Supongo que todo se reduce a cómo administrar varios proyectos de código (nodos) por parte de varios miembros en varias plataformas. Parece que soy bastante bueno en cosas básicas, pero este es el siguiente nivel en la organización del código para mí.

EDITAR:

Para agregar a esta pregunta, ¿cómo podría crear un proyecto de Github con todas mis propias bibliotecas y macros personalizadas que pueda mantener actualizadas y luego simplemente incluirlas en cualquier proyecto en el que trabaje?

Respuestas (2)

Su opción b es probablemente la más razonable. Cada entorno debería poder establecer rutas de biblioteca. Otra opción es desacoplar la compilación del IDE con archivos MAKE y establecer allí la ruta de la biblioteca. Sé que AVR Studio admite proyectos basados ​​en archivos MAKE. Supongo que eclipse también lo hace. Esta podría ser una buena opción para considerar si tiene diferentes personas en el equipo que usan diferentes IDE.

En cuanto a un repositorio de github para bibliotecas, recomiendo usar git subtree. Esto incluirá el historial completo de la biblioteca dentro de los repositorios del proyecto y permitirá que las confirmaciones se introduzcan en los repositorios del proyecto desde el repositorio de la biblioteca o se seccionen en el repositorio del proyecto y se envíen de vuelta al repositorio de la biblioteca. Uso esta configuración para un montón de mis proyectos; eche un vistazo a mi github y busque repositorios con una carpeta lib en la raíz, como verilog-ethernet.

Gracias Alex. ¿Quizás conoces algún recurso en línea que muestre cómo crear este tipo de configuración? ¿Quizás una buena guía de makefile adaptada a AVR y cosas integradas? Soy un chico de Linux, así que tiene sentido, pero estoy pensando más en mis compañeros de equipo basados ​​en Windows.
Tengo un repositorio de plantilla de proyecto aquí github.com/alexforencich/templates que tiene proyectos makefile para avr y xmega. También es posible instalar gnu make en Windows.

Use una herramienta de control de versiones como subversion, donde todos los involucrados pueden consultar la última copia y confirmar los cambios. Trabajar desde un directorio compartido es buscar problemas, y pierde cualquier registro de auditoría y la capacidad de retroceder. Por supuesto, hay problemas con cualquier sistema de control de versiones, pero son mejores que las alternativas.

Hola Scott, mencioné brevemente que estamos usando Git, sin embargo, estoy más interesado en cómo mantener el código común entre proyectos en un directorio central y vincularlo. ¿Se compilaría este código por separado o en su lugar?