2012-03-22 59 views
0

我有一个ARMv5的动力非XScale的设备(SHARP Brain™电子词典)与安装在NAND闪存的Windows Embedded CE 6.0,我用TCPMP播放我最喜欢的AAC音乐和MPEG -4部电影。确定是否XScale的是存在于安全的方式

但是,当我开始TCPMP,有时TCPMP冻结。所以我看着TCPMP,我发现当这段代码执行时会发生冻结。

CheckARMXScale PROC 
mov r0,#0x1000000 
mov r1,#0x1000000 
mar acc0,r0,r1 ; <--- here 
mov r0,#32 
mov r1,#32 
mra r0,r1,acc0 
cmp r0,#0x1000000 
moveq r0,#1 
movne r0,#0 
cmp r1,#0x1000000 ;64bit or just 40bit? 
moveq r0,#2 
mov pc,lr 

此代码确定的XScale是否存在通过尝试执行的XScale指令,并且捕捉异常如果“未定义指令”抛出异常。

的问题是,不知何故系统无法正常通过这个例外TCPMP,造成TCPMP冻结。这似乎不是因为Windows CE,而是因为这款设备中有错误的驱动程序。由于在此设备上运行TCPMP未得到正式支持,因此不会期望任何驱动程序更新。

我把这个问题发布到2channel,有人声称这样判断XScale是否存在并不好,但没有人甚至试图找到更好的方法。所以我搜索了一下并阅读了ARMv5体系结构参考手册等,但是我什么都没发现。似乎几乎每个使用XScale指令集的程序都会以相同的方式确定XScale是否存在。

问题是,是否有可能确定是否XScale的指令集是本,而不使用任何异常或除了用户模式中的任何模式的CPU的?

+0

这是NOR包含内核代码闪存。 – yvt 2014-04-07 12:16:29

回答

0
  1. 尝试IOCTL_PROCESSOR_INFORMATION

  2. (需要切换到内核模式)读出的CP15寄存器C0,主ID寄存器又名ID代码寄存器又名ARM CPUID。最高字节是XScale的实现器,它将是0x69('i',Intel)。

还请检查this thread

相关问题