2012-03-22 62 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

相關問題