У меня есть устройство ARMv5 не XScale (электронный словарь SHARP Brain ™ ) с Windows Embedded CE 6.0, установленной во флэш-памяти NAND, и я использую TCPMP для воспроизведения своих любимых мелодий AAC и MPEG- 4 фильма.
Но когда я запускаю 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 и перехватывая исключение, если было сгенерировано исключение «Undefined Instruction».
Проблема в том, что системе не удается правильно передать это исключение в TCPMP, что приводит к зависанию TCPMP. Похоже, что это связано не с Windows CE, а с ошибками драйверов в этом устройстве. Обновления драйверов не ожидаются, поскольку запуск TCPMP на этом устройстве официально не поддерживается.
Я опубликовал эту проблему в 2channel , и некоторые люди утверждали, что этот способ определения наличия XScale не годится, но никто даже не пытался найти лучший способ. Поэтому я погуглил и прочитал Справочное руководство по архитектуре ARMv5 и так далее, но ничего не смог найти. Похоже, что почти каждая программа, использующая набор команд XScale, определяет, присутствует ли XScale таким же образом.
Вопрос в том, можно ли определить, присутствует ли набор команд XScale, без использования каких-либо исключений или какого-либо режима ЦПУ, кроме режима пользователя?