2016-10-26 4 views
0

저는 임베디드 시스템에 익숙하며 MP3 변환 프로그램을 ARM 기반 STM32L476G-DISCO 개발 보드로 이식하려고했습니다. Eclipse 기반의 무료 System Workbench 소프트웨어도 사용하고 있습니다. 나는이 프로그램을 편집하여 게시판에 게시하는 데 성공했습니다. 프로그램이 파일 입력 (.wav)을 요구할 때까지 실행됩니다.STM32 ARM 플랫폼의 플래시 메모리에 파일 포함

제 질문은 어떻게 파일 처리 부분을 구현합니까? 이전에는 원래 Windows 콘솔 앱을 실행할 때 " '> C : \ file.wav < C : \ file.mp3"과 같은 명령 줄 인수로 보내야했습니다.

보드는 내부 플래시는 물론 통신을 위해 QSPI를 사용하는 128Mbit 플래시 메모리를 제공합니다. 내 프로그램에 파일을 읽고 쓰려면 파일 시스템이 필요합니까? 간단하게 시작하고 파일을 포함 시키려고 생각했지만 코드에서 호출하는 방법을 모르겠습니다. 프로그래밍 소프트웨어를 통해 수동으로 메모리를 프로그래밍 할 수 있지만 데이터를 플래시 한 주소는 다시 알 수 있습니다.

+0

나를 위해 명확하지 않습니다. 귀하의 응용 프로그램은 항상 동일한 파일을 재생해야합니까, 아니면 다른 파일을 시간대별로 보내야합니까? 임베디드 플랫폼의 여유 공간이 재생할 파일을 저장할 수 있습니까? – LPs

+0

결국 나는 매번 다른 파일을 보내 겠지만 시작하려면 동일한 파일을 읽고 변환하는 것이 좋습니다. 보드에는 1MB의 내부 플래시가 있으며 애플리케이션 코드에 의해 80KB 만 사용되고 있습니다. .mp3 파일 자체는 148KB입니다. – sam

+0

@Clifford 답은 설명대로 "큰 바이트 배열"로 취급하고 wav 파일을 응용 프로그램 코드에 연결할 수 있습니다. 나중에 사용하기 위해 변환 및 재생할 wav 파일의 "바이트"를 저장할 Flash에서 공간을 예약합니다 (예를 들어 liker 스크립트 사용). – LPs

답변

0

데이터를 내부 플래시에 기록한 경우 주소 만 있으면됩니다. 더 이상 "파일"이 아니므로 파일에서 해당 위치로 데이터를 읽은 것처럼 처리 할 수 ​​있습니다. 오히려 다음 별도로은 TEH 개발 호스트에서 TEH FIKE를 읽고 따라서 C 코드의 데이터 배열로 변환 코드 생성 도구를 쓸 수있는 응용 프로그램에서 데이터를 프로그래밍 :

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

당신이 다음에 컴파일 및 링크하여 응용 프로그램 코드.

이렇게하면 링커가 데이터를 찾고 응용 프로그램 코드와 데이터 침해 문제를 피할 수 있습니다. 또한 장난감 데이터에 상징적 인 시작 주소와 sizeof(wav_file)으로 확인할 수있는 크기를 제공합니다.

데이터가 메모리에 매핑되지 않았으므로 외부 플래시에 저장되어있는 경우이 방법을 사용할 수는 없습니다. 이 경우 처리를 위해 데이터를 RAM으로 읽어 들일 필요가 있습니다.

오디오 라이브러리에서 파일을 예상하고 수정하지 않으려면 파일 시스템이 필요합니다. 파일 시스템은 어쨌든 외부 플래시를 관리하는 가장 간단하고 안전한 방법 일 것입니다.

+0

내 파일이 다음과 같이 선언 된 경우 : '/ * 일부 글로벌 바. */ char * infname, * outfname; FILE * infile, * outfile; ' 이상이 호출되었습니다.: 'int main (void) { \t wave_t wave; \t int written; \t unsigned char * data; \t 시간 (& start_time); \t/* 입력 파일을 열고 채우기 구성 shine_wave_t 헤더 */ \t 경우 \t 오류 ("열 수 없습니다 WAVE 파일 수 없습니다") (wave_open (infname, 파, 설정), 조용!) \t infile = wave.file; \t ... ' (0x08020000)에 플래시 한 위치의 파일을 읽는 방법을 어떻게 지정합니까? – sam

+0

@sam 솔루션은 플랫폼, 컴파일러 및 링커에 따라 다릅니다. – LPs

+0

@ sam : 새로운 질문을 올리십시오. 의견은 특히 코드를 포함하여 추가 질문이나 설명을 게시하는 데 적합하지 않습니다. 질문을 업데이트하거나 새로운 질문을 올리십시오. 필요한 것은'wave_open()'이나 파일 I/O API를 전혀 사용하지 않는 것입니다. 파일이 없기 때문에 파일을 "열어"할 필요가 없습니다. wav 데이터는 이미 완전한 데이터 배열로 있습니다. 코멘트가 아닌 질문을 업데이트하여 다시 사용중인 wav 라이브러리를 지정한 경우 도움이 될 수 있습니다. – Clifford

관련 문제