获取固定内存位置的内容

Get contents of a fixed memory location

我试图访问内存中的某个位置并检索该内存位置的内容,但是当我 运行 它时程序似乎无法运行。我没有收到任何错误,它只是一个空白的控制台屏幕。我想到的第一件事是,能够访问这样的内存位置可能是一个安全漏洞。是这个原因还是我的代码有误?

int main()
{
    int * pointer = 100;

    printf("%d", *pointer);

    return 0;
}

内存映射寄存器是嵌入式编程不可或缺的一部分 - 但您需要知道在内存中的哪个位置进行生产 - 随机位置可能会产生随机效果(由于未定义的行为)!

对于嵌入式编译器,通常有一个头文件,其中包含类似以下内容的行:

#define GPIO_PORTF_DIR_R (*( ( volatile unsigned int * )0x40025400 ) )

这些 (a) 适当地映射注册并且 (b) 隐藏具体实现。

注意 volatile 限定符的使用 - 任何内存映射访问都应 volatile 限定,否则编译器优化也有影响!

现在我们可以在您的代码中使用这个名称来读取和写入该寄存器(无论它在什么地方):

GPIO_PORTF_DIR_R = 0xF0;
data = GPIO_PORTF_DIR_R;

您的代码导致“只是一个空白的控制台屏幕”这一事实意味着它没有按照您的预期进行...您的随机位置导致随机(未定义)行为。