硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1135|回复: 10
收起左侧

[其它] 求解,怎么测试单片机上真实的 RAM 空间大小

[复制链接]

1

主题

1

回帖

4

积分

新手上路

积分
4
发表于 2024-10-21 21:44:22 | 显示全部楼层 |阅读模式
  • 请教一下论坛的大佬们,我想测试一个单片机上真实的 RAM 空间有多大,因为很多国产芯片手册上标的 RAM 空间的大小并不是实际的空间大小,有没有什么办法可以测试?




回复

使用道具 举报

3

主题

84

回帖

93

积分

初级会员

积分
93
发表于 2024-10-22 07:31:41 来自手机 | 显示全部楼层
把时间浪费在这上面不值得,即使比标称的多,你敢用在产品上?即使你手上批次有那么大,你敢保证下一批次一样大吗?
回复

使用道具 举报

97

主题

537

回帖

843

积分

金牌会员

积分
843
发表于 2024-10-22 08:29:12 | 显示全部楼层
沙发说的对。标多大用多大。多的部分出了问题,人家不负责的。
共产主义一定胜利!
回复

使用道具 举报

6

主题

268

回帖

286

积分

高级会员

积分
286
发表于 2024-10-22 08:33:37 | 显示全部楼层
测试不是很简单么,内存写,再回读,是一样的就证明可以用,但厂家并不保证下一批次可以用。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116197
QQ
发表于 2024-10-22 09:51:47 | 显示全部楼层
RAM的话,实际读写测试就行
回复

使用道具 举报

4

主题

391

回帖

403

积分

高级会员

积分
403
发表于 2024-10-22 10:22:11 | 显示全部楼层
那个如果移植了shell几条指令就可以测试,就看mcu死给你看没
[C] 纯文本查看 复制代码
[url]https://github.com/cctv180/utils_lib[/url]
#include "utils_lib.h"
// 定义一个宏,用于检查字符是否可打印
#define IS_PRINT(ch) ((unsigned int)((ch) - ' ') < 127u - ' ')

// 定义常量字符串,提高可读性和可维护性
#define TXT_OFFSET "| Offset |"
#define TXT_HEX_8 " 00 01 02 03 04 05 06 07 "
#define TXT_HEX_16 " 00 01 02 03 04 05 06 07  08 09 0A 0B 0C 0D 0E 0F "
#define TXT_HEX_32 " 00 01 02 03 04 05 06 07  08 09 0A 0B 0C 0D 0E 0F  10 11 12 13 14 15 16 17  18 19 1A 1B 1C 1D 1E 1F "
#define TXT_ASCII "| ASCII |"

/**
 * 打印十六进制和ASCII表示的数据块。
 *
 * @param buf    要打印的数据块的指针
 * @param size   数据块的大小(以字节为单位)
 * @param number 每行打印的字节数(8、16、32等)
 */
void dump_hex(const void *_buf, uint32_t _size, uint32_t _number)
{
    uint8_t *buffer = (uint8_t *)_buf;
    const char *hex_table = (_number == 32) ? TXT_HEX_32 : ((_number == 8) ? TXT_HEX_8 : (_number = 16, TXT_HEX_16));
    printf("\r\n%s%s%s\r\n", TXT_OFFSET, hex_table, TXT_ASCII); // hex table
    printf("== base address 0x%08X length %d ==\r\n", (uint32_t)buffer, _size);

    for (uint32_t i = 0; i < _size; i += _number)
    {
        printf("%08X: ", i);

        for (uint32_t j = 0; j < _number; j++)
        {
            if (j % 8 == 0)
            {
                printf(" ");
            }
            if (i + j < _size)
            {
                printf("%02X ", buffer[i + j]);
            }
            else
            {
                printf("   ");
            }
        }

        printf(" ");
        for (uint32_t j = 0; j < _number; j++)
        {
            if (i + j < _size)
            {
                printf("%c", IS_PRINT(buffer[i + j]) ? buffer[i + j] : '.');
            }
        }
        printf("\r\n");
    }
}

/**
 * 使用指定的值填充内存块。
 *
 * @param ptr   指向要填充的内存块的指针。
 * @param value 要填充的值,可以是8位、16位、32位或64位。
 * @param num   要填充值的数量。
 * @param size  要填充值多少个字节。
 */
void mem_fill(void *_ptr, uint64_t _value, size_t _num, size_t _size)
{
    unsigned char *p = (unsigned char *)_ptr; // 转换指针以便逐字节操作

    while (_num-- > 0) // 遍历每个值
    {
        for (size_t j = 0; j < _size; ++j)
        {                                              // 遍历每个值的每个字节
            *p++ = (unsigned char)(_value >> (j * 8)); // 从value中提取字节并填充
        }
    }
}
回复

使用道具 举报

3

主题

295

回帖

304

积分

高级会员

积分
304
发表于 2024-10-22 10:40:18 | 显示全部楼层
楼主应该是想验证实际RAM会不会比标称少吧,国产芯片大小一般不会虚标,可能速率会慢一点
回复

使用道具 举报

2

主题

39

回帖

45

积分

新手上路

积分
45
发表于 2024-10-22 11:02:55 | 显示全部楼层
skyshine 发表于 2024-10-22 10:40
楼主应该是想验证实际RAM会不会比标称少吧,国产芯片大小一般不会虚标,可能速率会慢一点

什么叫国产芯片不会虚标,任何一家芯片厂商的MCU都不可能虚标,你搞笑的吧
回复

使用道具 举报

33

主题

192

回帖

291

积分

高级会员

积分
291
发表于 2024-10-22 11:21:32 | 显示全部楼层
skyshine 发表于 2024-10-22 10:40
楼主应该是想验证实际RAM会不会比标称少吧,国产芯片大小一般不会虚标,可能速率会慢一点

芯片谁敢虚标,这玩意谁敢谁死
回复

使用道具 举报

3

主题

295

回帖

304

积分

高级会员

积分
304
发表于 2024-10-22 14:30:48 | 显示全部楼层
楼上几位说的对,确实是我说错了,芯片虚标是很严重的事,等于自砸饭碗
回复

使用道具 举报

42

主题

1024

回帖

1155

积分

至尊会员

积分
1155
发表于 2024-10-22 15:12:06 | 显示全部楼层
这还不简单,用指针的方式往内存写一个数字,然后读出来看对不对,对了就继续写下一个。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-6-10 03:16 , Processed in 0.319173 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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