bcm2835 library提供了user space 操作IO的代码。

本文不涉及代码分析,先直观的按照user guide完成操作。

1. 在Raspberry中安装bcm2835 library

2. build LED test

3. run led test

  • 从http://www.airspayce.com/mikem/bcm2835/ 下载library库,可以直接在树莓派中下载或者宿主机上下载后sftp传给树莓派,
  • 解压缩
pi@raspberrypi:~ $ tar zxvf bcm2835-1.56.tar.gz
bcm2835-1.56/
bcm2835-1.56/configure.ac
bcm2835-1.56/COPYING
bcm2835-1.56/examples/
bcm2835-1.56/examples/spi/
bcm2835-1.56/examples/spi/spi.c
bcm2835-1.56/examples/input/
bcm2835-1.56/examples/input/input.c
bcm2835-1.56/examples/event/
bcm2835-1.56/examples/event/event.c
bcm2835-1.56/examples/pwm/
bcm2835-1.56/examples/pwm/pwm.c
bcm2835-1.56/examples/gpio/
bcm2835-1.56/examples/gpio/gpio.c
bcm2835-1.56/examples/blink/
bcm2835-1.56/examples/blink/blink.c
bcm2835-1.56/examples/spin/
bcm2835-1.56/examples/spin/spin.c
bcm2835-1.56/examples/i2c/
bcm2835-1.56/examples/i2c/i2c.c
bcm2835-1.56/config.guess
bcm2835-1.56/NEWS
bcm2835-1.56/depcomp
bcm2835-1.56/configure
bcm2835-1.56/aclocal.m4
bcm2835-1.56/compile
bcm2835-1.56/INSTALL
bcm2835-1.56/Makefile.in
bcm2835-1.56/missing
bcm2835-1.56/config.sub
bcm2835-1.56/Makefile.am
bcm2835-1.56/ChangeLog
bcm2835-1.56/README
bcm2835-1.56/install-sh
bcm2835-1.56/config.h.in
bcm2835-1.56/src/
bcm2835-1.56/src/test.c
bcm2835-1.56/src/bcm2835.h
bcm2835-1.56/src/bcm2835.c
bcm2835-1.56/src/Makefile.in
bcm2835-1.56/src/Makefile.am
bcm2835-1.56/ltmain.sh
bcm2835-1.56/AUTHORS
bcm2835-1.56/doc/
bcm2835-1.56/doc/Doxyfile.in
bcm2835-1.56/doc/Makefile.in
bcm2835-1.56/doc/Makefile.am
bcm2835-1.56/test-driver
  • ./configure
pi@raspberrypi:~/bcm2835-1.56 $ ls
aclocal.m4 ChangeLog config.guess config.sub configure.ac depcomp examples install-sh Makefile.am missing README test-driver
AUTHORS compile config.h.in configure COPYING doc INSTALL ltmain.sh Makefile.in NEWS src
pi@raspberrypi:~/bcm2835-1.56 $ ./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... no
checking for mawk... mawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking for style of include used by make... GNU
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking whether gcc understands -c and -o together... yes
checking dependency style of gcc... gcc3
checking for clock_gettime in -lrt... yes
checking for doxygen... no
configure: WARNING: Doxygen not found - continuing without Doxygen support
checking for ranlib... ranlib
checking for gcc... (cached) gcc
checking whether we are using the GNU C compiler... (cached) yes
checking whether gcc accepts -g... (cached) yes
checking for gcc option to accept ISO C89... (cached) none needed
checking whether gcc understands -c and -o together... (cached) yes
checking dependency style of gcc... (cached) gcc3
checking that generated files are newer than configure... done
configure: creating ./config.status
config.status: creating Makefile
config.status: creating src/Makefile
config.status: creating doc/Makefile
config.status: creating config.h
config.status: executing depfiles commands
  • make
