查看: 2024|回复: 1

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

[复制链接]
  • TA的每日心情
    无聊
    2020-7-7 14:50
  • 签到天数: 284 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 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++;
            }
    }
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2017-12-29 15:29
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

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

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2024-4-20 07:24 , Processed in 0.117275 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.