4820|8

84

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

结构体成员传递问题 [复制链接]

#include
#include
#include

typedef unsigned char  uint8_t;


typedef struct
{
  char chip;
  unsigned int addr;
  int addr_length;
  void *buffer;
  unsigned int length;
} twi_package_t;

unsigned char i2c_addresses[] =
{
    0x4a,
    0x4b,
    0x24,
    0x25,
};


int twi_master_read(const twi_package_t *package)
{
    unsigned char   TwiStatus;
    unsigned char   * TwiData;
    unsigned char sla;
    unsigned char r_reg;
    unsigned int len;
   
    sla = package->chip;//把0x4b 传给sla  可是在avr studio中 总是出错 这个地方传不过来
   
    r_reg = package->addr;

    TwiData = package->buffer;

    len = package->length;
   return sla;
}

unsigned char address_slave(void)
{
    uint8_t i;
    uint8_t status;
    static uint8_t *rxtmp;

    twi_package_t packet;

    packet.chip = i2c_addresses[1];//把0x4b给chip
    packet.addr = 0;
    packet.addr_length = 0;
    packet.buffer = (void*) rxtmp;
    packet.length = 1;

    status = twi_master_read(&packet);//通过结构体变量完成数据传递
        return status;
}

int main()
{
  unsigned char i;
   i =address_slave();

  printf("%x\n",i);
  return 0;

}

这段代码在vc++ 6.0中调试没问题 ox4b 可以成功的通过chip传给sla  可是在avr studio里软件仿真时就不行 sla接不到正确的数  不知道 为什么是不是 编译器的问题  有高手给解答下  谢谢  

最新回复

MARK,学习下  详情 回复 发表于 2010-5-23 14:25
点赞 关注

回复
举报

63

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
当执行下面这句的时候,你确定package->chip已经被赋值成功为0x4b了?在仿真环境下。
sla = package->chip;//把0x4b 传给sla 可是在avr studio中 总是出错 这个地方传不过来
 
 

回复

66

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
引用 1 楼 peasant_lee 的回复:
当执行下面这句的时候,你确定package->chip已经被赋值成功为0x4b了?在仿真环境下。
sla = package->chip;//把0x4b 传给sla 可是在avr studio中 总是出错 这个地方传不过来


chip 这个成员 应该可以看作 全局变量啊  所以他的值  在packet.chip = i2c_addresses[1]; 这句就传给chip这个成员了  我在把结构体 变量当做实参  传给twi_master_read 应该没问题啊
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

4
 
我知道,理论是这样,但实际不一定,就像你现在的问题,一个全局变量赋值给一个局部变量,理论也可以的啊,但是实际就是不行。所以,我们要怀疑packet.chip是否赋值成功。你在仿真环境下看看。
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

5
 
引用 3 楼 peasant_lee 的回复:
我知道,理论是这样,但实际不一定,就像你现在的问题,一个全局变量赋值给一个局部变量,理论也可以的啊,但是实际就是不行。所以,我们要怀疑packet.chip是否赋值成功。你在仿真环境下看看。

我试了 在packet.chip 赋值成功了   不过没有成功的 传递给package->chip   把int twi_master_read(const twi_package_t *package)  形参的 const去掉 就ok了  。可是这个const应该是没有问题的 可能是avr studio的问题   在vc6.0 和keil里 我都仿真了这段代码 都没有问题  只有avr studio不行 晕
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

6
 
不会在avr studio的编译环境了,const 是另外一种意思,或者存储的地方不同。。
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

7
 
刚才百度了一下,看见有不少人也在这个编译环境下出const的问题,而且没有统一的解决办法。。楼主还是保守点,将const去掉吧,呵呵,这个和编译器很有关系。
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

8
 
引用 6 楼 peasant_lee 的回复:
刚才百度了一下,看见有不少人也在这个编译环境下出const的问题,而且没有统一的解决办法。。楼主还是保守点,将const去掉吧,呵呵,这个和编译器很有关系。


hehe   恩  既然这样 只能先去掉  待功能调试成功后 再加上看ok不
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

9
 
MARK,学习下
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表