为micropython启用文件系统(3)

本文详细介绍了如何在MicroPython的MM32微控制器端口上启用文件系统,主要涉及两个步骤:启用OOFATFS文件系统库并将其编译选项打开,以及将SD卡访问函数框架注册到虚拟文件系统(VFS)。在启用OOFATFS时,需要修改makefile和相关配置文件,确保源代码被正确编译。接着,创建了machine_sdcard模块,将SD卡访问函数框架注册到VFS中,实现了对SD卡的读写操作。最后,在main.c中调用VFS进行初始化,并将SD卡挂载到文件系统路径中。然而,编译过程中遇到了链接错误,通过添加timeutils.c到源文件列表中解决了问题。整个过程揭示了MicroPython在嵌入式系统中实现文件系统访问的复杂性和细节。

为micropython启用文件系统(3)

启用oofatfs

oofatfs的代码已经存在于micropython的代码仓库中,但是需要在makefile中把相关的编译选项打开。extmod/extmod.mk文件中包含了extmod目录下很多组件的编译配置代码段,其中也包含了oofatfs的部分:

# VFS FAT FS

OOFATFS_DIR = lib/oofatfs

# this sets the config file for FatFs
CFLAGS_MOD += -DFFCONF_H=\"$(OOFATFS_DIR)/ffconf.h\"

ifeq ($(MICROPY_VFS_FAT),1)
CFLAGS_MOD += -DMICROPY_VFS_FAT=1
SRC_MOD += $(addprefix $(OOFATFS_DIR)/,\
	ff.c \
	ffunicode.c \
	)
endif

extmod.mk已经包含在micropython的makefile中了。在 ports/mm32/Makefile 中,添加CFLAGS_MOD和SRC_MOD:

…
CFLAGS += $(CFLAGS_MOD)
…
SRC_HAL_MM32_C += \
	$(MCU_DIR)/devices/$(CMSIS_MCU)/system_$(CMSIS_MCU).c \
	$(MCU_DIR)/drivers/hal_rcc.c \
	$(MCU_DIR)/drivers/hal_gpio.c \
	$(MCU_DIR)/drivers/hal_uart.c \
	$(MCU_DIR)/drivers/hal_sdio.c \

SRC_BRD_MM32_C += \
	$(BOARD_DIR)/clock_init.c \
	$(BOARD_DIR)/pin_init.c \
	$(BOARD_DIR)/board_init.c \
	$(BOARD_DIR)/machine_pin_board_pins.c \
	$(BOARD_DIR)/sdcard_sdio.c \

SRC_C += \
	main.c \
	fatfs_port.c \
…
	$(SRC_MOD) \

这里还在SRC_C中手动补完了fatfs_port.c文件。

此时,需要指定“MICROPY_VFS_FAT”的配置值为1,才能解锁对oofatfs相关源文件的包含。参考nrf的port中的做法,在 ports\mm32\boards\MB_F3270\mpconfigboard.mk 中添加:

MCU_SERIES = mm32f3270
CMSIS_MCU = mm32f3277g7
LD_FILES = boards/mm32f3277g7_flash.ld

MICROPY_VFS_FAT ?= 1

此处特别注意,在makefile系统中的“MICROPY_VFS_FAT”和C预编译系统中的“MICROPY_VFS_FAT”是两个域的东西,在mk文件中直接定义“MICROPY_VFS_FAT ?= 1”仅作用于makefile系统,“CFLAGS_MOD += -DMICROPY_VFS_FAT=1”才是作用在C预编译系统中的,作用于C源代码的内容。

另外,还要在代码中添加FATFS和VFS的宏开关,在micropython内核中启用与文件系统相关的功能,在编译的过程中包含到最终的可执行文件中。在 ports\mm32\ mpconfigport.h 文件中添加如下宏定义开关:

// fatfs configuration used in ffconf.h
#define MICROPY_VFS                    (1)
//#define MICROPY_VFS_FAT              (1) /* already included in cflags. */
#define MICROPY_FATFS                  (1)
#define MICROPY_FATFS_ENABLE_LFN       (1)
#define MICROPY_FATFS_LFN_CODE_PAGE    437 /* 1=SFN/ANSI 437=LFN/U.S.(OEM) */
#define MICROPY_FATFS_USE_LABEL        (1<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值