获取固定内存位置的内容
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;
您的代码导致“只是一个空白的控制台屏幕”这一事实意味着它没有按照您的预期进行...您的随机位置导致随机(未定义)行为。
我试图访问内存中的某个位置并检索该内存位置的内容,但是当我 运行 它时程序似乎无法运行。我没有收到任何错误,它只是一个空白的控制台屏幕。我想到的第一件事是,能够访问这样的内存位置可能是一个安全漏洞。是这个原因还是我的代码有误?
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;
您的代码导致“只是一个空白的控制台屏幕”这一事实意味着它没有按照您的预期进行...您的随机位置导致随机(未定义)行为。