谁帮我解释一下这个函数(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; //主要是这个循环,它做了什么
}
}

...全文
238 点赞 收藏 5
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
李必胜 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;用来改变指定地址的值,值的高位由前面确定,低位在循环体里面确定。

回复
相关推荐
发帖
驱动开发/核心开发
创建于2007-09-28

2.1w+

社区成员

硬件/嵌入开发 驱动开发/核心开发
申请成为版主
帖子事件
创建了帖子
2006-03-02 07:03
社区公告
暂无公告