Raspberry Pi C ++头文档

时间:2015-05-16 03:08:30

标签: c++ linux linux-kernel raspberry-pi embedded-linux

在为一般的Raspberry Pi或Linux编写程序时,是否有某种文档可以包含c ++文件中包含的标题?

例如,我找到了关于如何使用c ++(http://hertaville.com/2013/07/24/interfacing-an-spi-adc-mcp3008-chip-to-the-raspberry-pi-using-c/

从Pi访问SPI总线的精彩指南

我能够获取代码并将其应用于我的情况,并成功地与nRF24L01 + RF模块通信,并且我能够命令芯片等。

但是当我开始尝试调查代码的作用时(因为我想知道我从互联网上获得的代码是如何工作的)我很快就迷失了。例如,该代码的作者如何知道包含他所做的头文件:

#include <unistd.h>
#include <stdint.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/spi/spidev.h>
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <string>
#include <iostream>

我知道&#34; iostream&#34;但我认为我会通过谷歌搜索那些头文件名来接近它,例如(&#34; unistd.h&#34;)但没有运气。我找到了很多信息,但没有任何关于Pi的信息,我做的一点点只是开始引用其他头文件和代码。尝试和学习是否太过分了,就像我有效地尝试学习linux内核一样?这类东西有没有好书?

回到我原来的问题是,在Pi上的c ++项目中可以包含哪些头文件以及它们都添加了哪些功能,是否存在任何在线(或离线)文档?

我发现这个(http://www.cplusplus.com/reference/)有标准文件,但是你怎么知道所有非标准头文件和相应的功能呢?

感谢所有的想法和帮助,谢谢! 韦斯利

编辑1

这是显示&#34; ls / usr / include&#34;的输出的图像。命令:

enter image description here

1 个答案:

答案 0 :(得分:4)

<强> TL / DR : 我试图在下面对此主题进行一般性介绍。如果你是一个更实际的类型,并希望跳过文本的墙,跳到最后。那里有一些教程链接。跳入 - 卡住导致Stack Overflow最好的问题。

C / C ++中的标题与库

C ++中的头文件和库之间有一个重要的区别。头文件是代码中可见的东西,因为它们是您在 #include 语句中实际提到的内容。但是,在大多数情况下,您所包含的标题对应于系统上安装的库。

实际上,这很重要,原因有两个:

  1. 您通常不会安装&#34;标题&#34;在您的系统上,您安装恰好带有标头的库。有少量只有头的库是这个规则的例外,但通常你在某个地方有一个二进制库,标题便于访问。
  2. #include语句只是故事的一半。通常有一个相应的编译器选项,您需要指定要链接到特定库。在IDE中,这将隐藏在某个项目选项中。对于命令行编译器,这将是您在命令行或(更常见地)在Make文件或类似文件中传递给编译器的开关。
  3. 第二点实际上是您的标准库,例如 iostream stdio.h ,但这些库由链接的标准C或C ++库支持默认值。

    Linux一般

    大多数Linux发行版都会附带某种包管理器。有一些可用(Ubuntu使用Apt,Redhat使用yum,Arch有pacman,Gentoo有portage等)。实际使用的管理器是分发的定义属性之一。您可以在Distro的网页上轻松找到文档。这是一个非常重要的理解工具。

    除了各种C / C ++和Posix标准头文件之外,您可以使用的头文件是您在系统上安装的库的函数。这一点很重要,因为可用标头列表包含互联网上所有可用的库,而不仅仅是系统当前安装的少数库。

    每个库通常都会被包装为linux发行版的包。找到所需的库时,将安装相应的包。这将为您提供所需的标头和库文件。

    查找硬盘驱动器上的库和标头实际上并不常用,但如果您感到好奇,标题文件通常会在以下某个目录(或其中的子目录)中的某个位置结束

        /usr/local/include
        /usr/include
    

    图书馆将主要在

    中找到
        /lib
        /usr/lib
        /usr/local/lib
    

    这些名称将包含隐藏的名称,包括其版本号,以及与具有特定版本号的符号链接符号链接的更通用(仍然含糊不清)的名称。

    某些发行版有单独的&#34;开发&#34;包含标头的库版本,默认情况下只安装运行时文件(即用户运行程序所需的文件)。如果您的发行版执行此操作,您将需要开发包来编写该库的软件。

    当您决定了所需的功能时,通常会寻找可帮助您完成该任务的库。你可以在论坛上四处询问,或只是谷歌搜索。

    内核中的设备驱动程序

    大多数库将通过设备驱动程序与设备连接。在linux中,设备驱动程序被编译到内核中,或者作为加载到内核中的模块出现。希望您的Pi发行版附带所有必需的硬件驱动程序。如果没有,您需要获取内核模块或重新编译内核以包含所需的驱动程序。加载/卸载它们的模块和适当的脚本通常作为发行版的软件包提供,就像库一样。

    可以编写软件直接与驱动程序通信。这是一个非常广泛的话题。你最好的选择是选择一个设备(即I2C,SPI等)和谷歌专门用于在Pi上与该设备连接的教程。

    This tutorial addresses the basics of writing a loadable module.如果你想编写自己的SPI驱动程序,这将是一个很好的起点。

    This is a good place to go for a general kernel overview.它将帮助您了解可用的内容,如何获取内核源代码的副本等。如果您想编写驱动程序,这也是很好的知识。如果您开发新内容,它也是学习如何将代码提交给内核的地方。

    最后,编写自己的设备驱动程序是可能的,并且不值得害怕。但是,这个主题的细节可能会填满一本书,所以当你准备好试用它时谷歌会有所帮助。

    Raspberry Pi上的Linux

    首先要了解Pi,它在很多方面与运行Linux的PC没什么区别。您在PC上找到有关Linux系统编程的任何一般信息都将同样适用于Pi。唯一需要注意的是处理器架构是不同的(ARM,与Intel / AMD相比),并且Pi有一些硬件项(如I2C,SPI和GPIO),这些硬件项目并不常见,或者至少不常与之相连接。 PC。

    Pi上实际上有多个Linux发行版。这些通常来自常见的PC发行版--Ubuntu派生的发行版是最常见的。您想要找到您所拥有的发行版的网站。

    如果您尝试在软件包管理器之外安装内容,则需要小心为ARM处理器(或您自己编译的源库)编译库。有一些例外,但绝大多数开源库应该可以在ARM上使用。

    This看起来像一个很有前途的图书馆,可能是一个很好的起点。

    This看起来像一个好的GPIO(通用输入/输出 - 即你可以切换的引脚)教程。

    This会导致一些SPI示例代码。