如何将float数组传递给具有unsigned char指针作为参数的函数?

时间:2014-06-29 08:50:43

标签: c avr

一些背景信息; 我必须连接一个具有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的指针,我有一个浮点数组,必须在那里发送。浮点数组中指向起始字节的指针应该是我们传递给函数的指针。

谢谢你, 我是个菜鸟,抱歉,如果这是一个愚蠢的问题。

2 个答案:

答案 0 :(得分:1)

在第一个片段中,float数据从char数组的第2个字节开始。在第二个片段中,它从字节0开始。

看起来缺少的两个字节是为什么一个工作而另一个不工作的关键。

答案 1 :(得分:0)

您可以使用sprintf()float中的数据转换为string,然后按照您提到的char参数将其发送到该函数。 这可能不会那么快,但它肯定会解决问题。

为了更快的解决方案,你可以研究浮点精度,即浮点数的存储方式,你可以在4个8位数据包中中断浮点数,然后将其发送到该函数。