6

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

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

任何人都可以分享他们在类似项目维护或参考项目(多个微的嵌入式和通用代码库)方面的经验。只想知道最佳实践。

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

4

3 回答 3

1

如果您没有找到其他任何东西,GNU 自动工具可以让事情变得更容易一些。

于 2012-01-04T08:52:09.383 回答
1

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

config.h

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

config.h仅包含一行:

#include <config/project.h>

project.h

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

#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。

于 2012-01-04T22:38:53.200 回答
1

当我进行多平台开发时,我使用了类似于我在此处回答中的解决方案。 每个平台都有一个特定的“platform_XXX.h”,并将条件编译限制为选择正确子文件的单个主“platform.h”文件。

于 2012-01-20T19:53:24.943 回答