用.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);即可。