我遇到了一个让我很困惑的问题,因为我能想到的每个解决方案都有一个问题,导致它无法完全发挥作用。我正在 MSP430FF529 上开发一款游戏,当首次通电时,使用循环和循环延迟将两个图像无限地绘制到屏幕上。我想要它,这样当用户按下开始按钮(端口上的一个简单的高沿触发器)时,程序会立即停止绘制这些屏幕,无论它在进程的哪个部分,并开始执行其余部分运行游戏的代码。
我可以将把图像放在屏幕上的函数放在一个 do while 循环中,但它不会是异步的,因为当前正在绘制的图像必须在它继续之前完成。
我会使用 break 命令,但我认为这在 ISR 中不起作用,只有当它直接在循环中时才起作用。
我可以将整个程序的其余部分放在用于按下开始按钮的 ISR 中,这样屏幕绘图基本上就不会返回,但这确实很混乱,编码不佳,并且会在以后引起很多问题。
本质上,我想让它在按下按钮时立即跳转到程序的实际游戏部分,而忘记在屏幕上绘制这些图像。执行例程中的代码后,是否有可能以某种方式使 ISR 无法返回当前发生的情况?基本上,一旦程序开始前进(按下开始按钮),我不想回到绘制图像的函数,除非我再次明确调用它。
我唯一能想到的是 goto 命令,我觉得在这种特殊情况下实际上并不算太糟糕,尽管我想避免使用它,因为担心它会成为一种习惯,因为它在大多数情况下是一个糟糕的解决方案. 但是,这甚至可能行不通,因为我觉得在 ISR 中使用 goto 真的会弄乱堆栈。
有任何想法吗?任何建议表示赞赏。