在为一般的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;的输出的图像。命令:
答案 0 :(得分:4)
<强> TL / DR 强>: 我试图在下面对此主题进行一般性介绍。如果你是一个更实际的类型,并希望跳过文本的墙,跳到最后。那里有一些教程链接。跳入 - 卡住导致Stack Overflow最好的问题。
C ++中的头文件和库之间有一个重要的区别。头文件是代码中可见的东西,因为它们是您在 #include 语句中实际提到的内容。但是,在大多数情况下,您所包含的标题对应于系统上安装的库。
实际上,这很重要,原因有两个:
第二点实际上是您的标准库,例如 iostream 或 stdio.h ,但这些库由链接的标准C或C ++库支持默认值。
大多数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.它将帮助您了解可用的内容,如何获取内核源代码的副本等。如果您想编写驱动程序,这也是很好的知识。如果您开发新内容,它也是学习如何将代码提交给内核的地方。
最后,编写自己的设备驱动程序是可能的,并且不值得害怕。但是,这个主题的细节可能会填满一本书,所以当你准备好试用它时谷歌会有所帮助。
首先要了解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示例代码。