C 当ram地址存储为u32时,从ram内存获取值

C 当ram地址存储为u32时,从ram内存获取值,c,pointers,C,Pointers,从ram地址获取值时遇到问题 我有一些限制,即它必须是C代码,存储信息的地址由u32值给出,例如0x001c0080 该环境适用于ARM,我使用EclipseSDK。 如何从这个地址获取数据? 我有一个功能,不能更改如下: u32 get_data(u32 address, u16 *status) { ...... u32 return_value ; char cbuf[128]; return_value= ????? address ?????;

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

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

该环境适用于ARM,我使用EclipseSDK。 如何从这个地址获取数据? 我有一个功能,不能更改如下:

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
}
您可以将
u32地址
类型转换为所需类型的指针:

char *ptr = (char *)address;
sprint(cbuf, "\tC:%c", *ptr);

您可以将
u32地址
类型转换为所需类型的指针:

char *ptr = (char *)address;
sprint(cbuf, "\tC:%c", *ptr);


您可以将地址强制转换为指针

    return_value = *(u32 *) address;
此外,建议使用
而不是自定义类型。您的代码可能如下所示:

#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;
}

注意:该环境适用于ARM,您使用Eclipse SDK并不重要。

您可以将地址转换为指针

    return_value = *(u32 *) address;
此外,建议使用
而不是自定义类型。您的代码可能如下所示:

#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;
}
注意:该环境适用于ARM,您使用Eclipse SDK并不重要。

问题已经解决, u32*ptr=(u32*)地址; 返回_值=*ptr; 很好。问题解决了, u32*ptr=(u32*)地址; 返回_值=*ptr;
工作正常。

我在每个ram地址上获得一个常量值,如:a:14fb10->34800000 a:14fb14->34800000 a:14fb18->34800000@RicFutt很可能是在调用代码中出现了错误。您是否在调试器中查看内存映射以便验证实际值?我会在每个ram地址上获得一个常量值,如:a:14fb10->34800000 a:14fb14->34800000 a:14fb18->34800000@RicFutt很可能是在调用代码中出现了错误。您是否在调试器中查看内存映射以便验证实际值?在编写ARM之前,您需要研究嵌入式编程。这是非常基本的东西。在编写ARM之前,您需要学习嵌入式编程。这是非常基本的东西。“你的代码将无法移植。”因此,为什么不教他使用
uintpttr\t
,而不是
uint32\t
@Lundin呢。我在相应的段落中添加了这个选项。“您的代码将不可移植。”因此,为什么不教他使用
uintpttr\t
,而不是
uint32\u\t
@Lundin这一点很好。我在相应段落中添加了该选项。