Some back ground information; I have to interface an EEprom which has I2C interface. I want to save an array of floats in the memory and read it back. I want to make it as fast as possible. Currently I have the following solution for it which works perfectly fine.
float a[5];
unsigned char* p = (unsigned char *)a;
for ( i = 2; i < 22; i++)
{
data [ i ] = p [ i -2 ];
}
twi_master_trans(
if ( twi_master_trans ( EEprom_address , data , 22 ,NULL , 0) == false )
{
put_falsh_string("TWI major error1 ");
}
I am pointing at each element to an alternative location in memory. Why not I just give the starting point of my main array. I thought that should be done like this:
twi_master_trans ( EEprom_address , (unsigned char *)a, 22 ,NULL , 0)
I don't understand why it does not work. Could you explain why? or what am I not understanding?
this is the definition of twi_master_trans:
bool twi_master_trans(
unsigned char slave_addr,
unsigned char *tx_data,
unsigned char tx_count,
unsigned char *rx_data,
unsigned char rx_count)
I know that my question is not very clear but I can't explain it any better. but I give it a try.
The argument for a function is pointer to unsigned char, I have an array of floats which has to be sent there. A pointer to starting byte in the float array is supposed to be what we pass to the function.
Thank You, I am a noob, sorry if it is a dumb question.
ais probably 20 bytes (floatis usually four bytes, times 5), so passing22as the array length would cause the function to read out of bounds. Secondly, note how the loop skips the first two bytes in thedataarray? There is probably some other data there.