嵌入式爱好者

查看: 10494|回复: 0

[Linux] uboot拷贝nand到ram的过程中有两个for循环

[复制链接]

1

主题

1

帖子

6

积分

扫一扫,手机访问本帖
发表于 2015-5-24 20:20:34 | 显示全部楼层 |阅读模式
本帖最后由 vicchen 于 2015-5-24 20:22 编辑

boot拷贝nand到ram的过程中,函数
static int nandll_read_blocks (ulong dst_addr, ulong size, int large_block)
中先后两次调了函数
static int nandll_read_page (uchar *buf, ulong addr, int large_block)

调用过程如下:

  if(large_block==2)
        page_shift = 12;
。。。
  if(large_block == 2)
    {
        /* Read pages */
        for (i = 0; i < 4; i++, buf+=(1<<(page_shift-1))) {
            nandll_read_page(buf, i, large_block);
        }


        /* Read pages */
        for (i = 4; i < (0x3c000>>page_shift); i++, buf+=(1<<page_shift)) {
            nandll_read_page(buf, i, large_block);
        }

    }else
    。。。
   }
。。。

其中第一for中的buf每次都偏移2k,第二个for中的buf每次都偏移4k,按我的理解就是nand中的page0、1、2、3都各放2k的有效数据(没有放满),而page4以后的都放4的数据(放满)。如果是,那又为什么要这样做?
麻烦版主或者实际验证过的大侠帮忙解答下,这问题让我困惑了好久,谢谢各位!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋| 飞凌嵌入式 ( 冀ICP备12004394号-1 )

GMT+8, 2025-3-14 13:44

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表