Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Как использовать С исходник с двумя разными Хидера


Автор: Valimor 16.9.2016, 04:56
к примеру имеется .с исходник, где прописаны:
Код

#define Исходник
SW_DOUT_PIN = 1;           //установить логическую единицу на этой ножке
SW_DOUT_PIN = 0;           //установить логический ноль на этой ножке
SW_DOUT_PIN = 1;           //снова установить логическую единицу на этой ножке

в первом хидере SW_DOUT_PIN определяется как:
Код

.h
#define хидер1
#define SW_DOUT_PIN PORTA5     //дефайн определяет 5 ножку микроконтроллера

но так же мне нужно, чтобы в другой момент сишный исходник видел другой хидер в котором дефайн с таким же именем указывал бы на другую ножку, скажем вот так:
Код

.h
#define хидер2
#define SW_DOUT_PIN PORTA3     //дефайн определяет 3 ножку микроконтроллера

То есть чтобы на этапе компиляции препроцессор на основе одного хидера подставил где-то код:
Код

PORTA5 = 1;
PORTA5 = 0;
PORTA5 = 1;

а где-то в другом месте программы на основе другого хидера по тем же строчкам из исходника подставил другой код:
Код

PORTA3 = 1;
PORTA3 = 0;
PORTA3 = 1;

Это возможно? 
если я что-то непонятно написал, скажите мне, я постараюсь объяснить лучше

Автор: xvr 16.9.2016, 14:01
В пределах одной и той же программы - нет (точнее можно, но с очень большими плясками с бубном).
Для разных программ - можно.
Вопрос в том, как вы хотите преключать хидеры.
Самое простое через внешний дефайн (подавать его через опции компилятору).

Например. 1й инклюд файл (пусть он называется config1.h)
Код

#define SW_DOUT_PIN PORTA5     //дефайн определяет 5 ножку микроконтроллера


2й инклюд (config2.h)
Код

#define SW_DOUT_PIN PORTA3     //дефайн определяет 3 ножку микроконтроллера


Ваш сишник
Код

#include CONFIG

SW_DOUT_PIN = 1;           //установить логическую единицу на этой ножке
SW_DOUT_PIN = 0;           //установить логический ноль на этой ножке
SW_DOUT_PIN = 1;           //снова установить логическую единицу на этой ножке


При компиляции подаете дефайн CONFIG как "config1.h" или "config2.h"
Код

Командная строка:
gcc -DCONFIG="config1.h" ...
Или в IDE в настройках проекта в символах препроцессора (смотря чем вы собираете свой проект)

Или сделайте отдельный конфиг файл (setup.h) который будуте включать во все исходники перед #include CONFIG
Код

#define CONFIG "config1.h"


Ваш сишник:
Код

#include "setup.h"
#include CONFIG

SW_DOUT_PIN = 1;           //установить логическую единицу на этой ножке
SW_DOUT_PIN = 0;           //установить логический ноль на этой ножке
SW_DOUT_PIN = 1;           //снова установить логическую единицу на этой ножке


Автор: bsa 20.9.2016, 11:27
Valimor, сколько пишу программы, ни разу такое не нужно было. Было, когда один и тот же файл надо в разных частях программы подключить по-разному, но чтобы так... Может стоит сделать иначе:
Код
/* file config.h */
#ifndef CONFIG_H
#define CONFIG_H

#ifdef USE_PIN_3
#define SW_DOUT_PIN PORTA3
#else
#define SW_DOUT_PIN PORTA5
#endif

#endif /* CONFIG_H */
Этот файл подключается в обоих исходниках, но в одном из них перед инклюдом ставишь #define USE_PIN_3

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)