zhw6102 发表于 2024-11-26 14:50:40

麻烦帮我看下这个多字节数组的载入问题

本帖最后由 DebugLab 于 2024-11-26 15:50 编辑

#define PROGRAM_SIZE_IC_1 5120
#define PROGRAM_ADDR_IC_1 1024

const char Program_Data_IC_1 = {
0x00, 0x00, 0x00, 0x00, 0x01,
//此处省略1022行代码
0x00, 0x00, 0x00, 0x00, 0x01,
};
void dsp_init(void)
{
      unsigned int i;


      iic_start();
      iic_sendbyte(0x8e);
      iic_SlaveAck();
      iic_sendbyte(PROGRAM_ADDR_IC_1>>8);
      iic_SlaveAck();
      iic_sendbyte(PROGRAM_ADDR_IC_1&0x00ff);
      iic_SlaveAck();
      for(i=0;i<PROGRAM_SIZE_IC_1;i++)
         {
            iic_sendbyte(Program_Data_IC_1);
            iic_SlaveAck();
         }
      iic_stop();            
}
现在的问题是在FOR语句内的数据只成功发送了数组内的第一个字节,后面的就没有发了

jwd 发表于 2024-11-26 15:39:03

猜的,没有等到应答,卡在for那里了?你可以仿真看看

bkeuqoaq 发表于 2024-11-26 15:43:14

应该是主机检查从机的应答,而且你这代码没有出错处理

DebugLab 发表于 2024-11-26 15:54:58


1000多行对解决问题无意义的代码(已帮您删除),却没有被调用函数的函数体,I2C是如何实现的没有体现
工作正常的I2C程序供参考:
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=4612

https://www.stcaimcu.com/forum.php?mod=viewthread&tid=4613

https://www.stcaimcu.com/forum.php?mod=viewthread&tid=4698

DebugLab 发表于 2024-11-26 15:56:29

应为
iic_sendbyte(Program_Data_IC_1);

soma 发表于 2024-11-26 15:56:34

iic_sendbyte(Program_Data_IC_1);
这个是 iic_sendbyte(Program_Data_IC_1);吧

社区闲人 发表于 2024-11-26 16:18:33

按照楼主位的代码,i值在编译时被优化掉了。就不在产生循环代码。

zhw6102 发表于 2024-11-26 16:22:07

jwd 发表于 2024-11-26 15:39
猜的,没有等到应答,卡在for那里了?你可以仿真看看

有应答,FOR上面的单字节发送都是正常的

zhw6102 发表于 2024-11-26 16:23:02

社区闲人 发表于 2024-11-26 16:18
按照楼主位的代码,i值在编译时被优化掉了。就不在产生循环代码。

这个要怎么处理呢,这段函数我是从别的单片机移植过来的,在其它的单片机上是正常的

小坤 发表于 2024-11-26 16:23:49

iic_sendbyte(Program_Data_IC_1);

变成了指针,指向了这个 Program_Data_IC_1 地址,所以发第一个数据{:5_312:}
页: [1] 2
查看完整版本: 麻烦帮我看下这个多字节数组的载入问题