¿Qué macros de nombre de chip están disponibles en el compilador HI-TECH C?

Estoy usando el compilador HI-TECH C para el microcontrolador PIC16, y me gustaría compilar condicionalmente diferentes fragmentos de código según el microcontrolador específico que se haya seleccionado.

Sé que puedes compilar código condicionalmente con algo como:

#if defined(MACRO1)  
    ... compile this code ... 
#elif defined(MACRO2) 
    ... compile this code ...
#endif

Lo que necesito saber es qué macros predefinidas están disponibles en el compilador HI-TECH C que me permitirán seleccionar el microcontrolador específico.

Eso depende de la cadena de herramientas que esté utilizando.
Estoy usando el compilador HI Tech C.

Respuestas (3)

La página 98 del Manual HITEC C enumera todas las macros predefinidas.

Una de las entradas es:

_CHIPNAME Para indicar el tipo de chip específico seleccionado, por ejemplo, _16F877

así que tienes, como otros ejemplos:

  • _16F88
  • _16F84A
  • _16F505
  • _16F777
  • _16F1823
  • ...

etc.

Si pregunta sobre la compilación condicional de código para diferentes PIC usando el nombre definido, puede usar la macro predefinida _CHIPNAME mencionada en la página 106 del manual 9.81.
O puede usar la familia (por ejemplo, _PIC12, _PIC14, _PIC14E como se menciona en la misma tabla) o simplemente definir la suya propia.

Parece que desea un ensamblaje condicional (o compilación) según el chip de destino, aunque su ejemplo no está claro. No creo que pueda poner DEFINE en el objetivo de un #IF como en su primer caso, y parece que está probando lo mismo en ambos casos.

En cualquier caso, hay un símbolo definido para el número de modelo PIC específico como se especifica en la línea de comando MPASMWIN o con la directiva LIST. Los archivos de inclusión específicos del modelo tienen una verificación para asegurarse de que se selecciona el modelo correcto para que coincida con el archivo de inclusión. Por lo tanto, puede escribir:

#ifdef __18f2520
     ;el código aquí solo se incluye cuando el objetivo es PIC 18F2520
  #terminara si
Creo que es un error tipográfico. Si lee el fragmento de código completo , verá que el segundo está definido (...) y es perfectamente válido.
Y el "pic16macro" es un marcador de posición para el objetivo de la pregunta: "¿qué debería poner el OP allí?"
@Majenko: La pregunta original estaba muy mal escrita, por lo que era un poco confusa. Veo que Kevin ahora solucionó esto y agregó la información muy importante sobre la que se le pregunta a HITECH C. No estoy familiarizado con ese compilador, así que pensé que podría haber relevancia para DEFINE en un lugar y DEFINED en otro. Realmente no espera dos errores en un ejemplo de 4 líneas escrito específicamente para ilustrar su pregunta. ¿No podría haberse molestado el OP en revisar lo que escribió?