gpt4 book ai didi

c - 当 ram 地址存储为 u32 时从 ram 内存中获取值

转载 作者:太空宇宙 更新时间:2023-11-04 07:54:30 33 4
gpt4 key购买 nike

我在从 ram 地址获取值时遇到问题。

我有一些限制,即它必须是 C 代码,并且存储信息的地址由 u32 值给出,例如 0x001c0080。

环境是ARM的,我用的是eclipse sdk。我怎样才能从这个地址获取数据?我有一个功能,不能像这样改变:

u32 get_data(u32 address, u16 *status)
{
......
u32 return_value ;
char cbuf[128];
return_value= ????? address ?????;
sprintf(cbuf,"\tA:%x->%x",(int)address,(int)return_value);
print (cbuf);
return return_value; //here the u32 data stored in ram on address should be returned
}

最佳答案

您可以将地址转换为指针。

    return_value = *(u32 *) address;

此外,推荐使用<stdint.h>而不是自定义类型。您的代码可能如下所示:

#include <stdint.h>
#include <stdio.h>

uint32_t get_data(uint32_t address, uint16_t *status)
{
// …
uint32_t return_value;
char cbuf[128];
return_value = *(uint32_t *) address;
sprintf(cbuf, "\tA:%x->%x", (int) address, (int) return_value);
printf(cbuf);
return return_value;
}

请注意!迟早,您的项目可能会迁移到 64 位 CPU。 您的代码将不可移植。将地址作为整数而不是指针传递是一个坏主意,假设指针大小时更糟。您应该检查 get_data() 的调用环境函数以确保地址可以作为指针传递。如果地址必须作为整数值而不是指针传递,请使用 uintptr_t相反,它会自动成为正确的尺寸。

此外,您的格式不应要求转换。您可以使用 <inttypes.h> 中的格式以避免转换格式字符串参数。

比如说,你的来电是call_get_data和地址0x001c0080来自头文件中的宏。

#include <foo.h> // Header which defines ADDRESS to be 0x001c0080 via #define ADDRESS 0x001c0080
#include <stdint.h>
#include <stdio.h>
#include <inttypes.h>

uint32_t get_data(uint32_t *address, uint16_t *status)
{
// …
uint32_t return_value;
char cbuf[128];
return_value = *address;
sprintf(cbuf, "\tA:" PRIxPTR "->" PRIx32, address, return_value);
printf(cbuf);
return return_value;
}

void call_get_data(void)
{
uint32_t addressValue = ADDRESS;
uint32_t *address = (uint32_t *) addressValue;
// …
uint32_t returnValue = get_data(address, /* … */);
// …
}

注意:环境是ARM的,你用Eclipse SDK没关系。

关于c - 当 ram 地址存储为 u32 时从 ram 内存中获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51184327/

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