今天收到消息在应用程序中要可以获取cpu的id。从网上搜索一翻,参考了一个论坛中的贴子: [url]http://www.61ic.com/bbs/read.php?tid=5906&page=e&fpage=1[/url]
      用.s文件实现要export给.c/.cpp文件用的arm汇编函数,要在evc中设置该.s文件的custom build中commands为:armasm x.s ARMV4IRel/x.obj ;outputs为:ARMV4IRel/x.obj
我的x.s文件具体代码实现如下:

        AREA        |.text|, CODE, ARM
        EXPORT ReadCPUID
ReadCPUID
                MRC P15, 0, R0, C0, C0 ,0
                MOV pc,lr       
        END ; Must have the end statement
 
      arm的cpuid是在p15的c0中。但是在wince中只有在kernel mode下才能访问p15。可以通过设置pb中的build options的Enable Full Kernel Mode,这样应用程序就跑在kernel mode 了。通过测试上面的代码可以正常运行,不过很可惜,同一型号的cpu的id号都是一样的。以前没有搞过汇编,现在才知道,R0是用做返回值的。通常汇编函数的第一个参数也是放在R0中的,第二个参数放在R1中。
      如果上面的汇编函数要在.c文件中被调用只要先声明extern DWORD ReadCPUID(void);就可以直接调用了。如果是在.cpp文件中则声明extern "C" DWORD ReadCPUID(void);即可。