c - DevkitARM,模拟器上的白屏如果我在代码中使用for循环?
问题描述
此代码效果很好,并按预期输出像素:
int main()
{
*(unsigned int *)0x04000000 = 0x0403;
unsigned short *Screen = (unsigned short *)0x06000000;
Screen[120 + 80 * 240] = 0x001F;
Screen[136 + 80 * 240] = 0x03E0;
Screen[120 + 96 * 240] = 0x7C00;
Screen[100] = 0x7C00;
while (1);
return 0;
}
但是每当我尝试添加 for 循环并从中更改 vram 值时,我在模拟器上得到白屏,它编译时没有错误甚至警告,但我在模拟器上得到白屏。
int main()
{
*(unsigned int *)0x04000000 = 0x0403;
unsigned short *Screen = (unsigned short *)0x06000000;
Screen[120 + 80 * 240] = 0x001F;
Screen[136 + 80 * 240] = 0x03E0;
Screen[120 + 96 * 240] = 0x7C00;
Screen[100] = 0x7C00;
int i;
for (i = 100; i < 110; i++)
{
Screen[i] = 0x7C00;
}
while (1);
return 0;
}
解决方案
我遇到了同样的问题并找到了解决方案:您的显示控制指针需要是volatile
. 如果您不将其标记为volatile
,则在编译时会发生一些不需要的优化,从而导致您出现意外行为。
*(volatile unsigned int *)0x04000000 = 0x0403;
推荐阅读
- c++ - glGetBufferSubData() 不返回任何数据?
- typescript - 未知大小的数组,其中包含扩展同一父类的不同类的项目
- r - RStudio blogdown:在学术主题中将 [permalinks] 添加到 config.toml 似乎会停止渲染
- python-3.x - 本地 python 连接到远程服务器上的 Spark-SQL
- css - 使 ag-grid 以 100% 的角度页面高度的方法
- linux - awk 脚本无法与 gsub 一起正常工作 $10
- java - 如何更改擦除或更新文本、时间或输出文本
- scala - Spark 数据框列名无法识别
- node.js - 在 heroku 上部署 MERN 会导致意外错误
- javascript - 我可以使用引导弹出框显示带有标题(文本和图像)和正文(文本)的内容吗?