Definir pines para uso por una biblioteca xc8

3

Tengo un código que me gustaría usar en varios proyectos, así que me gustaría ponerlo en una biblioteca

La biblioteca no utilizará características especiales del chip y los dos pines que use para hacer su trabajo solo tienen que ser de E / S general

Como planeo usar esto para múltiples proyectos, estos proyectos deberán especificar qué pines son estos dos pines en una base de proyecto por proyecto

Mi pregunta es cómo puedo configurar mi biblioteca y código en cada proyecto para poder definir qué pines quiero usar dentro de cada proyecto, independientemente de la biblioteca.

Usando el compilador XC8 para PIC10s y 16s

Cualquier orientación apreciada

    
pregunta BishopsToenail

2 respuestas

0

No sé si eso cambió recientemente, pero hace un año o dos me contacté con el soporte técnico de Microchip que confirmó que XC8 no admite bibliotecas como tal.

Lo que puedes hacer es tener el archivo C en una carpeta "compartida" e incluirlo en los distintos proyectos.

Los pines pueden ser:

  • definido por macros (#define) en las opciones del compilador, o en un encabezado de un nombre predefinido, por ejemplo. "hardwareconfig.h", que incluiría su módulo y el suministro de proyectos;
  • suministrado en la inicialización por punteros a registros LAT / PORT y máscaras de los bits;
  • su módulo podría declarar funciones para el manejo de pines de bajo nivel, llamar a esos, y los diversos proyectos los implementarán como les parezca.
respondido por el Szidor
0

Define un estricto que soporta bits. Utilice ese estricto valor para sus variables y tendrá bits direccionables.

O use los minerales definidos en el archivo de encabezado.

edit: para expandir un poco lo que dije anteriormente, aquí hay un ejemplo de cómo se podría hacer esto en un puerto de 8 pines.

//define a bit-addresable byte
typedef struct {
    uint8_t B0:1;                           //bit definitions
    uint8_t B1:1;                           //bit definitions
    uint8_t B2:1;                           //bit definitions
    uint8_t B3:1;                           //bit definitions
    uint8_t B4:1;                           //bit definitions
    uint8_t B5:1;                           //bit definitions
    uint8_t B6:1;                           //bit definitions
    uint8_t B7:1;                           //bit definitions
} B8_TypeDef;

//global variables
#define LED0            (((B8_TypeDef *)&PORTB)->B0)    //led0 on PORTB.0

//in your main loop
    while (1) {
        //flip LED0/PORTB.0
        LED0 = 1;                           //set LED0/PORTB.0
        LED0 = 0;                           //clear LED0 / PORTB.0

si pasa por el archivo de encabezado enlatado, encontrará un enfoque idéntico, excepto que cada typedef tiene un nombre diferente.

aquí es cómo va en la simulación:

El mismo concepto se puede hacer con variables, o tipos de 16/32 bits, en la medida en que el compilador admite tipos de bits.

    
respondido por el dannyf

Lea otras preguntas en las etiquetas