c - 我应该如何在c文件中包含用extern定义的变量

标签 c arm stm32f4discovery unix-ar

我在使用 arm-none-eabi 工具链编译 STM32F4-Discovery 的演示代码时遇到问题。链接时出现错误,这是我收到的 [第一个] 错误。

template/obj/stm32f4xx_it.o: In function `OTG_FS_IRQHandler':
template/src/stm32f4xx_it.c:192: undefined reference to `hpcd'

几个月来我一直在断断续续地尝试解决这个问题,所以我创建了 this github 存储库来跟踪项目。变量 hpcdtemplate/src/usbd_conf.c 中定义。不幸的是,我对 C/C++ 的了解充满了漏洞,所以我希望有人可以帮助我缩小问题范围并提出解决问题的正确方法。

我有两个问题。

  1. hpcd 包含在文件 usbd_conf.c 中。它在许多文件中使用,但这些文件实际上都不包含 usbd_conf.c,仅包含 usbd_conf.h。问题是,仅包含 header ,将变量声明为 extern PCD_HandleTypeDef hpcd; 的文件是否可以在不特别包含 .c 文件的情况下使用变量?
  2. 假设问题 1 的答案是肯定的,为什么函数 OTG_FS_IRQHandler 没有找到 hpcd?来自 stm32f4xx_it 的包含链是 main.h -> usbd_core.h -> usbd_conf.h

我假设问题 1 的答案是肯定的,因为我相信这是我购买时板上运行的演示代码。我只能假设问题出在我构建它的方式上。有人愿意帮我解决这个问题吗?如果相关或为了更好地构建这个问题,我很乐意提供更多细节,但我试图避免在我的问题中发布完整的 USB 堆栈。谢谢。

最佳答案

如果您将 extern PCD_HandleTypeDef hpcd; 放在每个相关人员都包含的 header 之一中可能会有所帮助(我认为 main.h 可以)。

extern 正常工作的例子:

一个定义了你想在别处使用的变量的文件包含

include "a_header.h";
// ...
int some_variable = 42;

header a_header.h包含

extern some_variable;

要使用该变量的文件包含

include "a_header.h";
extern some_variable;
//...
foo = some_variable;
some_variable = 47;

这样链接器就知道要用它做什么。

关于c - 我应该如何在c文件中包含用extern定义的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38034121/

相关文章:

c - bmake : Proper use of Automatic Variables

c - 在Linux中的父子进程中使用Pipe

c++ - IEEE 754 float 学运算

linux - 我多早可以在 arm linux 内核中调用 kalloc?

c++ - 如何在Vxworks中正确运行Clock-gettime获取准确时间

c - 程序返回错误的数字

python - 在不同的 ARM 架构上进行编程

usb - STM32CubeMX USB CDC VCP?

c - STM32F4 SPI配置SPI_Init导致assert_failed循环

c - 来自整数数组的随机数? uVision 4 中的 C