5.06.2010

Log : trace tcpmp exception on CE 6.0 SetKMode

在 CE 6.0 不能 run 的原因好像是 SetKMode( ) 嗎?

雖然 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 就沒了。





沒有留言: