嵌入式软件可维护性 - 配置

Kam*_*ath 6 c embedded makefile code-maintainability

我正在开发一种嵌入式软件,可以在两到三个不同的微控制器系列上运行.现在我们有makefile,它读取配置开关并进行编译.

对于开发人员和非开发人员来说,使用编译开关和构建配置保持更新的过程变得越来越乏味.我知道Linux内核使用ncurses来生成编译配置.我正在寻找一个类似的工具,但跨平台.它应该在Windows和Linux上运行.我知道这仍然无法解决问题,但它对非开发人员更有吸引力,我也可以快速共享我的.config文件或将其与现有文件进行比较.配置将按特定顺序排列,这里的diff工具将有所帮助.

任何人都可以与类似的项目维护或参考项目(多个微型嵌入式和通用代码库)分享他们的经验.只想了解最佳实践.

PS:语言使用C,8/16位微处理器,没有操作系统只是基于计时器的批处理调度程序(裸机)

lor*_*cap 1

我有一个微控制器,但有几个项目是从相同的源代码编译的。我想我的情况和你的情况很相似,至少在某种程度上是这样。我的解决方案也受到了 Linux 内核的启发。

config.h

所有需要访问某些配置参数的源代码只包含一个名为config.h.

config.h仅由一行组成:

#include <config/project.h>
Run Code Online (Sandbox Code Playgroud)

project.h

我有几个配置头文件,每个项目一个。Aproject.h由具有truefalse、 或常量等值的宏定义组成:

#define CONFIG_FOO true
#define CONFIG_BAR false
#define CONFIG_TIME 100
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

Makefile

通过指示编译器输出预处理器宏,可以(通过一些sed表达式)为Makefile给定项目提供相同的参数值。