2016-06-14 6 views
0

Was ich versuche zu erreichen ist entweder ein Array von Bytes in einer Funktion zurückzugeben, so dass ich tun kann:Rückgabe oder Übergabe eines Arrays in eine Funktion

byte array[8] = function();

Ich bin mit meiner Selbst erstellte Bibliothek, um Werte mit dem i2c-Bus zu erhalten. Dies ist die Bibliothek:

#ifndef MPULIBRARY_HPP 
#define MPULIBRARY_HPP 
#include "hwlib.hpp" 

namespace mpulibrary{ 
class mpumanager 
{ 
private: 
    hwlib::i2c_bus_bit_banged_scl_sda bus; 
    byte startregister[2] = {0x6B, 0}; 
    byte adress = 0x68; 
    byte xregister[8] = {0x3B}; 
    byte yregister[8] = {0x3D}; 
    byte zregister[8] = {0x3F}; 
public: 

    mpumanager(hwlib::i2c_bus_bit_banged_scl_sda bus): 
     bus(bus) 
    {} 

    void startup(){ 
     bus.write(adress, startregister, 2); 
    } 

    byte getXaxis(){ 
     bus.write(adress, xregister, 1); 
     bus.read(adress, xregister, 2); 
     return xregister[8]; 
    } 
    byte getYaxis(){ 
     bus.write(adress, yregister, 1); 
     bus.read(adress, yregister, 2); 
     return yregister[8]; 
    } 
    byte getZaxis(){ 
     bus.write(adress, zregister, 1); 
     bus.read(adress, zregister, 2); 
     return zregister[8]; 
    } 

}; 
}; 
#endif // MPULIBRARY_HPP 

Mein anderer Code:

auto manager = mpulibrary::mpumanager(i2c_bus); 

for(;;){ 
    manager.startup(); 

    byte ydata[8] = {}; 
    manager.getYaxis(ydata[8]); 


    byte zdata[8] = {0x3F}; 
    i2c_bus.write(adress, zdata, 1); 
    i2c_bus.read(adress, zdata, 2); 

    int16_t yaxis = 0; 
    int16_t zaxis = 0; 
    yaxis = (ydata[0] << 8) + ydata[1]; 
    zaxis = (zdata[0] << 8) + zdata[1]; 

    hwlib::cout << "Y: " << yaxis << " Z:" << zaxis << "\n"; 
    hwlib::wait_ms(100); 

} 

Ich hoffe, dass mir jemand eine Antwort geben kann. Danke im Voraus!

Antwort

1

Sie ein Array als Verweis übergeben könnte, wenn Sie Ihre function als verwandeln könnte :

template<int N> 
void function(byte (&array)[N]) { 

} 

Oder wenn Sie die Größe, wie (zum Beispiel 8) einschränken wollen:

void function(byte (&array)[8]) { 

} 

Sie können nicht wieder ein rohes Array, weil C-Stil raw-Arrays sind nicht kopier können.

2

Bytearray [8] = function();

Sie können nicht direkt mit C-Array.
Sie müssen es in eine Klasse (wie std::array<byte, 8>) wickeln.

byte xregister[8] = {0x3B}; 
byte getXaxis(){ 
    bus.write(adress, xregister, 1); 
    bus.read(adress, xregister, 2); 
    return xregister[8]; 
} 

Sie kann auf Array zurück:

byte xregister[8] = {0x3B}; 
using byte_array = byte[8]; // typedef to avoid strange syntax in return type 

byte_array& getXaxis(){ 
    bus.write(adress, xregister, 1); 
    bus.read(adress, xregister, 2); 
    return xregister; 
} 

und verwenden es:

auto& xAxis = manager.getXaxis(); 
Verwandte Themen