Settings区域数据读写
1、Settings区域可以储存我们的一些数据,我们定义成结构体形式,然后按照结构体的形式写进falsh,使用时读取即可。
2、新增setting.c setting.h文件
#ifndef _SETTINGS_H__
#define _SETTINGS_H__
#include "main.h"
typedef struct settings
{
/* data */
MI_U8 update_flag;
MI_U8 jump;
MI_CHAR board_name[24];
MI_CHAR version[48];
}system_info;
MI_BOOL system_info_get_update_flag(MI_U8 *flag);
MI_BOOL system_info_set_update_flag(MI_U8 flag);
#endif //_SETTINGS_H__
比如我们定义了一个system_info的结构体,我们要获取是否升级的这个flag值,
那么可以这样操作。
#include <string.h>
#include "settings.h"
#include "flash.h"
MI_BOOL system_info_get_update_flag(MI_U8 *flag)
{
system_info info;
memset(&info,0,sizeof(info));
n32_flash_read(SETTINGS_START_ADDRESS,(uint8_t *)&info,sizeof(info));
*flag = info.update_flag;
return MI_TRUE;
}
/**
* 设置升级标志位的函数
*/
MI_BOOL system_info_set_update_flag(MI_U8 flag)
{
system_info info;
memset(&info,0,sizeof(info));
n32_flash_read(SETTINGS_START_ADDRESS,(uint8_t *)&info,sizeof(info));
info.update_flag = flag;
//先清除system info 区域
n32_flash_erase(SETTINGS_START_ADDRESS,SETTINGS_END_ADDRESS);
n32_flash_write(SETTINGS_START_ADDRESS,(uint8_t *)&info,sizeof(info));
return MI_TRUE;
}
我们调用下看看效果,是不是我们想要的。
int main(void)
{
led_init();
usart1_init();
usart2_init();
timer6_init();
tim2_pwm_init();
key_input_init();
/* Delay 1s */
SysTick_Delay_Ms(1000);
system_info_set_update_flag(2);
MI_U8 flag = 0;
system_info_get_update_flag(&flag);
Max_Info("n32_flash_read == %d\r\n",flag);
while(1)
{
}
}
我们写入一个2,看打印读取的是否为2.