zoukankan      html  css  js  c++  java
  • 树莓派 -- bcm2835 library (1)

    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.



  • 相关阅读:
    UBI系统原理分析【转】
    udhcpc命令【转】
    Device Tree(三):代码分析【转】
    Linux 中断详解 【转】
    ROS探索总结(三)——ROS新手教程【转】
    机器人操作系统(ROS)教程4:ROS的框架【转】
    你知道市面上机器人都用哪些操作系统吗【转】
    dump_stack调用过程【原创】
    #if、#ifdef、#if defined之间的区别【转】
    浅析firmware完整生存和使用流程 【转】
  • 原文地址:https://www.cnblogs.com/feiwatson/p/9478220.html
Copyright © 2011-2022 走看看