-1

我正在尝试通过串行方式将我的 Arduino 上的一个数组发送到我的计算机。但是,每当我收到数组时,它显然包含随机且有时会逐秒变化的数据。这让我怀疑我错误地引用了指针,但我找不到语法问题。

该数组由 buildreport() 生成,它将一个布尔值* 返回到数组中的第一个元素。这由 loop() 占用,它将它写入串行线路。

//read pins
boolean report[NUM_BUTTONS] = {0,0,0,0,0,0,0,0,0}; //I set this to all zeroes for testing and brevity
boolean* x = &report[0];
return x;

和循环()

//if I don't read the serial, it will always be 
//available and execute forever.

if(Serial.available() != 0){ 
 incoming = Serial.read();
 boolean* reports = buildreport();
 //reports should now be the first element of the array
 for(int i=0;i<NUM_BUTTONS;i++){
   boolean x = *(reports+i);
   //x is set to value at reports[0] plus i

   Serial.write(x);

 } 
 Serial.write(0x0d); //carriage return
 Serial.write(0x0a); //line feed
}

每次我通过在串行线路上发送任何东西来请求数组时,我都会得到 9 个不是 1 或 0 的字节。有时第一个字节会改变。

4

1 回答 1

1

由于report是一个自动存储时长的数组,所以在函数返回时被销毁。使用它(通过x,指向其第一个元素的指针)会调用未定义的行为。

如果您想要一个函数创建一个数组,那么您必须使用动态内存分配(由malloc()及其朋友完成)或将数组作为函数的参数传入,并让函数用适当的值填充它。

于 2013-08-05T22:58:33.500 回答