从闪存中读取文件STM32L476G-DISCO

时间:2016-10-28 17:30:26

标签: c arm stm32 stm32ldiscovery

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

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

我想开始简单,只是嵌入文件,但我不知道如何在我的代码中调用它。我可以通过编程软件手动编程存储器,但我再次知道的是我闪存数据的地址。如果我使用调试器逐步执行我的程序,它会转到&#34; wave_open&#34;,但由于我没有使用文件,我不太确定我放入了什么f_open或f_read的位置。我还使用STCubeMX除了STDIO.h

之外由/* main.c */ # include "main.h"# include "stm32l4xx_hal.h" /* USER CODE BEGIN Includes */ # include < stdio.h > #include < stdlib.h > #include < string.h > #include < time.h > #include "layer3.h"# include "wave.h" /* USER CODE END Includes */ /* Private variables --------------------------------------------------- QSPI_HandleTypeDef hqspi; SPI_HandleTypeDef hspi2; UART_HandleTypeDef huart2; /* USER CODE BEGIN PV */ /* Private variables --------------------------------------------------- /* Some global vars. */ char * infname, * outfname; FILE * infile, * outfile; int quiet = 0; int _verbose = 0; int stereo = STEREO; int force_mono = 0; /* USER CODE END PV */ /* Parse command line arguments */ static int parse_command(int argc, char ** argv, shine_config_t * config) { int i = 0; // if (argc - i != 2) return 0; // infname = argv[i++]; // outfname = argv[i]; //infname = "pcm1644mE.wav"; infname = 0x08020000; outfname = "pcm1644mE.mp3"; return 1; } int main(void) { /* USER CODE BEGIN 1 */ wave_t wave; time_t start_time, end_time; int16_t buffer[2 * SHINE_MAX_SAMPLES]; shine_config_t config; shine_t s; int written; unsigned char * data; initialise_monitor_handles(); uint8_t msg[100]; time( & start_time); /* Set the default MPEG encoding paramters - basically init the struct */ set_defaults( & config); if (!quiet) print_name(); /* Open the input file and fill the config shine_wave_t header */ if (!wave_open(infname, & wave, & config, quiet)) error("Could not open WAVE file"); infile = wave.file; if (force_mono) config.wave.channels = 1; .... 生成的HAL库

以下是我正在使用的代码片段:

 OriginallyFromJavaClass Something = new OriginallyFromJavaClass("c:\ReadInThisFile.txt");

1 个答案:

答案 0 :(得分:1)

想想这一点,在Wave.c中,原始源代码看起来打开一个典型的“fopen”文件句柄,但由于平台上没有文件系统,我可以通过使用“ fmemopen“代替fopen,只是将fmemopen指向我的缓冲区,里面有数据。希望能够帮助别人,因为花了很长时间来解决这个问题。