查看: 152|回复: 1

[原创] [每日一帖]分享一段测试RAM大小的代码~~~~~~~

[复制链接]

26

主题

4

好友

731

积分

举人

Rank: 4

  • TA的每日心情
    开心
    7 分钟前
  • 签到天数: 110 天

    [LV.6]常住居民II

    发表于 2016-8-25 18:33:52 |显示全部楼层
    本帖最后由 xinchao 于 2016-8-26 13:42 编辑

          调试STM32时,写了一段测试RAM容量的代码,贴出来大家看看。希望有用,如果你有更好的方法,欢迎分享!

    测试过程是这样的;
    1.先设定一个容量值。
    2.在设定的容量值里,由高地址往低地址依次写入测试数据。
    3.再由低地址往高地址依次读出数据进行校验,如果出错,则出错时的地址就是RAM的容量,测试结束;如果没出错则转下一步。
    4.增加设定的容量值,转第1步重新测试。

    u32 SRAM_Size_Test(void)        //外部内存容量测试(最大测试32MB)
    {
            union{
                    u8 a[4];
                    u32 l;
            }adv;
            u32 add;
            u32 dat;
            u16 size = 0;
            while(size < 0x8000)        //最大测试32MB 要测再大的改此值
            {
                    if(size < 0x0800)        size += 256;      // 2MB内 每次加256KB
                    else if(size < 0x2000)   size += 2048;     // 8MB内 每次加2MB
                    else                     size += 8192;     //32MB内 每次加8MB

                    add = size * 1024;
                    dat = 66666;
                    //------------Write Datas------------
                    do{
                            dat += 1234;
                            add -= 4;

                            adv.l = dat;
                            SRAM_WriteBuffer(adv.a, add, 4);
                    }while(add > 0);
                    //------------Verify Datas-----------
                    do{
                            SRAM_ReadBuffer(adv.a, add, 4);
                            if(dat != adv.l) break;
                            add += 4;
                            dat -= 1234;
                    }while(add < (size * 1024));

                    if(add < (size * 1024)) break;
                    else        printf("\r\nSRAM Size %u KB Test OK!", add / 1024);
            }
            printf("\r\nThe SRAM is %u KB", add / 1024);
             return(add / 1024);
    }
    void FSMC_SRAM_WriteBuffer(u8* pBuffer, u32 WriteAddr, u32 n)
    {
            for(; n!=0; n--)
            {
                    *(vu8*)(Bank1_SRAM3_ADDR + WriteAddr) = *pBuffer;
                    WriteAddr++;
                    pBuffer++;
            }
    }
    void FSMC_SRAM_ReadBuffer(u8* pBuffer, u32 ReadAddr, u32 n)
    {
            for(; n!=0; n--)
            {
                    *pBuffer++ = *(vu8*)(Bank1_SRAM3_ADDR+ReadAddr);
                    ReadAddr++;
            }
    }
    XinChao
    回复

    使用道具 举报

    8

    主题

    1

    好友

    488

    积分

    秀才

    Rank: 3Rank: 3

    该用户从未签到

    发表于 2016-8-26 10:22:29 |显示全部楼层
    谢谢分享,保存下来试试
    回复

    使用道具 举报

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

    关闭

    站长推荐上一条 /6 下一条


    手机版|爱板网 |网站地图  

    GMT+8, 2016-12-8 10:02 , Processed in 0.209689 second(s), 9 queries , Memcache On.

    苏公网安备 32059002001056号

    Powered by Discuz!

    回顶部