这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » float 如何把一个4字节的float数据一字节一字节的取出来

共2条 1/1 1 跳转至

float 如何把一个4字节的float数据一字节一字节的取出来

院士
2006-09-17 18:14:16     打赏
float 如何把一个4字节的float数据一字节一字节的取出来



关键词: float     如何     一个     字节     数据     出来    

院士
2006-12-22 22:43:00     打赏
2楼
问 我现在想把一个4字节的float数据通过模拟总线的方式发出去,但是周工给的模拟总线程序只能一次发送1个字节,也就是说我要把4个字节拆开。但是怎么才能拆开呢?

我本来想用汇编写一个程序,程序代码如下

void my(float *src)
{
    uint8 yi,zi;
    __asm
    {
        LDRB    yi,[src]
        ADD    src,src, #1
        LDRB    zi,[src]
    }
}

int  main(void)
{
   uint8 yi,zi,zh;
   float *h;    
   float  xi=25.36;
   h=ξ
       
__asm
{
    MOV    R0,h
    BL    my,{R0}
}    
yi=yi+zi;  //这一行纯粹是为了看结果写的
}

相关的代码就是这么多,我参考周工那本基础与实战写的,但是取不出来,看到的yi(第一个字节)和zi(第二个字节)全是0,是错误的。谁能帮我指出错误在那里么?

或者说有神么别的办法么? 1: 你取到的数是怎么传递给主程序的!? 2: 就是yi,zi我本来想在main里面定义两个变量,可是这两个变量在子程序中不认,而如果main里面不定义,就什么也看不到。因为从BL行,按一下单步,就直接把子程序跑完了,观察窗里面就看不到yi,zi,我也不知道怎么弄 3: 子函数里的zi、yi并没有返回! 4: try怎么就这么钟情于汇编,下面的不是一样running吗?

void SaveFloat(UINT32 Address, float *pData)
{
    UINT8 *pByte = (UINT8 *)pData;

    for(int i = 0; i < 4; i++)
    {
        ExBusWrite(Address + i, *(pByte + i));
    }
}

:)不过没有真正测试过。。。
5: 给一个已经测试通过的函数:extern float float_buf;
extern unsigned char data_exchange_buf[4];

void ExchangInt32(void)
{
    unsigned char *point;
    point = (unsigned char *)&float_buf;
    
    data_exchange_buf[0] = point[0];
    data_exchange_buf[1] = point[1];
    data_exchange_buf[2] = point[2];
    data_exchange_buf[3] = point[3];
}    
  
   6: 为什么不用结构? 7: 用联合union{
uint8 ui8[4];
float f32;
}Dat32;
uint8 ss[4];
float abc = 12345.00;
Dat32.f32 = abc;
ss[0] = Dat32.ui8[0];
ss[1] = Dat32.ui8[1];
ss[2] = Dat32.ui8[2];
ss[3] = Dat32.ui8[3];
与PC机小端对齐相同

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]