c - 如何将 float 数组传递给以 unsigned char 指针为参数的函数?

标签 c avr

一些背景信息; 我必须连接一个具有 I2C 接口(interface)的 EEprom。我想在内存中保存一个 float 数组并读回。我想尽快完成。目前我有以下解决方案,效果很好。

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 的指针,我有一个必须发送到那里的 float 数组。指向 float 组中起始字节的指针应该是我们传递给函数的内容。

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

最佳答案

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

看起来缺少的两个字节是一个有效而另一个无效的关键。

关于c - 如何将 float 数组传递给以 unsigned char 指针为参数的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24474531/

相关文章:

c - 数字显示不正确,无法控制特定引脚的输出

c - USART 传输 - AVR (atmega169p) 接收到 0 或 null 而不是 char 'a'

c++ - 使用 malloc 和 void 指针复制临时结构

c - 字符串中的 do-while 形式问题

c - 区分嵌套在 union 中且具有 C 中共同属性的两个不同结构

c - 内循环的运行时间是多少?

c - 谁负责确定堆栈的大小

c - 如何调试内存未分配或分配结果未存储的原因?

c++ - ATmega8 不支持 JMP 指令

c - 将参数从指针传递到非封闭地址空间时出错