求助 关于MRC p15,0,R0,c0,c0,0的问题

baiminsheng 2009-03-27 12:00:09
MRC p15,0,R1,c0,c0,0这个指令是来读取ARM CPU的ID号到ARM寄存器R1里面的吗?如果是的话,我现在在EVC环境下嵌入了有下面汇编内容的.s文件:
AREA |.text|, CODE

EXPORT ARMCPUID
ARMCPUID PROC
MRC p15, 0, R1, c0, c0 ,0
STR R1,[R0],#0
MOV pc,lr
END
我想调用ARMCPUID这个函数来读取R0中存储的ID号,我怎么在EVC的环境下读取呢?
下面我简单说一下我的过程:我建立了一个button和一个edit,想通过点击这个button 在edit中显示出这个ID来,我在edit中关联了一个CString型的变量m_ID,然后在调用了ARMCPUID(&m_ID)来读取,但是我没有成功,请高人指点我应该如何去做,是不是我的这几句汇编不对啊。非常着急,我在线等,不胜感激。
...全文
346 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
baiminsheng 2009-03-27
  • 打赏
  • 举报
回复
哦 不好意思,我最开始写错了,是想读R1中内容,其实写哪个寄存器都行,呵呵
baiminsheng 2009-03-27
  • 打赏
  • 举报
回复
恩对是读c0到R0,我看datasheet上说的c0存储的就是ID,其实嵌入x86CPU的汇编只用_asm{}就能实现,但是现在嵌入的是ARM的汇编就不能那么做了,现在比较困惑,ADS我没有用过。
gooogleman 2009-03-27
  • 打赏
  • 举报
回复


上面的协处理器指令是读C0 送到R1

EVC嵌入汇编没有做过。

你参照一下ADS的样子试试。
baiminsheng 2009-03-27
  • 打赏
  • 举报
回复
谢谢您的提醒,我知道哪里出问题了,我定义的变量的类型不对,应该是unsigned int类型的,真是一着不慎满盘皆输啊呵呵,现在读出结果来了,显示的结果是1761946886.不知道对不对,我再检查一下,谢谢您了。我会把分数给您。我看看分数怎么给啊。我的msn是minshengbai@live.cn.如果您有兴趣,可以加我。再次感谢。
paul_chao 2009-03-27
  • 打赏
  • 举报
回复
有說明圖, 但沒法附上 (Please refer Intel XScale® Core Developer’s Manual, Page 81, Register 0: ID & Cache Type Registers)

31:24 Read / Write Ignored Implementation trademark (0x69 = ‘i’= Intel Corporation)
23:16 Read / Write Ignored Architecture version = ARM* Version 5TE

這東西會回傳一個 32-bits 值給你, 該值應為 0x6905xxxx, 所以你檢查 m_ID 的值, 該變數應為 unsigned int 的型態.

所以該函數 ARMCPUID 應該是正常工作, 是你期待錯了.

Paul, Chao @ Techware
baiminsheng 2009-03-27
  • 打赏
  • 举报
回复
不好意思,我的cpu是ARM PXA255的
baiminsheng 2009-03-27
  • 打赏
  • 举报
回复
那个.s文件里面定义了ARMCPUID这样的一个函数,我在button的程序代码中直接可以调用这个函数来进行读取,我在button的代码中是这样写的:
void CARMCPUDlg::OnButton1()
{
// TODO: Add your control notification handler code here
UpdateData();
ARMCPUID(&m_ID);//这个ARMCPUID函数就是在.s文件中Export的那个函数
UpdateData(false);
}
没有成功指的是:没有传回给我任何信息,我感觉ARM CPU的ID应该是一个字符串形式数据
我的arm型号是PXA270。
整个在我主机上的EVC程序是没有问题的,而在那个arm的设备上 我点击了那个button按钮以后 就没有读出数据。
baiminsheng 2009-03-27
  • 打赏
  • 举报
回复
那个.s文件里面定义了ARMCPUID这样的一个函数,我在button的程序代码中直接可以调用这个函数来进行读取,我在button的代码中是这样写的:
void CARMCPUDlg::OnButton1()
{
// TODO: Add your control notification handler code here
UpdateData();
ARMCPUID(&m_ID);//这个ARMCPUID函数就是在.s文件中Export的那个函数
UpdateData(false);
}
没有成功指的是:没有传回给我任何信息,我感觉ARM CPU的ID应该是一个字符串形式数据
我的arm型号是PXA270。
整个在我主机上的EVC程序是没有问题的,而在那个arm的设备上 我点击了那个button按钮以后 就没有读出数据。
paul_chao 2009-03-27
  • 打赏
  • 举报
回复
請教何謂 "然后在调用了ARMCPUID(&m_ID)来读取,但是我没有成功", 請問這個沒有成功, 指的是傳回值不對, 還是有錯誤發生呢?? 若是傳回值不對, 那該傳回值為何, 您預期的值又為何??

順便可否把您測試的機器上的 CPU 型號一併告知.

Paul, Chao @ Techware

19,502

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