好的,所以这里有一个对你来说可能很简单,但我不太确定。
我有以下代码,通过查看代码可能很清楚我想做什么。
Arduino.ino
RF myRF; //Creation of RF class.
const int dataSize = 500;
byte storedData[dataSize];
//array is populated through program then the following is called
myRF.populate(storedData);
RF.CCP
const int dataSize = 500;
byte recivedData[dataSize];
void RF::populate(byte reciveddata){
recivedData = reciveddata;
}
RF.H
#include Arduino.h
#ifndef RF_H
#define RF_H
class RF {
public:
RF();
~RF();
void recive();
void send();
void print();
void sendnew(byte Storeddata);
};
#endif
但这会产生错误“未声明字节”
希望明确我打算做什么,并希望你能帮助谢谢。
答案 0 :(得分:0)
您的文件存在两个问题:
h file:
#include Arduino.h
你应该写
#include <Arduino.h>
c file:
const int dataSize = 500;
byte recivedData[dataSize];
void RF::populate(byte reciveddata){
recivedData = reciveddata;
}
这里有一个很大的问题。您在此处声明recivedData,但您想为其分配来自程序其他部分的值。这不是它的工作原理。
IMO你有两种方法可以做到这一点。
1)只存储指向内存的指针;这种方式比解决方案2更快,占用的内存更少,但您必须确保在函数期间不会更改.ino文件中传递的storedData
变量
#include "RF.h" // I hope you already included this
byte *recivedData;
void RF::populate(byte *reciveddata){
recivedData = reciveddata;
}
2)将接收到的数组的内容复制到该数组中;这样你就拥有了数组的副本,所以你占用了两倍的内存(但你可以毫无问题地编辑storedData
。)
#include "RF.h" // I hope you already included this
const int dataSize = 500;
byte recivedData[dataSize];
int recivedDataLength;
void RF::populate(byte *reciveddata, int reciveddatalength){
recivedDataLength = (reciveddatalength>dataSize) ? dataSize : reciveddatalength;
for (int i = 0; i < recivedDataLength; i++)
recivedData[i] = reciveddata[i];
}