#include в файлах C для реализаций, специфичных для процессора - PullRequest
3 голосов
/ 04 октября 2010

Я работаю над базой кода 'C', которая была написана специально для одного типа встроенного процессора. Я написал общий «объектно-ориентированный» код psuedo для таких вещей, как светодиоды, линии GPIO и АЦП (с использованием структур и т. Д.). Я также написал большое количество кода, который использует эти «объекты» в аппаратно-целевой зависимости.

Сейчас мы добавляем в процесс другой тип процессора, и я хотел бы сохранить текущую структуру кода, чтобы я все еще мог использовать библиотеки более высокого уровня. Мне, однако, нужно предоставить разные реализации для кода более низкого уровня (светодиоды, GPIO, АЦП).

Я знаю, что #includes в .C файлах обычно смотрят свысока, но в этом случае это уместно? Например:

// led.c
#ifdef TARGET_AVR
#include "led_avr.c"
#elseifdef TARGET_PIC
#include "led_pic.c"
#else
#error "Unspecified Target"
#endif

Если это неуместно, что может быть лучше?

Спасибо!

Ответы [ 3 ]

3 голосов
/ 04 октября 2010

Поскольку компоновщику все равно, какое имя у исходного файла на самом деле (он заботится только об экспортированных символах), вы можете изменить командную строку компоновщика для каждой цели, чтобы назвать соответствующий модуль реализации (led_avr.c или led_pic.c).

Распространенным способом управления несколькими исходными файлами платформы является помещение каждого набора файлов реализации платформы в их собственный каталог, чтобы вы могли иметь avr/led.c и pic/led.cavr/gpio.c иpic/gpio.c и т. Д.).

2 голосов
/ 04 октября 2010

Это хорошо.Вы можете использовать другие приемы, такие как:

#ifdef PROC1
#define MULTI_CPU(a,b) (a)
#else
#define MULTI_CPU(a,b) (b)
#endif
0 голосов
/ 04 октября 2010

Более распространенный способ сделать это, вместо включения файла C, - это изменить систему сборки (какой бы она ни была), чтобы компилировать или не компилировать эти определенные файлы C.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...