栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

minIni移植到littlefs

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

minIni移植到littlefs

minIni

minIni 是一个用于读取和写入 INI 文件的库。
github :
https://github.com/compuphase/minIni

minIni特点:

  • 1、minIni 大约是 950 行代码 (包括注释),是一个真正的 “迷你” INI 文件解析器,非常容易移植到各种嵌入式平台。

  • 2、minIni 不需要标准 C/C++ 库中的 文件 I/O 函数,且允许通过宏配置要选择文件 I/O 接口。

  • 3、minIni 仅使用 stack ,完全不使用动态内存(malloc)。

  • 4、有 C++ binding, 能很好地配合 C++ 使用

为什么使用minIni :

搜索ini文件库会发现有很多,有些还说支持嵌入式系统,但是去看了代码就会发现,是要支持完整的C标准文件读写接口才可以,在使用RTOS和MCU的嵌入式系统根本不能用,要使用还要费很多时间去移植,其文件读写接口都是嵌入到函数实现里面的,移植起来很难受。
通过上述minIni第2点就可知minIni对ini文件IO接口通过宏进行配置,也就是移植,可知可移植性很好。

minIni移植到littlefs

minIni仓库下有很多针对许多不同文件IO好的头文件,移植可以参考。

  minGlue-bk.h
  minGlue-ccs.h
  minGlue-efsl.h
  minGlue-FatFs.h
  minGlue-ffs.h
  minGlue-lfs.c
  minGlue-Linux.h
  minGlue-mdd.h
  minGlue-stdio.h
  minGlue.h
  minIni.c
  minIni.h
  test.c
  test.ini
  test2.cc
  testplain.ini
  wxMinIni.h

针对littlefs的移植:

minGlue-lfs.h

#ifndef _MINGLUE_LFS_H_
#define _MINGLUE_LFS_H_

#define INI_BUFFERSIZE  256       


#include "lfs.h"                   
#include "stdio.h"
#include "string.h"


#define INI_LINETERM      "n"


#define PORTABLE_STRNICMP

extern lfs_t lfs;

char *lfs_gets(char *s, int size, lfs_file_t *file);

#define INI_FILETYPE    lfs_file_t
#define ini_openread(filename, file)   (lfs_file_open(&lfs, (file), (filename), LFS_O_RDONLY | LFS_O_CREAT) == LFS_ERR_OK)
#define ini_openwrite(filename, file)  (lfs_file_open(&lfs, (file), (filename), LFS_O_WRONLY | LFS_O_CREAT) == LFS_ERR_OK)
#define ini_close(file)               (lfs_file_close(&lfs, file) == LFS_ERR_OK)
#define ini_read(buffer, size, file)    (lfs_gets((buffer), (size), (file)))
#define ini_write(buffer, file)        (lfs_file_write(&lfs, (file), (buffer), strlen(buffer)))
#define ini_remove(filename)          (lfs_remove(&lfs, filename) == LFS_ERR_OK)
#define ini_rename(source, dest)         (lfs_rename(&lfs, (source), (dest)) == LFS_ERR_OK)

#define INI_FILEPOS                   lfs_soff_t
#define ini_tell(file, pos)            (*(pos) = lfs_file_tell(&lfs, (file)))
#define ini_seek(file, pos)            (lfs_file_seek(&lfs, (file), *(pos), LFS_SEEK_SET) == LFS_ERR_OK)

#endif

minGlue-lfs.c

#include "lfs.h"                   
#include "string.h"

extern lfs_t lfs;

char *lfs_gets(char *s, int size, lfs_file_t *file)
{
    char    *ptr;
    int32_t numBytes;
    int32_t pos;

    if ((s == 0) || (size <= 0))
    {
        return(NULL);
    }
    
    pos = lfs_file_seek(&lfs, file, 0, LFS_SEEK_CUR);
    
    numBytes = lfs_file_read(&lfs, file, (s), (size - 1));
    if (numBytes > 0)
    {
        
        ptr = strchr(s, 'n');
        if (ptr)
        {
            ptr++;
            *ptr = 0;
            numBytes = strlen(s);
        }
    }
    else
    {
        return(NULL);
    }
    assert(numBytes <= size);
    
    lfs_file_seek(&lfs, file, (pos + numBytes), LFS_SEEK_SET);
    return(s);
}

文件IO接口littlefs基本都有现成的,但是获取文件一行数据的接口则没有,需要自己实现,针对littlefs的实现如上所示,lfs_gets 函数,一行数据以"n"为结束符

注:

使用的时候将原来的minGlue.h备份一下minGlue-bk.h,然后将minGlue-lfs.h改成minGlue.h
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/965629.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号