You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
1.4 KiB
59 lines
1.4 KiB
4 months ago
|
#include "../app/app_data_save.h"
|
||
|
#include "../msp/msp_eeprom.h"
|
||
|
#include "app_config.h"
|
||
|
|
||
|
|
||
|
DATA_SAVE data_save_arr[DATA_SAVE_LEN] = {0};
|
||
|
|
||
|
//初始化存放数据的结构体数组data_save_arr
|
||
|
void data_save_init()
|
||
|
{
|
||
|
int i = 0;
|
||
|
for(i = 0;i < DATA_SAVE_LEN; i++)
|
||
|
{
|
||
|
data_save_arr[i].head[0] = HEAD0;
|
||
|
data_save_arr[i].head[1] = HEAD1;
|
||
|
data_save_arr[i].available = 1;
|
||
|
data_save_arr[i].val = 0;
|
||
|
data_save_arr[i].tail[0] = TAIL0;
|
||
|
data_save_arr[i].tail[1] = TAIL1;
|
||
|
}
|
||
|
}
|
||
|
//存放数据到eeprom中:1.从eeprom中取出数组 2.遍历寻找空位 3.把数组放回(写入)eeprom中
|
||
|
void data_save_push(U8 Data)
|
||
|
{
|
||
|
int i = 0;
|
||
|
int free = 0;
|
||
|
// 从eeprom中取出数组
|
||
|
L0_Iap_Read_array(EEPROM_DATA_ADDR, data_save_arr,sizeof(data_save_arr));
|
||
|
if(data_save_arr[0].head[0] != HEAD0 || data_save_arr[0].head[1] != HEAD1
|
||
|
|| data_save_arr[0].tail[0] != TAIL0 || data_save_arr[0].tail[1] != TAIL1)
|
||
|
{
|
||
|
data_save_init();
|
||
|
}
|
||
|
// 遍历寻找空位
|
||
|
for(i = 0;i < DATA_SAVE_LEN; i++)
|
||
|
{
|
||
|
if(data_save_arr[i].available == 1)
|
||
|
{
|
||
|
free = i;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
// 当都有数据时
|
||
|
if(i == DATA_SAVE_LEN)
|
||
|
{
|
||
|
for(i = 0; i < DATA_SAVE_LEN - 1; i++)
|
||
|
{
|
||
|
data_save_arr[i] = data_save_arr[i+1];
|
||
|
}
|
||
|
free = DATA_SAVE_LEN - 1;
|
||
|
}
|
||
|
// 放到free位置
|
||
|
data_save_arr[free].available = 0;
|
||
|
data_save_arr[free].val = Data;
|
||
|
|
||
|
// 把数组放回(写入)eeprom中
|
||
|
L0_Iap_Program_array(EEPROM_DATA_ADDR, data_save_arr,sizeof(data_save_arr));
|
||
|
}
|