我有一个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的?
这是NOR包含内核代码闪存。 – yvt 2014-04-07 12:16:29