2016-06-14 66 views
0

我试图做到的是无论是在一个函数返回的字节数组,这样我可以这样做:返回字节或传递一个数组的数组功能

byte array[8] = function();

我用我的自制的图书馆,以获得与i2c巴士的价值。这是库:

#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 

我的其他代码:

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); 

} 

我希望有人能提供我一个答案。提前致谢!

回答

1

您可以通过引用传递一个数组,如果你可以改变你的function为:

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

} 

或者,如果你要限制的大小(例如,8):

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

} 

您不能返回原数组,因为C风格的原始数组不复制能力。

2

byte array [8] = function();

你不能直接用C数组。
你必须将它包装在一个类中(如std::array<byte, 8>)。

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

您可以返回引用数组:

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; 
} 

,并使用它:

auto& xAxis = manager.getXaxis();