Código de uso compartido de varios proyectos AVR - Administración de proyectos grandes

3

Estoy trabajando en un proyecto grupal que se basa en el diseño de un sistema de bus CAN automotriz. Esencialmente, hay varios 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 están utilizando los controladores CAN CAN de Microchip y los transceptores CAN MCP2561. Nuestro equipo está formado por varios miembros, cada uno trabajando en sus propios nodos. Estamos utilizando Github & SourceTree para el control de la fuente.

Algunos códigos son comunes a cada nodo, principalmente las funciones SPI / CAN para TX y RX. Tenemos este trabajo a nivel de prueba de concepto en este momento. Estoy acostumbrado a trabajar en proyectos individuales; sin embargo, estoy perdido en cuanto a 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 común de "biblioteca" en un directorio al que se hace referencia en cada código fuente de los nodos. De esta manera, los cambios en el código de la "biblioteca" solo deben ocurrir 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 de si debo: a) Agrupe todo el código compartido en una carpeta y #include "../Shared lib / xxxx.h"

b) ¿Descomponer todo el código compartido en una carpeta y configurar el compilador de Eclipse para incluir 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 la dirección. ¿Supongo que todo depende de cómo administrar múltiples proyectos de código (nodos) por múltiples miembros en múltiples plataformas? Parece que soy bastante bueno en temas básicos, pero este es el siguiente nivel en organización de códigos para mí.

EDITAR:

Para agregar a esta pregunta, ¿cómo puedo crear un proyecto Github con todas mis propias bibliotecas y macros personalizadas que puedo mantener actualizadas y luego incluir en cualquier proyecto en el que trabaje?

    
pregunta Rambo

2 respuestas

3

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

En cuanto a un repositorio github para bibliotecas, recomiendo usar el subárbol git. Esto incluirá el historial completo de la biblioteca dentro de los repositorios del proyecto y permite que los compromisos se ingresen en los repositorios del proyecto desde el repositorio de la biblioteca o se separen en el repositorio del proyecto y se devuelvan al repositorio de la biblioteca. Yo 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.

    
respondido por el alex.forencich
2

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 un problema y perderá cualquier pista de auditoría y la capacidad de revertir. Por supuesto, hay problemas con cualquier sistema de control de versiones, pero son mejores que las alternativas.

    
respondido por el Scott Seidman

Lea otras preguntas en las etiquetas