1989lzhh
2009-02-19 09:59:29
[url]http://www.dev-scene.com/NDS/Tutorials_Day_3[/url]
在这之中有些关于输入的例子,按照文中的设置我自己编译时根本实现不出来。
devkitproR24+libnds1.3.1[code]#include
#include
int main(void)
{
int i;
//enable interrupts as before
irqInit();
irqEnable(IRQ_VBLANK);
//set frame buffer mode 0
videoSetMode(MODE_FB0);
//enable VRAM A for writting by the cpu and use
//as a framebuffer by video hardware
vramSetBankA(VRAM_A_LCD);
while(1)
{
u16 color = RGB15(31,0,0); //red
scanKeys();
int held = keysHeld();
if(held & KEY_A)
color = RGB15(0,31,0); //green
if (held & KEY_X)
color = RGB15(0,0,31); //blue
swiWaitForVBlank();
//fill video memory with the chosen color
for(i = 0; i < 256*192; i++)
VRAM_A[i] = color;
}
return 0;
}[/code]中发现key_x键值表现出一直按下,尽管我没有按,另外在另一个例子中也表现为触摸屏一直触摸尽管没有触摸。估计是arm7那里出问题了。上网google发现很多人也出现了这个问题。其中一个解决方法是把
irqInit();去掉估计是初始化让arm7不能对x y键还有触摸控制了。
arm7控制x y键还有触摸,arm9控制其余的键。
掌叔
2009-02-19 10:04:56
支持1989lzhh发现问题并将之解决分享的精神~
1989lzhh
2009-02-19 12:17:26
怪异了,编译了几个后,在回去编译那个有问题的,发现没有问题了。怪!!!
1989lzhh
2009-02-19 12:29:32
刚刚实验了一下,发现问题出在irqInit()上,libnds1.3.1介绍中又这么一句话
interrupts and fifo system are now initialised before main.
意思就是中断跟fifo系统在main函数开始前就初始化了。
因此在加irqInit()初始化,就会出问题了。
只要移去irqInit()就可以了!
1989lzhh
2009-02-19 12:59:10
其实发现还是有问题!!
#include
#include
int main(void)
{
consoleDemoInit();
while(1)
{
int i=0;
for(i=0;i<3;i++) //循环3次以上表现正常了,否则,没有按x键和触屏,下面的程序就显示已经按了和触摸了。并且显示三次。
{
swiWaitForVBlank();
}
scanKeys();
u16 held = keysHeld();
if( held & KEY_A)
printf("Key A is pressed
");
if( held & KEY_X)
printf("Key X is pressed
");
if( held & KEY_TOUCH)
printf("Touch pad is touched
");
swiWaitForVBlank();
//consoleClear(); 如果加上这段语句错过发现这个问题了,因为每个main循环后屏幕清空,三次以上后就表现正常了。
}
return 0;
}
掌叔
2009-02-19 16:57:57
1989lzhh兄有兴趣做nds开发的版主吗?