فکر کنم تنها ایرادی که کد بالا داره متغییر data_transfer باشه
1-این متغییر نباید به صورت ارایه تعریف بشه.
2- نباید هم به صورت استاتیک تعریف بشه.
3-چون طول متغییر ارسال ثابت نیست باید از ورودی تابع دریافت بشه
4-"اندازه ارایه" نمی تونه به صورت متغییر باشه باید حتما به صورت ثابت تعریف بشه در غیر این صورت
یا باید از new استفاده کرد که در c وجود نداره یا از malloc
مشکل اینه که مشخص نکردی تعداد بایت های ارسال همیشه یکی هست یا تعدادش متغییر
اولی برای ارسال با طول متغییر ودومی برای ارسال فقط یک بایت هست
کد:
unsigned char read_i2c(unsigned char BusAddres , unsigned char *DataToSend , unsigned int NumOfSendData ,
unsigned char *ReceiveData,unsigned int NumOfRData, unsigned char Ack )
{
I2C_M_SETUP_Type i2c_data;
i2c_data.tx_data=DataToSend;
i2c_data.tx_length=NumOfSendData;
i2c_data.rx_data=ReceiveData;
i2c_data.rx_length=NumOfRData;
i2c_data.sl_addr7bit= BusAddres<<1;
I2C_MasterTransferData(LPC_I2C1, &i2c_data , I2C_TRANSFER_POLLING);
//return error status or number of byte received by i2c.
}
unsigned char Test_I2C()
{
unsigned char Send;
unsigned char Rec;
send=RA_WHO_AM_I;
read_i2c(MPU6050_ADDRESS, &send,1,&Rec,1,0);
if(Rec == 0x68)
return 1; // Means Comunication With MPU6050 is Corect
else
return 0; // Means ERROR, Stopping
}
unsigned char read_i2c(unsigned char BusAddres , unsigned char DataToSend ,unsigned char *ReceiveData,unsigned int NumOfRData, unsigned char Ack )
{
unsigned char Data=DataToSend;
I2C_M_SETUP_Type i2c_data;
i2c_data.tx_data=&Data;
i2c_data.tx_length=1;
i2c_data.rx_data=ReceiveData;
i2c_data.rx_length=NumOfRData;
i2c_data.sl_addr7bit= BusAddres<<1;
I2C_MasterTransferData(LPC_I2C1, &i2c_data , I2C_TRANSFER_POLLING);
//return error status or number of byte received by i2c.
}
unsigned char Test_I2C()
{
unsigned char Data;
read_i2c(MPU6050_ADDRESS, RA_WHO_AM_I,&Data,1,0);
if(Data == 0x68)
return 1; // Means Comunication With MPU6050 is Corect
else
return 0; // Means ERROR, Stopping
}