5.06.2010

Log : Build tcpmp - part II . exception on 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 就沒了。



... 然後第二個 exception 出現....

沒有留言: