Допустим, у меня есть файл main.c, в котором я пишу:
#define SSEG_DIG_PORT PORTB
#include "include/led_display.h"
Внутри файла led_display.h написано следующее:
#ifndef SSEG_DIG_PORT
#define SSEG_DIG_PORT PORTA
#warning "SSEG_DIG_PORT is not defined! Using PORTA instead"
#endif /* SSEG_DIG_PORT */
В итоге при компиляции я получаю этот warning, и, само собой, устанавливаю не тот порт. Будто бы компилятор сперва отдельно от всего, игнорируя что написано в main.c, отдельно компилирует led_display.c
Что в такой ситуации делать? Только писать свой makefile? Для примера, если использовать те же задержки из util/delay.h, то там таких проблем нет. Т.е. main.c выглядит следующим образом:
#define F_CPU 16000000UL
#include <util/delay.h>
И в таком случае мы не получаем никаких warning'ов, хотя если не определить макрос F_CPU, то компилятор предупредит, что из-за этого у нас могут быть проблемы
P.S. Работаю из Atmel Studio 7