Поддержка встроенного программного обеспечения - настройка

Я занимаюсь разработкой встроенного программного обеспечения, которое должно работать на двух-трех разных семействах микроконтроллеров. На данный момент у нас есть 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 могут немного упростить ситуацию.

Другие вопросы по тегам