pi@raspberrypi:~/bcm2835-1.56 $ make
make all-recursive
make[1]: Entering directory '/home/pi/bcm2835-1.56'
Making all in src
make[2]: Entering directory '/home/pi/bcm2835-1.56/src'
gcc -DHAVE_CONFIG_H -I. -I.. -g -O2 -MT bcm2835.o -MD -MP -MF .deps/bcm2835.Tpo -c -o bcm2835.o bcm2835.c
mv -f .deps/bcm2835.Tpo .deps/bcm2835.Po
rm -f libbcm2835.a
ar cru libbcm2835.a bcm2835.o
ar: `u' modifier ignored since `D' is the default (see `U')
ranlib libbcm2835.a
make[2]: Leaving directory '/home/pi/bcm2835-1.56/src'
Making all in doc
make[2]: Entering directory '/home/pi/bcm2835-1.56/doc'
make[2]: Nothing to be done for 'all'.
make[2]: Leaving directory '/home/pi/bcm2835-1.56/doc'
make[2]: Entering directory '/home/pi/bcm2835-1.56'
make[2]: Leaving directory '/home/pi/bcm2835-1.56'
make[1]: Leaving directory '/home/pi/bcm2835-1.56'
pi@raspberrypi:~/bcm2835-1.56 $ sudo make check
Making check in src
make[1]: Entering directory '/home/pi/bcm2835-1.56/src'
make test
make[2]: Entering directory '/home/pi/bcm2835-1.56/src'
gcc -DHAVE_CONFIG_H -I. -I.. -g -O2 -MT test.o -MD -MP -MF .deps/test.Tpo -c -o test.o test.c
mv -f .deps/test.Tpo .deps/test.Po
gcc -g -O2 -o test test.o ./libbcm2835.a -lrt
make[2]: Leaving directory '/home/pi/bcm2835-1.56/src'
make check-TESTS
make[2]: Entering directory '/home/pi/bcm2835-1.56/src'
make[3]: Entering directory '/home/pi/bcm2835-1.56/src'
PASS: test
============================================================================
Testsuite summary for bcm2835 1.56
============================================================================
# TOTAL: 1
# PASS: 1
# SKIP: 0
# XFAIL: 0
# FAIL: 0
# XPASS: 0
# ERROR: 0
============================================================================
make[3]: Leaving directory '/home/pi/bcm2835-1.56/src'
make[2]: Leaving directory '/home/pi/bcm2835-1.56/src'
make[1]: Leaving directory '/home/pi/bcm2835-1.56/src'
Making check in doc
make[1]: Entering directory '/home/pi/bcm2835-1.56/doc'
make[1]: Nothing to be done for 'check'.
make[1]: Leaving directory '/home/pi/bcm2835-1.56/doc'
make[1]: Entering directory '/home/pi/bcm2835-1.56'
make[1]: Leaving directory '/home/pi/bcm2835-1.56'
  • sudo make install
pi@raspberrypi:~/bcm2835-1.56 $ sudo make install
Making install in src
make[1]: Entering directory '/home/pi/bcm2835-1.56/src'
make[2]: Entering directory '/home/pi/bcm2835-1.56/src'
/bin/mkdir -p '/usr/local/lib'
/usr/bin/install -c -m 644 libbcm2835.a '/usr/local/lib'
( cd '/usr/local/lib' && ranlib libbcm2835.a )
/bin/mkdir -p '/usr/local/include'
/usr/bin/install -c -m 644 bcm2835.h '/usr/local/include'
make[2]: Leaving directory '/home/pi/bcm2835-1.56/src'
make[1]: Leaving directory '/home/pi/bcm2835-1.56/src'
Making install in doc
make[1]: Entering directory '/home/pi/bcm2835-1.56/doc'
make[2]: Entering directory '/home/pi/bcm2835-1.56/doc'
make[2]: Nothing to be done for 'install-exec-am'.
make[2]: Nothing to be done for 'install-data-am'.
make[2]: Leaving directory '/home/pi/bcm2835-1.56/doc'
make[1]: Leaving directory '/home/pi/bcm2835-1.56/doc'
make[1]: Entering directory '/home/pi/bcm2835-1.56'
make[2]: Entering directory '/home/pi/bcm2835-1.56'
make[2]: Nothing to be done for 'install-exec-am'.
make[2]: Nothing to be done for 'install-data-am'.
make[2]: Leaving directory '/home/pi/bcm2835-1.56'
make[1]: Leaving directory '/home/pi/bcm2835-1.56'
pi@raspberrypi:~/bcm2835-1.56 $
  • build LED test 并执行
pi@raspberrypi:~/Pioneer600 $ cd LED/
pi@raspberrypi:~/Pioneer600/LED $ ls
bcm2835 fs python shell wiringPi
pi@raspberrypi:~/Pioneer600/LED $ cd bcm2835/
pi@raspberrypi:~/Pioneer600/LED/bcm2835 $ ls
led led.c Makefile
pi@raspberrypi:~/Pioneer600/LED/bcm2835 $ make
make: 'led' is up to date.
pi@raspberrypi:~/Pioneer600/LED/bcm2835 $ ./led
bcm2835_init: Unable to open /dev/mem: Permission denied
pi@raspberrypi:~/Pioneer600/LED/bcm2835 $ sudo ./led

LED代码

/* LED.c
* you can build this with something like:
* gcc -Wall blink.c -o blink -lbcm2835
* sudo ./blink
*/
#include <bcm2835.h> #define PIN 26
int main(int argc, char **argv)
{
if (!bcm2835_init())return 1;
bcm2835_gpio_fsel(PIN, BCM2835_GPIO_FSEL_OUTP); while (1)
{
bcm2835_gpio_write(PIN, HIGH);
bcm2835_delay(500);
bcm2835_gpio_write(PIN, LOW);
bcm2835_delay(500);
}
bcm2835_close();
return 0;
}

可以看到LED blink.

