4、移植接口
4.1 移植初始化
EasyFlash移植初始化。可以传递默认环境变量,初始化EasyFlash移植所需的资源等等。
EfErrCode ef_port_init(ef_env const **default_env, size_t *default_env_size)
参数 | 描述 |
---|---|
default_env | 默认的环境变量 |
default_env_size | 默认环境变量的数量 |
4.2 读取Flash
最小单位为4个字节。
EfErrCode ef_port_read(uint32_t addr, uint32_t *buf, size_t size)
参数 | 描述 |
---|---|
addr | 读取起始地址(4字节对齐) |
buf | 存放读取数据的缓冲区 |
size | 读取数据的大小(字节) |
4.3 擦除Flash
EfErrCode ef_port_erase(uint32_t addr, size_t size)
参数 | 描述 |
---|---|
addr | 擦除起始地址 |
size | 擦除数据的大小(字节) |
4.4 写入Flash
最小单位为4个字节。
EfErrCode ef_port_write(uint32_t addr, const uint32_t *buf, size_t size)
参数 | 描述 |
---|---|
addr | 写入的起始地址(4字节对齐) |
buf | 源数据的缓冲区 |
size | 写入数据的大小(字节) |
4.5 对环境变量缓冲区加锁
为了保证RAM缓冲区在并发执行的安全性,所以需要对其进行加锁(如果项目的使用场景不存在并发情况,则可以忽略)。有操作系统时可以使用获取信号量来加锁,裸机时可以通过关闭全局中断来加锁。
void ef_port_env_lock(void)
4.6 对环境变量缓冲区解锁
有操作系统是可以使用释放信号量来解锁,裸机时可以通过开启全局中断来解锁。
void ef_port_env_unlock(void)
4.7 打印调试日志信息
在定义PRINT_DEBUG
宏后,打印调试日志信息。
void ef_log_debug(const char *file, const long line, const char *format, ...)
参数 | 描述 |
---|---|
file | 调用该方法的文件 |
line | 调用该方法的行号 |
format | 打印格式 |
… | 不定参 |
4.8 打印普通日志信息
void ef_log_info(const char *format, ...)
参数 | 描述 |
---|---|
format | 打印格式 |
… | 不定参 |
4.9 无格式打印信息
该方法输出无固定格式的打印信息,为ef_print_env
方法所用(如果不使用ef_print_env
则可以忽略)。而ef_log_debug
及ef_log_info
可以输出带指定前缀及格式的打印日志信息。
void ef_print(const char *format, ...)
参数 | 描述 |
---|---|
format | 打印格式 |
… | 不定参 |
4.10 默认环境变量集合
在 ef_port.c 文件顶部定义有 static const ef_env default_env_set[]
,我们可以将产品上需要的默认环境变量集中定义在这里。当 flash 第一次初始化时会将默认的环境变量写入。
默认环境变量内部采用 void * 类型,所以支持任意类型,可参考如下示例:
static uint32_t boot_count = 0;
static time_t boot_time[10] = {0, 1, 2, 3};
static const ef_env default_env_set[] = {
// { key , value, value_len },
{"username", "armink", 0}, //类型为字符串的环境变量可以设定值的长度为 0 ,此时会在初始化时会自动检测其长度
{"password", "123456", 0},
{"boot_count", &boot_count, sizeof(boot_count)}, //整形
{"boot_time", &boot_time, sizeof(boot_time)}, //数组类型,其他类型使用方式类似
};