我试图理解 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]
。我想了解示例代码如何使用不同位置的文件中存在的方法。
最佳答案
因此您需要了解应用程序是如何构建的。
所有可执行代码都在 C 文件中定义并转换为机器代码。话虽如此,可能还有用其他语言编写的模块,C 运行时很可能有一些汇编程序源。我们可以将这些称为“翻译单元”,因为它们都是单独翻译的。
头文件仅包含在这些翻译单元中实现的对象的声明。头文件可以组合多个单元的声明或故意省略一些声明。
如果您编译自己的包含头文件的源代码之一,则生成的对象文件中将不会有引用对象的代码。
在链接阶段,链接器组合程序的所有对象模块,解析它们之间的引用。这意味着如果您在一个单元中调用另一个模块中的方法,则该调用将收到正确的地址。
仍然存在不满意的引用,特别是那些对那些头文件中声明的库方法的引用。链接器搜索默认库和显式给定的库以查找方法。如果找到,它将被添加到代码中,并且调用将收到其地址。
这真的很短。请在网络上搜索更广泛的描述,您会发现很多。
<小时/>回答您明确的问题:“示例代码如何使用不同位置的文件中存在的方法?”
链接器将这些方法的机器代码添加到模块的机器代码中。它们的源代码的位置无关紧要。链接器知道标准库的位置。如果您使用其他库,请将它们(以及它们的路径,如果需要)添加到命令行。
如果您还有任何其他问题,请编辑您的问题。
关于c - Contiki 中的头文件在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57473532/