4、移植接口

4.1 移植初始化

EasyFlash移植初始化。可以传递默认环境变量,初始化EasyFlash移植所需的资源等等。

  1. EfErrCode ef_port_init(ef_env const **default_env, size_t *default_env_size)
参数 描述
default_env 默认的环境变量
default_env_size 默认环境变量的数量

4.2 读取Flash

最小单位为4个字节。

  1. EfErrCode ef_port_read(uint32_t addr, uint32_t *buf, size_t size)
参数 描述
addr 读取起始地址(4字节对齐)
buf 存放读取数据的缓冲区
size 读取数据的大小(字节)

4.3 擦除Flash

  1. EfErrCode ef_port_erase(uint32_t addr, size_t size)
参数 描述
addr 擦除起始地址
size 擦除数据的大小(字节)

4.4 写入Flash

最小单位为4个字节。

  1. EfErrCode ef_port_write(uint32_t addr, const uint32_t *buf, size_t size)
参数 描述
addr 写入的起始地址(4字节对齐)
buf 源数据的缓冲区
size 写入数据的大小(字节)

4.5 对环境变量缓冲区加锁

为了保证RAM缓冲区在并发执行的安全性,所以需要对其进行加锁(如果项目的使用场景不存在并发情况,则可以忽略)。有操作系统时可以使用获取信号量来加锁,裸机时可以通过关闭全局中断来加锁。

  1. void ef_port_env_lock(void)

4.6 对环境变量缓冲区解锁

有操作系统是可以使用释放信号量来解锁,裸机时可以通过开启全局中断来解锁。

  1. void ef_port_env_unlock(void)

4.7 打印调试日志信息

在定义PRINT_DEBUG宏后,打印调试日志信息。

  1. void ef_log_debug(const char *file, const long line, const char *format, ...)
参数 描述
file 调用该方法的文件
line 调用该方法的行号
format 打印格式
不定参

4.8 打印普通日志信息

  1. void ef_log_info(const char *format, ...)
参数 描述
format 打印格式
不定参

4.9 无格式打印信息

该方法输出无固定格式的打印信息,为ef_print_env方法所用(如果不使用ef_print_env则可以忽略)。而ef_log_debugef_log_info可以输出带指定前缀及格式的打印日志信息。

  1. void ef_print(const char *format, ...)
参数 描述
format 打印格式
不定参

4.10 默认环境变量集合

在 ef_port.c 文件顶部定义有 static const ef_env default_env_set[] ,我们可以将产品上需要的默认环境变量集中定义在这里。当 flash 第一次初始化时会将默认的环境变量写入。

默认环境变量内部采用 void * 类型,所以支持任意类型,可参考如下示例:

  1. static uint32_t boot_count = 0;
  2. static time_t boot_time[10] = {0, 1, 2, 3};
  3. static const ef_env default_env_set[] = {
  4. // { key , value, value_len },
  5. {"username", "armink", 0}, //类型为字符串的环境变量可以设定值的长度为 0 ,此时会在初始化时会自动检测其长度
  6. {"password", "123456", 0},
  7. {"boot_count", &boot_count, sizeof(boot_count)}, //整形
  8. {"boot_time", &boot_time, sizeof(boot_time)}, //数组类型,其他类型使用方式类似
  9. };