关于 avr studio 调试中 利用结构体,const的问题

来源:互联网 发布:宾馆网络怎是连接不上 编辑:程序博客网 时间:2024/06/07 13:13

这是avr studio的软件调试的这个问题 让我昨天弄到两点多 所以把它记录下来。

 

 #include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef unsigned char uint8_t;


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

unsigned char i2c_address[] =
{
  0x6a,
  0x6b,
  0x34,
  0x35,
};


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

  Data = package->buffer;

  len = package->length;
  return sla;
}

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

  twi_pack_t packet;

  packet.chip = i2c_address[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;

}

这段代码是在我的工程里面截取的一段(编译环境ICC avr),在vc++ 6.0,keil中调试没问题 ox6b 可以成功的通过结构体变量packet.chip  传递给twi_master_read 函数中的 sla 变量 ,可是在avr studio里软件仿真时就不行 sla接不到正确的数,在函数twi_master_read中结构体的成员都没有传递进来,   然后我把 twi_master_read(const twi_pack_t *package) 中的 const 限定符 去掉 就ok了。

 

总结:avrstudio 软件仿真 在这个问题上有些缺陷 ,不过为保证 在iccavr中编译生成的 机器码中 出现这种错误而导致 功能不良 我只能选择先把const去掉 等功能ok后 在加上const 重新烧录 看实际效果。

原创粉丝点击