我想要完成的是在函数中返回一个字节数组,以便我可以这样做:
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);
}
我希望有人能给我一个答案。提前谢谢!
答案 0 :(得分: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();
答案 1 :(得分:1)
如果您可以将function
转换为:
template<int N>
void function(byte (&array)[N]) {
}
或者,如果您想将大小限制为(例如,8):
void function(byte (&array)[8]) {
}
您无法返回原始数组,因为C风格的原始数组不可复制。