雖然 SetKMode 在 CE 6.0 已經不支援了,但是 CoreDll.dll 裡還是找得到 function。
SetKMode( ) 在 DetectCPU() 中使用,主要在知道 cpu type,設定好一堆 instruction capabilty。
這樣之後的一堆 image process 會依照 cpu 的 capability (指令集) 決定 code。
只好 hard code
if ((CpuId[0] & 0xFF000000) == 0x41000000) //arm
{ Caps |= CAPS_ARM_GENERAL;
switch ((CpuId[0] >> 4) & 0xFFF)
{
case 0x920: p->Model = T("920T");
break; case 0x922: p->Model = T("922T"); break; case 0x926: p->Model = T("926E"); Caps |= CAPS_ARM_5E; break; case 0x940: p->Model = T("940T"); break; case 0x946: p->Model = T("946E"); Caps |= CAPS_ARM_5E; break; case 0xA22: p->Model = T("1020E"); Caps |= CAPS_ARM_5E; break; } }
還有
if (CpuId[0]) { p->ICache = 512 << ((CpuId[1] >> 6) & 7); p->DCache = 512 << ((CpuId[1] >> 18) & 7); }
所以直接寫
p->ICache = 16*1024; p->DCache = 16*1024; Caps |= CAPS_ARM_GENERAL; p->Model = T("1020E"); Caps |= CAPS_ARM_5E;
其他的 code 都不要了。
這樣 exception 就沒了。
沒有留言:
張貼留言