поддержка встроенного программного обеспечения - настройка - PullRequest
6 голосов
/ 04 января 2012

Я занимаюсь разработкой встроенного программного обеспечения, которое должно работать на двух-трех разных семействах микроконтроллеров.На данный момент у нас есть make-файлы, которые считывают переключатели конфигурации и выполняют компиляцию.

Процесс становится все более и более утомительным как для разработчиков, так и для не-разработчиков, чтобы оставаться в курсе переключателей компиляции и конфигураций сборки.Я знаю, что ядро ​​Linux использует ncurses для генерации конфигураций компиляции.Я ищу похожий инструмент, но кроссплатформенный.Он должен работать на Windows и Linux.Я знаю, что это все еще не решит проблему, но это более привлекательно для не разработчиков, а также я могу быстро поделиться своим файлом .config или сравнить его с существующим.Конфигурации будут в определенном порядке, и здесь поможет инструмент сравнения.

Может кто-нибудь поделиться своим опытом с аналогичным обслуживанием проекта или эталонным проектом (встроенная и общая база кода для нескольких микро).Просто хочу ознакомиться с лучшими практиками.

PS: Используемый язык C, 8/16-битные микросхемы, нет ОС, просто пакетный планировщик на основе таймера (baremetal)

Ответы [ 3 ]

1 голос
/ 05 января 2012

У меня есть один микроконтроллер, но несколько проектов, которые компилируются из одного и того же исходного кода.Я думаю, что мой сценарий похож на ваш, по крайней мере, в некоторой степени.Мое решение также было вдохновлено ядром Linux.

config.h

Весь исходный код, которому требуется доступ к какому-либо параметру конфигурации, просто включает файл заголовка config.h.

config.h состоит только из одной строки:

#include <config/project.h>

project.h

У меня есть несколько файлов заголовков конфигурации, по одному на проект.project.h состоит из определений макросов со значениями, такими как true, false или константы:

#define CONFIG_FOO true
#define CONFIG_BAR false
#define CONFIG_TIME 100

check.c

Этот файл проверяет параметры конфигурации на правильность: -все параметры должны быть определены , даже если они не используются или не имеют значения для этого проекта - сигнализируются нежелательные комбинации параметров - значения параметров ограничены.

#if !defined(CONFIG_FOO)
        #error CONFIG_FOO not defined
#endif

#if !defined(CONFIG_BAR)
        #error CONFIG_BAR not defined
#endif

#if !defined(CONFIG_TIME)
        #error CONFIG_TIME not defined
#endif

#if !(CONFIG_FOO ^ CONFIG_BAR)
       #error either CONFIG_FOO or CONFIG_BAR should be se
#endif

#if CONFIG_TIME > 250
        #error CONFIG_TIME too big
#endif

Makefile

Указав компилятору выводить макросы препроцессора, можно (с небольшим количеством выражения sed) передать Makefile теми же значениями параметров, которые предусмотрены для данного проекта.

1 голос
/ 20 января 2012

Когда я занимался многоплатформенной разработкой, в своем ответе я использовал решение, подобное . Для каждой платформы определите "platform_XXX.h" и ограничьте условную компиляцию одной главный файл "platform.h", который выбирает правильный подфайл.

1 голос
/ 04 января 2012

Если вы ничего не найдете, GNU autotools может немного упростить дело.

...