2015-01-04 15 views
1

我正在運行一個beaglebone並希望編寫一個程序來對ADC進行採樣。我試圖從這裏使用blacklib(http://blacklib.yigityuce.com/index.html)。我克隆的git: https://github.com/yigityuce/BlackLib如何編譯blacklib(C++)

,並試圖編譯

g++ exampleAndTiming.cpp -std=c++11 

的例子然而,這給了我這樣的一噸的錯誤:

In file included from exampleAndTiming.cpp:33:0: 
exampleAndTiming/exampleAndTiming_GPIO.h: In function 'void exampleAndTiming_GPIO()': 
exampleAndTiming/exampleAndTiming_GPIO.h:97:12: error: 'sleep' was not declared in this scope 
    sleep(1); 
      ^
In file included from exampleAndTiming.cpp:34:0: 
exampleAndTiming/exampleAndTiming_ADC.h: In function 'void exampleAndTiming_ADC()': 
exampleAndTiming/exampleAndTiming_ADC.h:67:16: error: 'usleep' was not declared in this scope 
    usleep(1000); 
       ^

所以我包括unistd.h中(在exampleAndTiming.cpp中),但然後我得到這樣的錯誤:

/tmp/ccbgiXE9.o: In function `exampleAndTiming_GPIO()': 
exampleAndTiming.cpp:(.text+0x50): undefined reference to `Timing::startMeasure(std::string)' 
exampleAndTiming.cpp:(.text+0x80): undefined reference to `BlackLib::BlackGPIO::BlackGPIO(BlackLib::gpioName, BlackLib::direction, BlackLib::workingMode)' 
exampleAndTiming.cpp:(.text+0xbc): undefined reference to `Timing::endMeasure(std::string)' 
exampleAndTiming.cpp:(.text+0xec): undefined reference to `BlackLib::BlackGPIO::BlackGPIO(BlackLib::gpioName, BlackLib::direction, BlackLib::workingMode)' 
exampleAndTiming.cpp:(.text+0x104): undefined reference to `BlackLib::BlackGPIO::BlackGPIO(BlackLib::gpioName, BlackLib::direction, BlackLib::workingMode)' 
exampleAndTiming.cpp:(.text+0x11c): undefined reference to `BlackLib::BlackGPIO::BlackGPIO(BlackLib::gpioName, BlackLib::direction, BlackLib::workingMode)' 
exampleAndTiming.cpp:(.text+0x158): undefined reference to `Timing::startMeasure(std::string)' 

我一直在看一些庫例子,並編譯它,但我無法理解這一切。我已經編譯了大量的C++和c程序,但我無法得到這個工作。所以任何幫助將不勝感激。

回答

1

看來我設法自己修復它,一些nooblike行爲不包括所有的cpp文件,但更多的是,我還需要添加#include到BlackCore.h以避免大量未定義的函數錯誤。

最後的命令:

g++ exampleAndTiming.cpp exampleAndTiming/Timing.cpp BlackADC.cpp BlackCore.cpp BlackGPIO.cpp BlackI2C.cpp BlackPWM.cpp BlackSPI.cpp BlackUART.cpp -std=c++11 

我可能需要做一個makefile來seperately編譯庫,時間多做一些挖掘和學習。

0

我是BlackLib的創始人,YiğitYÜCE。你自己找到了你的答案。您在評論中提到的makefile將很快發佈。

+0

這將是一個有益的另外的連接,再加上一個示例項目很可能是最好的。雖然我確實恢復了libpruio,因爲blacklib不使用PRU,出於某種原因,獲取ADC值的速度更慢,然後只需從文件系統讀取相關文件(每秒讀取130次,讀取所有ADC通道80次)。 – tomzooi

2

完全指南如何編譯BLACKLIB直接BEAGLEBONE BLACK(C版本)運行埃:

程序:

膩子 - 從Windows與BBB通信(使用SSH與USB電纜)

WinSCP賦予 - 管理(上傳,創建,刪除)文件直接在BBB

ç賦::塊 - 寫C++程序

任選

白蟻2。9 - 發送和從UART <接收UART發送 - > USB轉換器(實際上膩子可以用來做以及)

1)得到BlackLib從official site

