gpt4 book ai didi

c++ - Raspberry Pi C++ header 文档

转载 作者:行者123 更新时间:2023-11-30 01:48:35 25 4
gpt4 key购买 nike

一般而言,为Raspberry Pi或linux编写程序时,可以在c++文件中包含什么样的 header 的文件?

例如,我找到了关于如何使用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>

我知道诸如“iostream”之类的功能,但是我想我可以通过谷歌搜索那些头文件名(如“unistd.h”)来实现它,但是没有运气。我发现了很多信息,但都没有关于Pi的信息,而我所做的那一点点只是开始引用其他头文件和代码。尝试和学习的内容太多了吗,就像我实际上要尝试学习Linux内核一样?有没有关于这类东西的好书?

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

我发现这个( http://www.cplusplus.com/reference/)具有标准文件,但是您如何了解所有非标准头文件和相应的功能?

感谢所有的想法和帮助,谢谢!
卫斯理

编辑1

这是显示“ls / usr / include”命令的输出的图像:

最佳答案

TL / DR :
我尝试在下面对此主题进行一般介绍。如果您是更动手的类型,并且想要跳过文本墙,请跳到最后。那里有一些教程链接。参与进来-卡住会导致Stack Overflow最擅长的问题。

C / C++中的标题与库

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

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

  • 通常,您不会在系统上安装“ header ”,而是安装 header 附带的库。仅有少数 header 库是该规则的异常(exception),但是通常您在 header 有助于访问的地方有一个二进制库。
  • #include语句只是故事的一半。通常有一个相应的编译器选项,您需要在其中指定要链接到特定库的位置。在IDE中,这将埋在项目选项的某个位置。对于命令行编译器,这将是您通过命令行或(通常)在Make文件或类似文件中传递给编译器的开关。

  • 第二点实际上适用于iostream或stdio.h之类的标准库,但是它们由默认链接的标准C或C++库支持。

    一般的Linux

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

    除了各种C / C++和Posix标准头文件之外,您可以使用的头文件是系统上已安装的库的功能。了解这一点很重要,因为可用 header 的列表由Internet上的所有可用库组成,而不仅仅是您的系统目前已安装的少数库。

    通常,每个库都将打包为Linux发行版的软件包。找到所需的库后,将安装相应的软件包。这将为您提供所需的头文件和库文件。

    在硬盘上查找库和 header 实际上通常不是很有用,但是如果您好奇的话, header 文件通常会以下列其中一个目录(或其中的一个子目录)结尾
        /usr/local/include
    /usr/include

    图书馆主要位于
        /lib
    /usr/lib
    /usr/local/lib

    这些将具有包含其版本号的隐秘名称,以及一个更通用(仍是隐秘的名称)的符号链接(symbolic link),该名称与具有特定版本号的隐含符号链接(symbolic link)。

    某些发行版具有包含 header 的库的单独“开发”版本,并且默认情况下仅安装运行时文件(即,用户运行程序所需的文件)。如果发行版执行此操作,则需要开发包才能使用该库编写软件。

    在确定所需的功能后,通常会寻找可以帮助您完成该任务的库。您可以在论坛上四处询问,也可以在Google上搜索。

    内核中的设备驱动程序

    大多数库将通过设备驱动程序与设备接口(interface)。在linux中,设备驱动程序被编译到内核中,或者作为模块加载到内核中。希望您的Pi发行版中随附了用于当前硬件的所有必需驱动程序。如果不是,则需要获取内核模块或重新编译内核以包括所需的驱动程序。与库一样,模块和用于加载/卸载它们的适当脚本通常作为发行版的软件包提供。

    可以编写软件直接与驱动程序对话。这是一个非常广泛的话题。最好的选择是选择一个设备(例如I2C,SPI等),然后在Google上找到专门用于与Pi上的该设备接口(interface)的教程。

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

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

    最后,编写自己的设备驱动程序是可能的,而且也不用担心。不过,该主题的详细信息可能会填满一本书,因此当您准备尝试时就可以使用google。

    Raspberry Pi上的Linux

    关于Pi的第一件事是,它与运行Linux的PC在大多数方面没有什么不同。您发现的有关在PC上进行Linux系统编程的任何常规信息都将同样适用于Pi。唯一需要注意的是处理器架构不同(ARM与Intel / AMD),并且Pi具有一些在硬件上不常见或至少不常见接口(interface)的硬件项(例如I2C,SPI和GPIO)。电脑

    Pi上实际上有多个Linux发行版。这些通常来自普通的PC发行版-Ubuntu发行版是最常见的。您将要查找您拥有的任何发行版的网站。

    如果您尝试在软件包管理器之外安装东西,则需要注意为ARM处理器编译的库(或您自己编译的源库)。有一些异常(exception),但是绝大多数开放源代码库都可以在ARM上使用。

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

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

    This导致一些SPI示例代码。

    关于c++ - Raspberry Pi C++ header 文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30271425/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com