久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
單片機向24C02芯片中寫入浮點數的方法
[打印本頁]
作者:
irisice008
時間:
2021-5-27 15:01
標題:
單片機向24C02芯片中寫入浮點數的方法
向24C02芯片中寫入浮點數的方法,測試可用!
方法:用共用體
(1)共用體類型定義
#define FLOAT_BYTE_NUM 4 //float類型占用字節數
//浮點數存儲共用體
typedef union
{
float value;
uint8_t byte[FLOAT_BYTE_NUM];
} storFloatData;
(2)函數定義
/********************************************************************************************************
函數名稱:
函數功能:向指定地址寫入1個浮點數
詳 述:
輸 入:
*********************************************************************************************************/
void Storage_WriteFloatNum( uint16_t addr, storFloatData data )
{
uint8_t i = 0;
uint8_t a = 0;
for( i = 0; i <= FLOAT_BYTE_NUM - 1; i++ )
{
AT24CXX_WriteOneByte( addr + i, data.byte[ i] );
}
return;
}
/********************************************************************************************************
函數名稱:
函數功能:從指定地址讀出1個浮點數
詳 述:
輸 入:
*********************************************************************************************************/
storFloatData Storage_ReadFloatNum( uint16_t addr )
{
uint8_t i = 0;
storFloatData read_data;
for( i = 0; i <= FLOAT_BYTE_NUM - 1; i++ )
{
read_data.byte[ i] = AT24CXX_ReadOneByte( addr + i );
}
return read_data;
}
(3)使用例程
storFloatData data0={12.34};
storFloatData data1;
Storage_WriteFloatNum(0,data0);
delay_ms(20);
data1 = Storage_ReadFloatNum(0);
關于存儲float浮點數到flash或eeprom中的方法
float 單精度浮點數占用32bit空間,不像存儲整型或char型數據那么便捷,我們在存儲float數據時就需要先將float數變換一下,變換成數組的格式,這樣就方便存儲和讀取了,具體實現有以下方法:
第一種存儲方式(取地址法):
uint8_t datatmp[4]; //定義數組 因為float數據 占4個字節
float s; //這是要存儲的浮點數
uint8_t *p; //定義一個u8指針變量
p=(uint8_t*)&s; //取浮點數的地址
memcpy(datatmp,p,4); //拷貝浮點數地址4個字節到數組
這種方式就是用取地址的方式,然后又知道浮點數占用的空間,這樣就可以通過拷貝即可將浮點數轉移到數組中。第二種存儲方式(利用共用體):
Union
{
float x;
uchar s[4];
}F32_Sep;
然后把a的值賦給F32_Sep.x,這樣一來其實s[0]對應了浮點數的最高位,s[3]對應其最低位,因此,保存到EEPROM中只需將s[0]~s[3]即可。
這就是利用了共用體共用一段內存的原理,即 float x 和 uchar s[4],使用的是一個空間大小的內存。
將單個字節數據讀取到一個float類型的數據中---的幾種方法
從串口讀取傳感器值的時候總是一個一個字節,高八位低八位,需要拼接成一個float或者int的時候,這些方法有用處
1、聯合體方式
union
{
float f;
unsigned char x[4];
} data;
data.x[0] = 0xA2;
data.x[1] = 0xA1;
data.x[2] = 0xB2;
data.x[3] = 0xB1;
return data.f;
2、移位
float result;
result=(0xA2<<24)|(0xA1<<16)|(0xB2<<8)|0xB1;
3、不知道怎么命名
float result;
*(char*)&result = 0xA2;
*((char*)&result + 1) = 0xA1;
*((char*)&result + 2) = 0xB2;
*((char*)&result + 3) = 0xB1;
4、數組強制轉換
unsigned char b[4]={0xA2,0xA1,0xB2,0xB1};
float result;
result=*((float *)b);
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
av网站免费观看
|
狠狠的干
|
蜜桃视频在线观看免费视频网站www
|
中文字幕一区二区在线观看
|
日韩欧美一区二区三区免费观看
|
成人免费观看男女羞羞视频
|
久久网一区二区三区
|
欧美性生活免费
|
黄色一级毛片免费看
|
精品一区二区三区免费毛片
|
国产91网站在线观看
|
欧美日韩在线免费观看
|
在线观看亚洲专区
|
日韩精品在线播放
|
一区二区三区视频在线免费观看
|
精品一区二区三区在线观看国产
|
亚洲国产精品久久久久婷婷老年
|
精品欧美一区二区三区久久久
|
av国产精品毛片一区二区小说
|
午夜欧美一区二区三区在线播放
|
欧美日一区二区
|
亚洲a在线视频
|
av av在线
|
综合久久99
|
国产精品mv在线观看
|
中文字幕亚洲一区二区三区
|
九九av
|
伊人狠狠干
|
久热伊人
|
国产免费一区二区
|
亚洲字幕在线观看
|
国产一区二区三区四区在线观看
|
日本精品一区二区
|
99一级毛片
|
日韩精品一区二区三区中文在线
|
亚洲国产一区在线
|
免费久久视频
|
www.youjizz.com日韩
|
天天干视频
|
成人免费一区二区三区牛牛
|
国产一区二区欧美
|