gpt4 book ai didi

c++ - Arduino Sketch 编译然后在上传时卡住

转载 作者:太空宇宙 更新时间:2023-11-04 14:16:44 35 4
gpt4 key购买 nike

我目前正在开发一个自动跳棋盘。我使用三个类在 C++ 中对其进行了编码,然后进行了必要的更改以将其用作 Arduino 上的库。C++ 代码分为三个类,它们为棋盘的位置启动一个 8 x 8 数组,并跟踪棋盘上棋子的移动。

我认为转换为 Arduino 库是正确的,因为我能够毫无错误地编译草图。但是当我将它上传到 ADK Mega 时,即使是简单的命令,如 Serial.print(),串行监视器上也绝对没有响应。

这是草图:

#include <Board.h>

Board myBoard ;

int currentTurn=0;
int order[4][4]={{0,2,1,3},{1,5,2,4},{4,2,5,3},{2,4,0,2}};
int k=0;
int *A;

void setup()
{
pinMode(13, OUTPUT);
Serial.begin(9600);
}

void loop()
{
A=myBoard.arr();
for (int i=0; i<98; i++)
{
Serial.print(A[i]);
}

command[0]=order[k][0];
command[1]=order[k][1];
command[2]=order[k][2];
command[3]=order[k][3];

myBoard.processCommand(command,currentTurn);

if(myBoard.nextTurn())
{
if(currentTurn==0)
{
currentTurn=1;
digitalWrite(13,HIGH);
delay(3000);
}
else
{
currentTurn=0;
digitalWrite(13,LOW);
delay(3000);
}
}
k++;
}

基本上,该类返回一个由 0 和 1 组成的数组,其中包含有关 pawn 位置的信息。但是我一上传草图就没有任何反应!

有没有人知道为什么会发生这种情况?

如果有人认为问题可能出在这里,这就是 Board 类的构造函数

编辑

 Board::Board()
{

bool gameFinished=false;
bool turnChange=false;
initBoard();
initPawns();

}

我更改了构造函数以简化操作。对象数组现在创建为 header 中的公共(public)成员:Pawn myPawns[24]。该程序现在可以正确运行并且我能够打印数组,但只能打印 void loop() 中的第一次迭代,之后打印的数组对应于一个空板(不存在棋子)。我怀疑程序在第一次迭代后(调用构造函数时)没有正确访问 Pawns 数组。动态分配 Pawns 数组会解决这个问题吗?

最佳答案

在您的构造函数中,您要求为小型处理器提供大量堆栈:

  • 24 个 Pawn - 不管它们有多大
  • 64 个 int 用于 board

Pawn 有多少字节?

您可能会用完堆栈。查看this thread有关内存类型以及如何查看堆栈/堆是否用完的更多讨论。 Another useful page on Arduino memory

1224 字节对于总共可用的 2048 (IIRC) 来说是相当多的!

此外 - 您是否调用了 new - 这也将使用堆,它也是 RAM。

编辑:从您的评论中可以看出,您分配了它们两次,一次在类中,一次在函数内部的堆栈上 - 您是故意这样做的吗?

更多编辑:

不要在 header 中分配内容。 extern 然后或原型(prototype)化它们,或将它们放入类中。但是不要在那里分配它们!

如果类中有 Pawn myPawns[24],则无需在构造函数中声明它。

关于c++ - Arduino Sketch 编译然后在上传时卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10517850/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com