Какие макросы имен микросхем доступны в компиляторе HI-TECH C?

Я использую компилятор HI-TECH C для микроконтроллера PIC16, и я хотел бы условно скомпилировать разные фрагменты кода в зависимости от того, какой конкретный микроконтроллер был выбран.

Я знаю, что вы можете условно скомпилировать код примерно так:

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

Что мне нужно знать, так это то, какие предопределенные макросы доступны в компиляторе HI-TECH C, которые позволят мне выбрать конкретный микроконтроллер?

Это зависит от того, какую цепочку инструментов вы используете.
Я использую компилятор HI Tech C.

Ответы (3)

На странице 98 руководства HITEC C перечислены все предварительно определенные макросы.

Одна из записей:

_CHIPNAME Для указания выбранного типа микросхемы, например, _16F877.

так что у вас есть, как другие примеры:

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

и т. д.

Если вы спрашиваете об условной компиляции кода для разных PIC с использованием определенного имени, вы можете использовать предопределенный макрос _CHIPNAME, упомянутый на странице 106 руководства 9.81.
Или вы можете использовать семейство (например, _PIC12, _PIC14, _PIC14E, как указано в той же таблице) или просто определить свое собственное.

Похоже, вам нужна условная сборка (или компиляция) в зависимости от целевого чипа, хотя ваш пример несколько неясен. Я не думаю, что вы можете поместить DEFINE в цель #IF, как в вашем первом случае, и вы, похоже, тестируете одно и то же в обоих случаях.

В любом случае для конкретного номера модели PIC определен символ, указанный в командной строке MPASMWIN или в директиве LIST. Включаемые файлы для конкретных моделей имеют проверку, чтобы убедиться, что выбрана правильная модель, соответствующая включаемому файлу. Поэтому вы можете написать:

#ифдеф __18f2520
     ;код здесь включается только в том случае, если целью является PIC 18F2520
  #endif
Я думаю, это опечатка. Если вы прочитаете весь фрагмент кода, вы увидите, что второй определен (...) , что совершенно правильно.
И «pic16macro» является заполнителем для цели вопроса: «Что должен туда вставлять ОП?»
@Majenko: Первоначальный вопрос был очень плохо написан, так что это немного сбивало с толку. Я вижу, что Кевин исправил это и добавил очень важную информацию, о которой спрашивают HITECH C. Я не знаком с этим компилятором, поэтому я подумал, что DEFINE может иметь отношение к одному месту, а DEFINED — к другому. Вы действительно не ожидаете двух ошибок в 4-строчном примере, специально написанном для иллюстрации вашего вопроса. Разве ОП не удосужился вычитать то, что он написал !?