2013-02-25 1 views
2

비 OS 지원 암 보드에서 작업 중입니다. 데스크탑 컴퓨터에서 내 C++ 코드를 테스트했습니다. 제대로 작동합니다. 이제 생성 된 bin 파일을 덤프해야합니다. arm-elf-g ++를 사용하여 코드를 교차 컴파일하십시오. 내 코드는 fopen 명령을 사용하여 내용을 읽는 파일을 열지 만 OS가 없으므로이 기능이 보드에서 작동하므로 파일 시스템이 없습니까?비 OS 팔 보드에 'fopen'사용

감사 vid09

+4

물론 그렇지 않습니다. – vipw

+0

운영 체제가 없다면 파일 시스템이 없을 가능성이 있습니다. 파일 조작을 처리 할 수있는 라이브러리와 링크하고 있습니까? –

+1

질문에 대답했습니다 ... 파일 시스템이 없다면 파일이 무엇입니까? – neagoegab

답변

2

왜 파일을 열어 그 데이터를 읽습니까?

다른 방법으로 포함 된 코드에 제공 할 수 있습니다. (! - 후자는 더 O/S와 큰 작업이 있지만 직렬 어쩌면 포트 또는 이더넷) 및 사용 호스트 예를 들어

  • 는 일정한
  • 일부 포트를 통해 그것을 읽을로의 컴파일 데이터를 보낼 수 있습니다.
+0

실제 데스크탑에서 작동하는 코드는 인수로 파일 이름을 가져 와서 열며 다른 C 파일에서 발생합니다. fopen이 작동한다면 생각했던 것처럼 모든 장소에서 수정하지 않아도됩니다. . – vid09

1

내가/baremetal에 O 디버깅을위한 파일을 사용하는 일반적인 방법. 이 경우 일반적으로 semihosting을 사용하여 구현됩니다.

CS3은 운영 체제가없는 보드를 지원하도록 설계되었습니다. 에 openwrite과 같은 기능이 운영 체제 지원없이 작동하려면 세미 호스팅 기능이 디버거와 함께 지원됩니다.

세미 호스팅이 활성화 된 상태에서이 시스템 호출은 호스트 시스템에서 해당 함수 호출로 변환됩니다. 디버거에 연결되어있을 때만이 함수 호출을 사용할 수 있습니다. 디버거에서 연결을 끊었을 때 을 사용하려고하면 하드웨어 예외가 발생합니다.

분명히 독립 실행 형 설정에서는 작동하지 않습니다.

그러나 필요한 통화를 직접 구현할 수 있습니다. 이것은 사용중인 C 런타임 라이브러리에 달려 있습니다. 다음은 Newlib에서 수행하는 방법에 대한 자습서입니다. http://www.embedded.com/electronics-blogs/industry-comment/4023922/Embedding-GNU-Newlib-Part-2

1

대상 라이브러리에는 대부분 fopen() 스텁이 있습니다. 작동하지 않는 빈 함수 정의로 작업 버전으로 대체해야합니다. 이것은 retargetting으로 알려져 있습니다. 재조정하지 않으면 코드가 잘 컴파일되고 링크 될 수 있지만 fopen() 호출과 printf()를 비롯한 다른 표준 I/O 호출은 아무 것도하지 않습니다.

retarget 방법은 컴파일러의 표준 C 라이브러리에 따라 다릅니다. Keil/RealView에서 제공된 retarget.c 예제 중 하나를 수정하고 프로젝트와 링크 할 수 있습니다. Newlib (일반적으로 베어 메탈 GNU 툴 체인과 함께 사용)을 사용하는 경우 스텁을 수정하거나 다시 구현해야합니다. 다른 툴체인도 비슷한 방법을 사용합니다.

파일을 열려면 파일 시스템이 있어야하기 때문에 다소 학문적입니다. 차례 차례로 파일로 읽을 수있는 데이터가 포함 된 미디어가 있어야합니다. 베어 메탈 시스템에서 수행 할 수있는 모든 작업을 수행 할 수 있지만 추가 하드웨어와 소프트웨어가 모두 포함됩니다. 예를 들어 FatFs을 참조하십시오.예를 들어 SPI 인터페이스를 통해 SD 또는 MMC 카드를 추가하는 것은 하드웨어 측면에서 비교적 간단합니다. 물론 온칩 플래시에 RAM 디스크 나 파일 시스템을 구현할 수 있지만, 처음에는 그러한 파일 시스템에 데이터를 가져 오는 방법을 고려해야합니다.