首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >结构和memcpy警告

结构和memcpy警告
EN

Stack Overflow用户
提问于 2015-07-31 18:06:09
回答 3查看 955关注 0票数 0

我想在结构上将数据从flas复制到RAM (微控制器)。并且我有结构初始化:

代码语言:javascript
复制
typedef struct Day{
    long AM : 24;
    long PM : 24;
}Day;

struct Data{
    unsigned long Lang   : 8;
    struct Day dawt[7];

}Data;

从闪存加载到RAM,我有这个功能

代码语言:javascript
复制
void LoadFromFlash(){
    int count;

    memcpy(Data.Lang, F_DATA, 1);
    for(count = 0; count < 7;  count++){

        memcpy(Data.dawt[count].AM, F_DATA, 3);
        memcpy(Data.dawt[count].PM, F_DATA, 3);
    }
}

我收到警告:

代码语言:javascript
复制
passing argument 1 of 'memcpy' makes pointer from integer without a cast

对于所有的记忆函数

代码语言:javascript
复制
passing argument 2 of 'memcpy' makes pointer from integer without a cast

for #define语句

代码语言:javascript
复制
#define F_DATA      0x00006000

怎么了。

EN

回答 3

Stack Overflow用户

发布于 2015-07-31 18:10:44

正如我们从memcpy()语法中看到的,

代码语言:javascript
复制
void *memcpy(void *dest, const void *src, size_t n);

第一个和第二个参数的类型应该是void *

现在,假设Lang是结构变量Data的成员变量,并且您有如下定义

代码语言:javascript
复制
 Data Data;

Data.Lang is long类型成员变量,而不是它的地址。你至少需要使用&Data.Lang

也就是说,在文字类型的情况下,例如0x00006000并不表示地址,您需要将其转换为(void *)0x00006000类型,以使其解释为地址。

票数 1
EN

Stack Overflow用户

发布于 2015-07-31 22:41:31

我被你问题中的代码搞糊涂了,所以我可能会误解。但是,如果Data是结构的内存副本,并且在F_DATA表示的地址上有相同结构的闪存副本,那么您应该能够做如下简单的事情:

代码语言:javascript
复制
void LoadFromFlash(){
    Data = *((struct Data *)F_DATA);
}
票数 1
EN

Stack Overflow用户

发布于 2015-07-31 19:20:51

正如其他人所指出的,memcpy函数对地址感兴趣(例如&variable)。但是,正如您在注释中所指出的,您会收到以下错误消息:

代码语言:javascript
复制
cannot take addres of bit-field 'Lang'

原因是:

因为位字段不一定从字节的开头开始,所以不能获取位字段的地址。位字段的指针和非常数引用是不可能的。位字段没有地址-您不能有指向它们的指针或它们的数组。

但是,我将尝试查看是否有解决方法。但就目前而言,这应该足够好了。

编辑:你是那个将数据存储在闪存中的人吗?

但是,要创建一个联合。在联合中创建一个结构。将闪存中的3个字节复制到't'Day.AM中。然后从't'Day.bitfieldAM.AM中读取值

代码语言:javascript
复制
typedef union
    {
    struct
    {
        long AM:24;
        long: 8;
    }bitFieldAM;
    long AM;

    struct
    {
        long PM:24;
        long: 8;
    }bitFieldPM;
    long PM;

}tDay;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31743559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档