首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

8541E 执行条指令为何用了3us?

8541E 执行条指令为何用了3us?

powerPC8541,DDR2(300M或500M),vxworks6.4下的一段程序,CPM的计数器配置为144ns计
数一次。


CPM的计数器清零;
一段其它代码A;
count[0]=CPM的计数器;
//WRS_ASM("lis r17, 0x1ba0e94@h");
//WRS_ASM("lbz r18, 0x0e94(r17)");
count[1]=CPM的计数器;
一段其它代码B;


没有那两行的嵌入汇编代码,count[1]-count[0]=0或1,
加入那两行的嵌入汇编代码,count[1]-count[0]=25,
也就是说访问0x1bacf94用了3us的时间。大约是从DDR内存拷贝4k字节数据的时间
在shell下修改那两行机器码,以改为访问其它范围的内存,结果如下
访问0x1bab000~0x1babfff时 count[1]-count[0]=0或1,
访问0x1bac000~0x1bad000时 count[1]-count[0]=25,
访问0x1bad001~0x1badfff时 count[1]-count[0]=0或1,
访问0x1bae000~0x1baefff时 count[1]-count[0]=0或1,
出现异常的是0x1bac000~0x1bad000这一段(4k字节)。

但单独用memcpy拷贝0x1bac000~0x1bad000这4k数据,耗时和拷贝其它内存一样。
现象可反复重现,可排除任务调度的影响。


奇怪的是为何一条访问内存的指令会耗时这么长?
cache或TLB不命中都应该不会导致3us长的延时的,
返回列表