2)解壓庫和複製下列文件到單獨的文件夾:

BlackADC.cpp, BlackADC.h, BlackCore.cpp, BlackCore.h, BlackDef.h, BlackErr.h, BlackGPIO.cpp, BlackGPIO.h, BlackI2C.cpp, BlackI2C.h, BlackLib.h, BlackPWM.cpp, BlackPWM.h, BlackSPI.cpp, BlackSPI.h, BlackUART.cpp, BlackUART.h 

3)打開下面的代碼::塊文件3210,並添加

#include <unistd.h> 

#include "BlackUART.h"之後,在 「unistd.h中」 包括像睡眠())中的所有功能,打開(),關閉(...否則似乎缺少

4 )創建自己的程序main.cpp,你可以使用測試UART1和UART2下面的代碼:

#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 

#include <sstream> 
#include <string> 
#include <iostream> 


#include "BlackLib.h" 


int main(){ 

    std::string writeToUart1; 
    std::string writeToUart2; 
    std::string readFromUart1; 
    std::string readFromUart2; 
    int counter; 
    std::ostringstream os1; 
    std::ostringstream os2; 

    BlackLib::BlackUART Uart1(BlackLib::UART1, 
           BlackLib::Baud9600, 
           BlackLib::ParityEven, 
           BlackLib::StopOne, 
           BlackLib::Char8); 
    // Pins on BeagleBone Black REV C 
    // UART1_RX -> GPIO_15 (P9.24) 
    // UART1_RX -> GPIO_14 (P9.26) 

    BlackLib::BlackUART Uart2(BlackLib::UART2, 
           BlackLib::Baud9600, 
           BlackLib::ParityEven, 
           BlackLib::StopOne, 
           BlackLib::Char8); 
    // Pins on BeagleBone Black REV C 
    // UART2_RX -> GPIO_2 (P9.22) 
    // UART2_RX -> GPIO_3 (P9.21) 

    std::cout << "Program UART start" << std::endl << std::flush; 

    Uart1.open(BlackLib::ReadWrite | BlackLib::NonBlock); 
    Uart2.open(BlackLib::ReadWrite | BlackLib::NonBlock); 

    counter = 0; 

    while (true){ 

     os1.str(""); 
     os1.clear(); 
     os1 << "Uart1 to TX: " << counter << "\n"; 
     writeToUart1 = os1.str(); 
     Uart1 << writeToUart1; 

     readFromUart1 = ""; 
     Uart1 >> readFromUart1; 
     if (readFromUart1.compare("") != 0){ 
       std::cout << "Uart1 from RX: " << readFromUart1 << "\n" << std::flush; 
     } 
     Uart1.flush(BlackLib::bothDirection); 
     counter++; 
     sleep(2); 


     os2.str(""); 
     os2.clear(); 
     os2 << "Uart2 to TX: " << counter << "\n"; 
     writeToUart2 = os2.str(); 
     Uart2 << writeToUart2; 

     readFromUart2 = ""; 
     Uart2 >> readFromUart2; 
     if (readFromUart2.compare("") != 0){ 
       std::cout << "Uart2 from RX: " << readFromUart2 << "\n" << std::flush; 
     } 
     Uart2.flush(BlackLib::bothDirection); 
     counter++; 
     sleep(2); 


    } 

    return 1; 
} 

5)的main.cpp中保存到同一文件夾中BlackLib文件

6)使用WinSCP,在BBB上創建目錄(例如, /家庭/ UART)和所有BlackLib文件和main.cpp中複製到這個文件夾

7)開放膩子並導航到該文件夾​​: cd /home/uart

8)通過編譯文件: gcc *.cpp -o main -std=c++11

9)運行該程序: ./main

10)連線到UART < - > USB轉換器和BBB。從BBB的輸出中應該是這樣的:

Uart2 to TX: 1 OR Uart1 to TX: 0 
Uart2 to TX: 3 OR Uart1 to TX: 2 

取決於導線