【问题标题】:How to structure a C (embedded) project with shared header and code files如何使用共享头文件和代码文件构建 C(嵌入式)项目
【发布时间】:2021-08-31 07:16:46
【问题描述】:

这是一个嵌入式应用程序的问题,但我认为该解决方案是基于语言 (C) 的,而不是特定于我正在使用的嵌入式编译器 (XC16)。

问题

我从单个项目中提取了许多代码文件,以创建可在多个项目中重复使用的共享文件集合。这些文件将需要主应用程序中的 config.h 文件来#define 该项目的一些参数。

示例

项目中的文件

config.h

#define BUFF_SIZE 4

main.c

#include "config.h"
#include <lib.h>
/*Application Code*/

“库”中的文件(即不在项目结构中的另一个文件夹)

lib.h

extern uint8_t Buffer [BUFF_SIZE];

lib.c

#include "lib.h"
uint8_t Buffer [BUFF_SIZE];

问题

这会产生“BUFF_SIZE 在 lib.h 中未声明”的问题。我的理解是编译器会从 main.c 开始加载来自 config.h 的 `#define' 值,然后尝试处理 lib.h 标题。但好像不是这样的。

我是否必须将库反向引用到 config.h 文件?这似乎可行,但它会强制应用程序具有特定的文件名。

有什么好的例子可以说明这种结构应该如何进行吗?

附加说明

当我尝试为 bit-bang 功能映射引脚输出时,也会出现同样的问题。即

config.h

#define DATA_OUT LATBbits.LATB4

lib.c

void SetPin(void)
{
  DATA_OUT = 1;
}

干杯:)

【问题讨论】:

    标签: c file header embedded


    【解决方案1】:

    C 代码是在翻译单元 的基础上编译的。一个翻译单元是一个单独的 .c 文件及其包含的所有 h 文件。所以你必须从“lib.h”中包含“config.h”。

    您还需要在每个标题中使用所谓的“标题保护”/“包含保护”。看 Creating your own header file in C

    【讨论】:

      猜你喜欢
      • 2012-08-13
      • 2015-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-28
      • 1970-01-01
      • 2020-02-29
      • 2017-07-30
      相关资源
      最近更新 更多