c - Contiki 中的头文件在哪里?

标签 c bluetooth-lowenergy 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]。我想了解示例代码如何使用不同位置的文件中存在的方法。

最佳答案

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

  1. 所有可执行代码都在 C 文件中定义并转换为机器代码。话虽如此,可能还有用其他语言编写的模块,C 运行时很可能有一些汇编程序源。我们可以将这些称为“翻译单元”,因为它们都是单独翻译的。

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

  3. 如果您编译自己的包含头文件的源代码之一,则生成的对象文件中将不会有引用对象的代码。

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

  5. 仍然存在不满意的引用,特别是那些对那些头文件中声明的库方法的引用。链接器搜索默认库和显式给定的库以查找方法。如果找到,它将被添加到代码中,并且调用将收到其地址。

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

<小时/>

回答您明确的问题:“示例代码如何使用不同位置的文件中存在的方法?”

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

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

关于c - Contiki 中的头文件在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57473532/

相关文章:

c - 无法正确使用fwrite

bluetooth-lowenergy - BLED 112 - 使用 SDK v1.1.1 更新基于 BGScript 的固件

ios - iBeacon 模式下的 Gimbal S10 未显示在 Apple 的示例 AirLocate 应用程序中

用c编程计算过程平均值并用contiki实现

python - 在 Python 中接收 UDPv6 多播

c - RPL child 列表 Contiki

c - 将参数传递给函数并进行转换

c - 将 4 字节值中的特定位提取到 C 中的新变量中

c - 反转c中的单词

iOS 设备作为 iBeacon,为什么不起作用?