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/
所以您需要了解应用程序是如何构建的。
所有可执行代码都在 C 文件中定义并翻译成机器代码。话虽如此,可能还有用其他语言编写的模块,C 运行时很可能有一些汇编源代码。我们可以称它们为 "translation units",因为它们各自单独翻译。
头文件只包含在这些翻译单元中实现的对象的声明。头文件可以合并几个单元的声明或者故意省略一些声明。
如果您编译自己的一个包含头文件的源代码,那么在生成的目标文件中将没有引用对象的代码。
在 link 阶段,linker 将程序的所有目标模块组合在一起,解析它们之间的引用。这意味着如果您在一个单元中调用另一个模块中的方法,该调用将收到正确的地址。
仍然有未满足的引用,特别是那些在那些头文件中声明的库方法。 linker 搜索默认和显式给定的库以查找方法。如果它找到一个,它将被添加到代码中,并且调用将收到它的地址。
这真的很短。请在网络上搜索更广泛的描述,您会找到很多这样的描述。
回答你明确的问题:"How can the example code use the methods present in files at different locations?"
linker 将这些方法的机器代码添加到模块的机器代码中。他们的源代码的位置无关紧要。 linker 知道标准库的位置。如果您使用其他库,请将它们(以及它们的路径,如果需要)添加到命令行。
如果您有任何其他问题,请编辑您的问题。
我正在尝试了解 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/
所以您需要了解应用程序是如何构建的。
所有可执行代码都在 C 文件中定义并翻译成机器代码。话虽如此,可能还有用其他语言编写的模块,C 运行时很可能有一些汇编源代码。我们可以称它们为 "translation units",因为它们各自单独翻译。
头文件只包含在这些翻译单元中实现的对象的声明。头文件可以合并几个单元的声明或者故意省略一些声明。
如果您编译自己的一个包含头文件的源代码,那么在生成的目标文件中将没有引用对象的代码。
在 link 阶段,linker 将程序的所有目标模块组合在一起,解析它们之间的引用。这意味着如果您在一个单元中调用另一个模块中的方法,该调用将收到正确的地址。
仍然有未满足的引用,特别是那些在那些头文件中声明的库方法。 linker 搜索默认和显式给定的库以查找方法。如果它找到一个,它将被添加到代码中,并且调用将收到它的地址。
这真的很短。请在网络上搜索更广泛的描述,您会找到很多这样的描述。
回答你明确的问题:"How can the example code use the methods present in files at different locations?"
linker 将这些方法的机器代码添加到模块的机器代码中。他们的源代码的位置无关紧要。 linker 知道标准库的位置。如果您使用其他库,请将它们(以及它们的路径,如果需要)添加到命令行。
如果您有任何其他问题,请编辑您的问题。