帮忙解释一下这段C代码!

kmajian 2005-09-30 11:03:26
for (offset = 0; offset < FLASH_SIZE; offset += MMU_SECTION_SIZE) {
cached_addr += offset;
uncached_addr += offset;
*(mmu_tlb_base + (cached_addr >> 20)) = \ //***
(cached_addr | MMU_SECDESC | MMU_CACHEABLE);
*(mmu_tlb_base + (uncached_addr >> 20)) = \ //***
(cached_addr | MMU_SECDESC);
}

感觉不是很能理解,特别是标注***的地方!谢谢了。
...全文
197 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jsjjms 2005-09-30
  • 打赏
  • 举报
回复
*(mmu_tlb_base + (cached_addr >> 20)) = (cached_addr | MMU_SECDESC | MMU_CACHEABLE);

右边是或运算.取结果到 mmu_tlb_base偏移 (cached_addr右移20位) 的地方.
fiftymetre 2005-09-30
  • 打赏
  • 举报
回复
//***
(cached_addr | MMU_SECDESC | MMU_CACHEABLE);
*(mmu_tlb_base + (uncached_addr >> 20)) = \ //***


就是与或运算,和地址偏移之类的。
xiaocai0001 2005-09-30
  • 打赏
  • 举报
回复
就是多了个地址偏移~
blh 2005-09-30
  • 打赏
  • 举报
回复
int index;
for (offset = 0; offset < FLASH_SIZE; offset += MMU_SECTION_SIZE) {
cached_addr += offset;
uncached_addr += offset;
index = cached_addr >> 20;
mmu_tlb_base[index] = (cached_addr | MMU_SECDESC | MMU_CACHEABLE);
index = uncached_addr >> 20;
mmu_tlb_base[index] = (cached_addr | MMU_SECDESC);
}
supermanone 2005-09-30
  • 打赏
  • 举报
回复
*(mmu_tlb_base + (cached_addr >> 20))
mmu_tlb_base :基地址
(cached_addr >> 20) :偏移地址
(mmu_tlb_base + (cached_addr >> 20)) :变量地址
*(mmu_tlb_base + (cached_addr >> 20)) :变量内容

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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