Поддержка встроенного программного обеспечения - настройка
Я занимаюсь разработкой встроенного программного обеспечения, которое должно работать на двух-трех разных семействах микроконтроллеров. На данный момент у нас есть make-файлы, которые читают конфигурационные ключи и выполняют компиляцию.
Этот процесс становится все более и более утомительным как для разработчиков, так и для не-разработчиков, чтобы быть в курсе обновлений компиляции и конфигураций сборки. Я знаю, что ядро Linux использует ncurses для генерации конфигураций компиляции. Я ищу похожий инструмент, но кроссплатформенный. Он должен работать на Windows и Linux. Я знаю, что это все еще не решит проблему, но это более привлекательно для не разработчиков, а также я могу быстро поделиться своим файлом.config или сравнить его с существующим. Конфигурации будут в определенном порядке, и здесь поможет инструмент сравнения.
Может кто-нибудь поделиться своим опытом с аналогичным проектом обслуживания или эталонным проектом (встроенная и общая база кода для нескольких микро). Просто хочу узнать лучшие практики.
PS: Используемый язык C, 8/16 битные микро, нет ОС, просто пакетный планировщик на основе таймера (baremetal)
3 ответа
У меня есть один микроконтроллер, но несколько проектов, которые скомпилированы из одного и того же исходного кода. Я думаю, что мой сценарий похож на ваш, по крайней мере, в некоторой степени. Мое решение также было вдохновлено ядром 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
с теми же значениями параметров gprovided для данного проекта.
Когда я занимался мультиплатформенной разработкой, я использовал решение, подобное тому, что было в моем ответе здесь. Иметь определенный "platform_XXX.h" для каждой платформы и ограничить условную компиляцию одним главным файлом "platform.h", который выбирает правильный подфайл.
Если вы ничего не найдете, автоинструменты GNU могут немного упростить ситуацию.