Contiki 中的头文件在哪里?

Where are headers file present in Contiki?

我正在尝试了解 examples/cc26xx/cc26xx-ble-client-demo 中的 IPv6-over-BLE UDP-client 演示示例,该代码具有以下头文件:

#include "contiki.h"
#include "contiki-lib.h"
#include "contiki-net.h"

#define DEBUG DEBUG_FULL
#include "net/ip/uip-debug.h"
#include "net/ip/uiplib.h"
#include "net/ipv6/uip-icmp6.h"

我只想知道这些头文件在Contiki文件系统中的位置,因为BLE连接的主要实现代码在cpu/cc26xx-cc13xx/rf-core/*.[ch]cpu/cc26xx-cc13xx/net/*.[ch]下。我想了解示例代码如何使用不同位置文件中存在的方法。

请在下面找到答案。

https://github.com/contiki-os/contiki/tree/master/core

"contiki.h"
"contiki-lib.h"
"contiki-net.h"

https://github.com/contiki-os/contiki/blob/master/core/net/ip/uip-debug.h

您可以在 Contiki 中的相同位置找到头文件。

contiki.h、contiki-lib.h、contiki-net.h:这些文件在 contiki/core/ 文件夹中。

uip-debug.h: contiki/core/net/ip

uiplib.h: contiki/core/net/ip

uip-icmp6.h: contiki/core/net/ipv6/

所以您需要了解应用程序是如何构建的。

  1. 所有可执行代码都在 C 文件中定义并翻译成机器代码。话虽如此,可能还有用其他语言编写的模块,C 运行时很可能有一些汇编源代码。我们可以称它们为 "translation units",因为它们各自单独翻译。

  2. 头文件只包含在这些翻译单元中实现的对象的声明。头文件可以合并几个单元的声明或者故意省略一些声明。

  3. 如果您编译自己的一个包含头文件的源代码,那么在生成的目标文件中将没有引用对象的代码。

  4. 在 link 阶段,linker 将程序的所有目标模块组合在一起,解析它们之间的引用。这意味着如果您在一个单元中调用另一个模块中的方法,该调用将收到正确的地址。

  5. 仍然有未满足的引用,特别是那些在那些头文件中声明的库方法。 linker 搜索默认和显式给定的库以查找方法。如果它找到一个,它将被添加到代码中,并且调用将收到它的地址。

这真的很短。请在网络上搜索更广泛的描述,您会找到很多这样的描述。


回答你明确的问题:"How can the example code use the methods present in files at different locations?"

linker 将这些方法的机器代码添加到模块的机器代码中。他们的源代码的位置无关紧要。 linker 知道标准库的位置。如果您使用其他库,请将它们(以及它们的路径,如果需要)添加到命令行。

如果您有任何其他问题,请编辑您的问题。