谁帮我解释一下这个函数(C语言)

xiao88yan 2006-03-02 07:03:29
LOCAL void _flush_cache_( VP laddr )
{
register UWentasm("r1");
register UWtagasm("r2");

tag = (UW)laddr & 0x1ffff000;  //这个是做什么的
for ( ent = 0x000; ent < 0x1000; ent += 0x010 ) {
*(_UW*)(0xf0000008 | ent) = (tag | ent) & 0xfffffc00; //主要是这个循环,它做了什么
}
}

...全文
265 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
李必胜 2006-06-11
  • 打赏
  • 举报
回复
学习~
flowercity 2006-03-23
  • 打赏
  • 举报
回复
up
danielxuao 2006-03-22
  • 打赏
  • 举报
回复
可以给分了
色郎中 2006-03-20
  • 打赏
  • 举报
回复
楼上说的差不多了

函数的的意思 应该是刷新CACHE 吧
tag = (UW)laddr & 0x1ffff000; 与啊 保证前几位的值
mp6 2006-03-17
  • 打赏
  • 举报
回复
LOCAL void _flush_cache_( VP laddr )
{
register UWentasm("r1");
register UWtagasm("r2");

tag = (UW)laddr & 0x1ffff000;  //这个是做什么的
for ( ent = 0x000; ent < 0x1000; ent += 0x010 ) {
*(_UW*)(0xf0000008 | ent) = (tag | ent) & 0xfffffc00; //主要是这个循环,它做了什么
}
}
这个程序是用来清楚cache的吧,
写程序的人希望cache清除后的值跟地址有一定关联,不至于所有值都是0或0xffffffff之类的,所以用tag = (UW)laddr & 0x1ffff000;确定值的高位。
*(_UW*)(0xf0000008 | ent) = (tag | ent) & 0xfffffc00;用来改变指定地址的值,值的高位由前面确定,低位在循环体里面确定。

21,600

社区成员

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

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