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

标签 c makefile embedded code-maintainability

我正在开发一种嵌入式软件,旨在在两到三个不同的微 Controller 系列上运行。现在我们有读取配置开关并进行编译的 makefile。

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

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

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

最佳答案

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

config.h

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

config.h 仅包含一行:

#include <config/project.h>

项目.h

我有几个配置头文件,每个项目一个。 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

生成文件

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

关于c - 嵌入式软件可维护性-配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8723630/

相关文章:

ubuntu - 我想将 makefile 的编译器从 pgi 更改为 gfortran,我想知道如何更改 FC 和 FFLAGS 以使其工作

c++ - 访问头文件中定义的命名空间中的元素

gcc - Newlib 的替代品?

linux - IORESOURCE_IRQ(地址)在soc芯片中如何工作?

c - 在公共(public) block 中有全局变量是一种未定义的行为吗?

python - 从 Python 文件调用 C 函数。使用Setup.py文件时出现错误

c++ - 如何将 libproxy-dev 链接到现有的 cmake 项目(C++)?

c - C 中传递指针

c - fatal error : cuda. h:没有那个文件或目录

c - 如何使用定时器在STM32F103上生成用于控制伺服电机的PWM