问题描述
我在Arduino上使用C / C ++进行工作,无法将需要的东西放入uint8_t类型的数组中。 C / C ++不是我所熟悉的语言(我是python / PHP /基本的人),因此目前我正努力寻找正确的术语/文档。
基本上,下面的示例显示了它的工作原理:
static uint8_t mydata[] = "Hello";
String Temp = "31.0";
String Hum = "60.0";
String Measurements = "";
Measurements = Temp + "C" + Hum + "H";
mydata[0] = ""; //Reset the array contents? Not sure.
uint8_t mydata[] = Measurements;
error: initializer fails to determine size of 'mydata'
uint8_t mydata[] = Measurements;
^~~~~~
error: array must be initialized with a brace-enclosed initializer
uint8_t mydata[] = Measurements;
^~~~~~~~~~~~
initializer fails to determine size of 'mydata'
有关如何处理此问题的任何建议?我看到使用static uint8_t mydata[] = "Hello";
的第一个实例不需要声明数据大小。如果我更改为uint8_t mydata[0] = Measurements;
,则长度警告消失了,但是我得到的消息是,必须使用大括号括起来的初始化程序来初始化数组。
解决方法
对于嵌入式代码,紧凑性是关键。像这样使用用户定义的结构。
struct Temperature{
uint8_t temp[7];
uint8_t humi[7];
Temperature(){temp[0] = humi[0] ='\0';}
Temperature(uint8_t * t,uint8_t *h){strcpy(temp,t); strcpy(humi,h);}
void reset(){ temp[0] = humi[0] ='\0';}
void setTemp(uint8_t* t){strcpy(temp,t);}
void setHum(uint8_t* h){strcpy(humi,h);}
void print(){ char str[16]; sprintf(str,"Temp=%4.2f Hum=%4.2f",atof(temp),atof(humi)); Serial.println(str);}
void operator=(Temperature other){ strcpy(temp,other.temp); strcpy(humi,other.humi);}
};
void loop() {
Temperature temp1;
temp1.reset();
temp1.setTemp("52.34");
temp1.setHum("30");
Temperature temp2;
temp2 = temp1;
temp2.print();
}