【发布时间】:2025-11-26 02:00:02
【问题描述】:
我正在尝试为 RAM 编写一个简单的测试,以检查嵌入式设备上内存的基本完整性。这就是我希望能够做到的:
基本上写出某些模式:“10101010101010”到内存块,然后写入“01010101010”,然后重新写入第一个并测试模式是否写入正确。
我正在尝试用 C 编写这个程序。我想知道如何编写这个模式。我希望能够打开和关闭 RAM 存储单元中的某些位。
我会不会分配一块内存然后写一些类似的东西
uint32 pattern = 0xaaaaaaaa;
uint32 * mem_loc = malloc some memory;
int i = 0;
int offset = 1;
uint32 * location = &mem_loc;
while ((&mem_loc)++ && (!i)) {
&mem_loc = pattern;
if (!(&(mem_loc+offet))) {
mem_loc = location;
pattern = 0x55555555;
i++;
}
}
//Check to see if values written are consistent
上面的代码行得通吗?将十六进制模式写入内存会打开模式中的位吗?
我知道上面的代码被严重破坏了,但我只是想知道用正确的逻辑做类似的事情是否会达到预期的结果。
谢谢
【问题讨论】:
-
谷歌“walking one”和“walking zeroes”内存测试算法
-
您概述的总体思路应该可行。您拥有的代码甚至还没有接近。举个例子,我不确定
!int应该是什么意思,但我很确定没有正常运行的编译器会接受它。 -
信息不足 - 你的处理器有缓存吗?你的操作系统怎么样——它有虚拟内存系统吗?你关心你写的地址吗?除此之外,您的代码示例没有意义。
!int是什么?使用malloc()似乎表明您的代码是从 RAM 运行的——这不是表明它的“基本完整性”没问题吗? -
你的代码看起来很奇怪......为什么使用 &mem_loc ?它是一个常量(mem_loc 地址),它永远不会改变,它不像 mem_lot VALUE。而当你想写入内存时,你必须使用 *mem_loc=pattern 来代替。 (!int) 也是错误的。
-
抱歉,int 应该是 i。
标签: c testing memory embedded ram