树莓派 -- bcm2835 library (1)的更多相关文章

  1. 树莓派--bcm2835 library (2) 交叉编译BCM2835

    在上文中,按照guide, 在树莓派目标板上install bcm2835. 因为bcm2835是用户空间应用,所以可以在宿主机上交叉编译,生成binary后在树莓派执行 按照guide: Insta ...

  2. 关于RPi.GPIO、BCM2835 c library、WiringPi、Gertboard

    1.RPi.GPIO//RPi.GPIO-0.5.5.tar.gz 开发者:python官网:https://www.python.org/ 官网:https://pypi.python.org/py ...

  3. 详解树莓派Model B+控制蜂鸣器演奏乐曲

    步进电机以及无源蜂鸣器这些都需要脉冲信号才能够驱动,这里将用GPIO的PWM接口驱动无源蜂鸣器弹奏乐曲,本文基于树莓派Mode B+,其他版本树莓派实现时需参照相关资料进行修改! 1 预备知识 1.1 ...

  4. 树莓派 - wiringPi

    wiringPi其实和BCM2835 library类似,也是通过memmap, IOmap来实现在用户空间直接操作底层寄存器 wiringPi http://wiringpi.com/ Wiring ...

  5. 进监狱全攻略之 Mifare1 Card 破解

    补充新闻:程序员黑餐馆系统 给自己饭卡里充钱 ,技术是双刃剑,小心,小心! 前言 从M1卡的验证漏洞被发现到现今,破解设备层出不穷,所以快速傻瓜式一键破解不是本文的重点,年轻司机将从本文中获得如下技能 ...

  6. PCF8591 AD/DA模块使用详解

    I2C PCF8591 8位AD/DA转换 BCM2835 Library 1.PCF8591T简述 PCF8591器件图如下: PCF8591是一个8位的CMOS数据采集器件,具有4个模拟输入(其中 ...

  7. 树莓派 -- 按键 (key)使用BCM2835 gpio library

    BCM2835 GPIO library介绍 This is a C library for Raspberry Pi (RPi). It provides access to GPIO and ot ...

  8. 树莓派4B的CPU系统里查到为BCM2835而非BCM2711

    树莓派4B采用四核64位的ARM Cortex-A72架构CPU,型号为博通BCM2711 SoC.2711是个64位的四核,而2835是多年前的32位单核CPU. 查看当前芯片版本,显示为4核心,但 ...

  9. 在 树莓派上使用 c++ libsockets library

    rpi默认安装的编译器是gcc-4.6.2 而现在最新的c++ libsockets library 需要使用支持c++-11特征的编译器,即需要4.8.2才可以.为此,需要先升级编译器才可以支持编译 ...

随机推荐

  1. Linux 常用命令五 软链接和硬链接

    一.软链接 相当于windows的快捷方式,当源文件不存在时,软链接失效. 创建软链接: wang@wang:~/workpalce/python$ ls -l 总用量 -rw-rw-r-- wang ...

  2. bzoj 2245 [SDOI2011]工作安排【最小费用最大流】

    其实不用拆点,对于每个人我们假装他是\( s[i]+1 \)个点,可以由他向T点分别连\( s[i]+1 \)条边,容量为\( t[i][j]-t[i][j-1]\),由S点向所有产品i连容量为c[i ...

  3. bzoj 3206: [Apio2013]道路费用【最小生成树+并查集】

    参考:http://hzwer.com/6888.html 把k条道路权值设为0,和其他边一起跑MST,然后把此时选中的其他边设为必选,在新图中加上必选变缩成k个点,把所有边重标号,枚举k跳边的选取情 ...

  4. Ocelot(九)- 教你如何配置Ocelot?

    配置 可以在此处找到示例配置.配置有两个部分.一组ReRoutes和一个GlobalConfiguration.ReRoutes是告诉Ocelot如何处理上游请求的对象.全局配置有点hacky并允许覆 ...

  5. 7步教你使用git命令上传本地代码至github仓库(小白向)

    前言 1:首先你需要知道github和git分别是什么?(众所周知github是全球最大同性交友网站233333) github:国外一个免费托管代码的开源网站,每位注册用户都拥有专属的个人仓库(个人 ...

  6. Toasts官方教程

    Toasts IN THIS DOCUMENT The Basics Positioning your Toast Creating a Custom Toast View 在其它线程中启动Toast ...

  7. 452 Minimum Number of Arrows to Burst Balloons 用最少数量的箭引爆气球

    在二维空间中有许多球形的气球.对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标.由于它是水平的,所以y坐标并不重要,因此只要知道开始和结束的x坐标就足够了.开始坐标总是小于结束坐标.平面 ...

  8. Windows API函数大全一

    1. API之网络函数             WNetAddConnection 创建同一个网络资源的永久性连接             WNetAddConnection2 创建同一个网络资源的连 ...

  9. java封装的优点

    在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部份包装.隐藏起来的方法. 封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机 ...

  10. CF916C Jamie and Interesting Graph

    思路:构造 实现: #include <bits/stdc++.h> using namespace std; int main() { int n, m; cin >> n ...