【发布时间】:2020-08-26 22:25:27
【问题描述】:
所以我有一个类“SnakeGame”来处理我的游戏。 我有另一个名为 engine 的类,它只是一个接受玩家输入和设置像素(头文件和主文件)的类:
void Engine::SetPixels(int positionX, int positionY, int sizeX, int sizeY) {
display.fillRect(positionX, positionY, sizeX, sizeY, WHITE);
Serial.println("drawing");
display.display();
}
void Engine::Display() {
display.display();
Serial.println("Display");
}
在我的 .ino 文件和 loop() 函数中(我目前正在使用 Visual micro):
SnakeGame game;
void loop() {
// Calculate delta time
unsigned long frameStartTime = millis();
unsigned long deltaTimeMillis = frameStartTime - timeOld;
float deltaTime = deltaTimeMillis / 1000.0;
timeOld = frameStartTime;
// Update
engine.updateLoop(deltaTime);
engine.SetPixels(x, y, 16, 16);
x, y++;
game.updateLoop(engine);
}
代码运行良好,serial.println 仍在打印,但我的显示器上没有任何奇怪的东西。当然,我记得在setup() 中调用display.begin()。如果我只是删除SnakeGame game 行,它将正常工作。即使我没有调用该变量或对该变量做任何事情,但如果它在那里,它仍然会:
- 不断重启arduino
- 未在显示屏上绘制任何像素。
这是为什么呢?这是我完整的script
【问题讨论】:
-
删除
Serial.println("Starting");时会发生什么 -
正常打印出来的
-
所以如果
println正在破坏您的 LCD 代码,那么就会有一些障碍......他们使用同一行或任何资源...... -
我认为问题不在于 println 而在于指针。因为如果我直接调用该函数并删除指针它会正常工作。
-
@Spektre 我终于知道我的代码出了什么问题。在
SnakeGame.h中,我声明了 2 个 char 数组,每个数组的大小约为 512MB,因此总数为 1024MB。 arduino 的内存只有大约 2KB,所以只有一半。因此,它会在运行代码时崩溃,因为它试图访问比它拥有的更多的内存。我对 c++ 和 arduino 真的很陌生,所以我以前没有任何内存管理经验。