纯轮子能申请开源项目么。。。
打算自己实现一个romfs的库,主要用于在spiflash里放点字库、图片、声音之类方便些。以前做过一个管理spiflash文件的库, 链接: https://github.com/tomzbj/flasher.py
后来觉得要不光能在pc上管理,最好在mcu上用着也方便一点,还需要扩充,不过再扩充就成fs了。既然这样,不如还是找个现成的fs用起来,只读即可,简单点最好。fatfs和spiffs功能过于强大,没必要。
romfs刚合适,只读,而且文件内容连续储存,只是没找到合适的库。
github上找了一个,https://github.com/litwr2/a-romfs-driver, 它的缺点一是只能从地址空间读取,直接把需要的资源编译到mcu内部flash用,没问题,放spiflash就不行了。得把底层的读功能改成回调函数,由用户提供。二是不支持子目录。
目前开了个头,实现了opendir和readdir,做了个简单的demo, 可以列出img里的文件 (ls和ll命令)
支持切换目录 (pwd和cd命令, 目前仅限一层子目录)
之后计划依次实现cat, hexview, crc32, 再加个文件导出功能。 支持,然后来个上位机,可以GUI界面下载和管理flash文件{:lol:} shower.xu 发表于 2021-7-20 22:37
支持,然后来个上位机,可以GUI界面下载和管理flash文件
之前那个flasher.py是有上位机的, 不过只有命令行界面.
gui就算了, 凡是有gui的场合, 基本要在gui上浪费80%的时间... 好,大家讨论一下,看看是否多人感兴趣。 是nandflash还是nor flash?spi 我做过W25Q系列的简易烧写器,GUI用python不难写,pyqt大法好 eeehua 发表于 2021-7-20 23:13
是nandflash还是nor flash?spi
随便, 底层的读操作由用户提供回调函数. 支持造轮子, 有些技能树只有不断的造轮子才能点开的. 支持造轮子. {:victory:}{:victory:}{:victory:} 支持,弄个简易的正如楼主所说的,MCU放少量文件的场合。有个项目,官方SDK里面的配置是json, mcu苦于没有轻量的文件系统,还得用电脑写工具先转成数组。 think_a_second 发表于 2021-7-21 14:22
支持,弄个简易的正如楼主所说的,MCU放少量文件的场合。有个项目,官方SDK里面的配置是json, mcu苦于没有 ...
转数组倒没必要, 可以用objcopy转成.o然后链接进来, 或者建个汇编然后.incbin包含进来 本帖最后由 dukelec 于 2021-7-22 01:45 编辑
提個小建議,直接用通用的 msgpack 格式,類似 json,不同的是支持二進制數據、對 mcu 比較友好。可以用 dict 字典形式存儲文件,key 是文件名,value 是文件二進制內容。可以用多級 dict 當做目錄。文件名長度也沒限制。
電腦上用目錄存放文件,cat、hexdump 之類的直接在目錄中操作,用電腦自帶的不用自己寫,只要寫一個工具把指定目錄及子目錄打包成 msgpack 單個文件就好了,可以添加 crc 字段,打包過程中生成。mcu 端找一個開源的 msgpack 庫,或者自己寫一個小解析工具。
我寫的 CDEncrypt 開源加密工具等,都是用 msgpack 打包文件。
用 msgpack,除了可以存文件,還可以代替 json 用做 iot 等通訊場合,開銷比 json 小多了。而且 api 接口由 json 改為 msgpack 很方便,甚至可以同時兼容兩者。 原来轮子是底层的意思,我还以为是车轮子呢。
能有人做底层当然好了,支持哦。 dukelec 发表于 2021-7-22 00:29
提個小建議,直接用通用的 msgpack 格式,類似 json,不同的是支持二進制數據、對 mcu 比較友好。可以用 di ...
好啊, 你也弄一个呗~ 搞轮子就跟搞基础医学一样,伟大 挺支持的,之前也是想法有,苦于每天杂七杂八事太琐碎。很多想法还没实现就磨平了。到时看看能不能贡献点代码。 有没有适合铁电的数据存储查询的东西,大概300条参数读写,还有每天4个数据存储1年可查询可修改。 waterx3 发表于 2021-7-23 08:20
有没有适合铁电的数据存储查询的东西,大概300条参数读写,还有每天4个数据存储1年可查询可修改。 ...
KV存储? 看看flashdb/easyflash? 本站似乎有他的专栏 本帖最后由 tomzbj 于 2021-7-30 11:16 编辑
初步完成基本功能和简单的demo (win32环境, mingw编译)
目前有以下api:
int zr_init(zr_fs_t* fs);
int zr_open(zr_fs_t* fs, const char* path);
int zr_close(zr_fs_t* fs, int fd);
int zr_read(zr_fs_t* fs, int fd, void* buff, zr_u32_t nbytes);
int zr_lseek(zr_fs_t* fs, int fd, zr_u32_t offset);
zr_u32_t zr_tell(zr_fs_t* fs, int fd);
int zr_stat(zr_fs_t* fs, const char* path, zr_finfo_t* finfo);
int zr_opendir(zr_fs_t* fs, zr_dir_t* dir, const char* path);
int zr_readdir(zr_fs_t* fs, zr_dir_t* dir, zr_finfo_t* finfo);
用户初始化时提供读函数和起始位置即可.
demo里实现了一个简单的命令行界面, 支持ls, ll, pwd, cd, cat, stat, hexview, crc32, export, help命令。
晚些时候我再移植到stm32+spiflash上试试。
github链接: https://github.com/tomzbj/zromfs
页:
[1]