在STM32 ARM平台的闪存中嵌入文件

Embed file in STM32 ARM platform's flash memory

我是嵌入式系统的新手,一直在尝试将 MP3 转换程序移植到基于 ARM 的 STM32L476G-DISCO 开发板。我还使用基于 Eclipse 的免费 System Workbench 软件。我已经成功地编译了程序并将其闪存到电路板上。它甚至一直运行到程序要求输入文件 (.wav) 为止。

我的问题是如何实现文件处理部分?以前,当 运行 原始 windows 控制台应用程序时,我只会发送命令行参数,如“'>C:\file.wav < C:\file.mp3”。

该板带有 128Mbit 闪存,利用 QSPI 进行通信以及内部闪存。我需要一个文件系统来 read/write 一个文件到我的程序中吗?我想从简单开始,只是嵌入文件,但我不知道如何在我的代码中调用它。我可以通过编程软件手动对内存进行编程,但同样,我所知道的只是闪存数据所在的地址。

如果您已将数据写入内部闪存,您只需要它的地址 - 它不再是 "file" 它可以被视为您已将数据从文件读取到该位置.与其单独对应用程序中的数据进行编程,不如编写一个代码生成工具来读取开发主机上的数据并将其转换为 C 代码数据数组,因此:

static const uint8_t wav_file[] = { '\x00, `\x55` ... 
                                    ...
                                    ... } ;

然后您将其编译并 link 为您的应用程序代码。

这将允许 linker 找到您的数据并避免应用程序代码和数据相互侵占的任何问题。此外,它为玩具数据提供了一个符号起始地址和一个可以由 sizeof(wav_file).

确定的大小

但是,如果数据存储在外部闪存中,则不能使用此方法,因为它不是内存映射的。在这种情况下,需要将数据读入 RAM 进行处理。

如果您的音频库需要一个文件并且您不想修改它,那么是的,您需要一个文件系统。在任何情况下,文件系统可能是管理外部闪存的最简单和最安全的方法。