gpt4 book ai didi

c - 如何阻止 RAM 测试破坏其自身的嵌入式 C 变量?

转载 作者:太空宇宙 更新时间:2023-11-04 08:11:51 25 4
gpt4 key购买 nike

在启动测试期间,我需要使用 galpat 测试来测试所有 RAM 位置,我已经编写了执行此操作的函数,但遇到了一个问题,即函数变量存在于 RAM 中,因此作为测试的一部分被捣碎。

解决这个问题的最佳方法是什么?

最佳答案

一种可能的方法是 - 特别是处理处理器堆栈,.data.bss 是你可以避免的 - 但没有简单的方法C 在没有适当堆栈的情况下工作:

  • 编写您的代码,使其专门使用 ROM 代码和堆栈变量。
  • 让您的启动代码(通常通常用汇编程序编写)在内存的上半部分分配堆栈,测试下半部分
  • 将堆栈从高端内存移动(复制)到已经测试过的区域(可以在 C 中完成)
  • 重置堆栈指针指向复制的堆栈(涉及汇编代码)
  • 做剩下的内存测试(可以用 C 再次完成)

(这假设您的代码从 ROM 运行,它通常会在启动的早期阶段这样做)。如果在您分配堆栈的区域出现任何内存故障,您的代码将简单地崩溃(在那之前它做了什么 - Reactor meltdown... - 取决于应用程序)。

当在 C 的控制之外 移动堆栈时,您应该非常小心实际存储在那里的内容 - 一旦您移动了堆栈,指向堆栈变量的指针将变得无效 - 或者更确切地说是未定义的。但是,通常在 RAM 测试中使用的简单标量变量和指向堆栈外部的指针应该可以工作。

您可以尝试将您的变量声明为 register 以尽量降低 RAM 使用率 - 但您不能强制 C 将某些变量放入寄存器, 一个好的 C 编译器无论如何都会把它们放在那里。

这是否比在汇编程序中编写整个内存测试更好(无论如何你需要在汇编程序中进行堆栈调整,因为没有办法在 C 中移动处理器堆栈)我敢于挑战。我看不出在这个低级别上使用 C 有什么意义,特别是因为汇编程序可以完全从寄存器运行内存测试例程,而无需使用任何 RAM。这使得它更能避免任何 RAM 问题。 RAM 测试例程不应依赖 工作内存。

关于c - 如何阻止 RAM 测试破坏其自身的嵌入式 C 变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38793271/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com