一些背景信息; 我必须连接一个具有I2C接口的EEprom。我想在内存中保存一系列浮点数并将其读回。我想尽快做到。目前我有以下解决方案,它完全正常。
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 ");
}
我指着每个元素到内存中的另一个位置。为什么我不给出主阵列的起点。我认为应该这样做:
twi_master_trans ( EEprom_address , (unsigned char *)a, 22 ,NULL , 0)
我不明白为什么它不起作用。你能解释一下原因吗?或者我不理解什么?
这是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)
我知道我的问题不是很明确,但我无法解释它。但我试一试。
函数的参数是指向unsigned char的指针,我有一个浮点数组,必须在那里发送。浮点数组中指向起始字节的指针应该是我们传递给函数的指针。
谢谢你, 我是个菜鸟,抱歉,如果这是一个愚蠢的问题。
答案 0 :(得分:1)
在第一个片段中,float数据从char数组的第2个字节开始。在第二个片段中,它从字节0开始。
看起来缺少的两个字节是为什么一个工作而另一个不工作的关键。
答案 1 :(得分:0)
您可以使用sprintf()
将float
中的数据转换为string
,然后按照您提到的char
参数将其发送到该函数。
这可能不会那么快,但它肯定会解决问题。
为了更快的解决方案,你可以研究浮点精度,即浮点数的存储方式,你可以在4个8位数据包中中断浮点数,然后将其发送到该函数。