MROAD M3 에 내장된 MP3 플레이어 버그

Study 2009.01.14 19:00 Posted by 몽백작

MROAD M3를 사용한지 어언 반년이 되어 간다. 그동안 간단한 네비 용도로만 사용했고, 비디오는 차안에서 영화볼일이 없어서, MP3는 아이팟이 있기 때문에 사용하지 않았었다.

그런데 추운 겨울에 접어들면서 문제가 발생했다.
사용하는 MP3 플레이어인 iPod Video 5.5세대를 추운 겨울 밤새 차안에 방치할 경우 얼어버리는 현상이 발생한다는 것이다. iPod Touch가 대세인 요즘 시대에 5.5세대면 나름 오래 쓴거겠지만 그렇다고 얼어버리다니...;;; 사실 언다기 보다는 처음에 제대로 부팅이 안되는 현상이 발생하는데, 기기가 꽁꽁 얼어버릴 만큼 차가운 장소에 방치될 경우에 그런 현상이 발생하고, 시간이 지나면 다시 괜찮아지곤 해서 배터리나 하드디스크에 온도로 인한 문제겠거니 하고 생각이 들었다.

아무튼...
추운 겨울에는 노래를 안들을 순 없고... 그렇다고 차에서 내릴 때마다 iPod을 챙기는 꼼꼼한 성격도 아닌지라... 뭔가 대안을 찾기 시작했다. 그러다 맘에 들진 않지만 MROAD M3 내비의 내장 mp3 플레이어를 사용해 보는건 어떨까 하는 생각이 들었다.

그래... 컨버젼스 시대잖아!! ㅋㅋ

iPod 때문에 내 PC의 기본 mp3 플레이어로 사용하는 iTunes에서 바로 드래그해서 SD카드의 MP3 폴더에 담아주고 플레이 해봤다.

"오~ 괜찮은데?"

iPod을 사용할 때는 iPod에 카팩을 물려서 사용했기 때문에 내비 음성은 내비 내장 스피커를 사용할 수밖에 없었지만 내비에다 직접 카팩을 물리니 나름 빵빵한 음성으로 길안내를 받을 수 있어서 괜찮았다. 또한 안전운전 포인트라 불리는 경고 메시지를 받을 때에는 mp3 볼륨이 살짝 줄어들어서 안전 운전에도 도움이 되겠다 싶었다.

그런데 그 순간!! 다음의 메시지가 뜨는게 아닌가...


Unexpected program failure, Please send "crash.txt" to the developers. Program will now exit.
프로그램 에러니까 crash.txt를 개발자에게 보내라고?


이건 친절하게 한글로 되어있네. 에헤~

과거 졸업작품으로 Win CE 프로그래밍을 해본 경험이 있어 저런 메시지 박스는 정말 반갑지 않다. 언제 저런 메시지가 나오는지, 몇차례 실험을 한 결과... 얻은 결론은... 특정 mp3 파일을 재생할 때만 발생한다는 것이다.

SD카드를 뽑아서 MP3 폴더를 뒤져봤다. 아니나 다를까... 다음과 같이 보이는 게 아닌가...


빨간 펜으로 표시된 곡들이 에러가 발생하는 곡들이다. 공통된 특징은 태그 데이터가 깨져보인다는 점. ?로 보인다는 건 뭔가 태그 코딩이 엉망으로 되어있다는 뜻으로 보인다.

iTunes에서 해당 곡들의 태그를 유니코드로 바꿔줬더니 재생이 잘 된다. 기본적으로 Windows CE는 유니코드를 사용하기 때문에 유니코드로 바꿔줘야 하나보다. 더 웃긴건 저런 태그 데이터를 플레이어는 전혀 사용하지 않는 다는 것이다. 아무래도 플레이어를 프로그래밍할때 mp3 파일을 파싱하는 컴포넌트를 사용했을테고, 사용하진 않지만 태그 데이터를 어쩔 수 없이 읽어들여야 하는 부분이 있지 않았을까?

윈도버전의 iTunes에서 태그를 변환하기는 매우 위험한 작업이다. 잘 아는 사람은 잘 하겠지만, 나는 몇번 해보니까 태그가 외계어로 변환이 된다.;;; Mp3tag 라는 무료 프로그램을 쓰면 된다고는 하지만 그 프로그램에서 뱉어내는 파일들도 간혹 있고... 아... 쉬운 방법이 없을까... 찾아봐야겠다.

처음에는 유니코드가 아니라서 그럴꺼라고 생각했는데, 그게 아닌듯 싶다. 유니코드다 아니다를 어떻게 판단해야할지 모르겠다. Mp3tag를 사람들이 자주 쓰는 이유가 유니코드를 완벽하게 지원해서 라고 생각했다. 그래서 위의 꺠진 태그 파일들을 Mp3tag에 넣고 읽어보니 제대로 읽혀진다. ;;;; 기본적으로 mp3 파일의 태그는 파일의 뒷부분에 파일에 대한 설명을 붙이는 것이다. 위의 파일들이 유니코드로 되어있는지, EUC-KR로 되어 있는지는 관련 문서를 살펴보고 16진수로 분석해보면 되겠지만......

귀찮다.

그래서 삐대던 중에 아주 쉬운 해결방법을 찾아냈다!! ㅋㅋㅋ
위의 저 창에서 ???로 보이는 태그를 가진 mp3파일의 [속성]에 들어가 [요약] 탭을 클릭, 하단의 [고급(V) >>] 버튼을 클릭하면 아래와 같이 편집할 수 있는 테이블이 보인다. 여기서 그부분을 올바르게 고치던지 아니면 아예 없애버리던지 하면 재생이 된다.


풉... 이런 간단한 방법이...;;;;
저작자 표시 비영리 동일 조건 변경 허락
신고

eVC++ 4.0에서 실행 버튼을 누를 경우 자동으로 연결되어 실행되는 Standard SDK에 포함된 에뮬레이터에서는 자동으로 MFC 관련 dll 파일을 에뮬레이터에 포팅시켜주기 때문에 문제가 되지 않지만 Stand alone 버전의 에뮬레이터에서는 MFC로 컴파일한 파일을 실행할 경우 다음과 같은 에러 메시지가 출력되면서 실행되지 않는다.

사용자 삽입 이미지

에러메시지 : Cannot find '실행프로그램명' (or one of its components). Make sure the path and filename are correct and that all the required libraries are available.

해석해보면 실행프로그램 또는 이를 구성하는 하나 이상의 컴포넌트를 찾을 수 없다는 이야기다. 그렇다면 어떤 라이브러리를 어디에 넣어야 하는가?

파일은 Standard SDK를 설치했을 경우 다음의 경로에서 찾을 수 있다.
C:\Program Files\Windows CE Tools\wce500\STANDARDSDK_500\Mfc\Lib\x86\mfcce400d.dll

이 파일을 에뮬레이터의 Windows 디렉토리에 넣어주면 된다. 넣는 방법은 에뮬레이터의 Folder sharing 방법(에뮬레이터의 메뉴[Emulator]-[Folder sharing]에서 해당파일이 있는 디렉토리를 선택후 My Device에서 Storage Card로 들어가면 접근 가능)을 이용하면 된다.
신고

Windows CE 5.0 에뮬레이터로 시리얼통신하기

Study 2008.08.22 18:01 Posted by 몽백작

졸업작품때문에 Windows CE 5.0용 어플리케이션을 만들일이 생겨서 나름 용돈으로 책도 사보고 eMbedded Visual C++ 4.0, Windows CE 5.0 Standard SDK도 설치해보고, 여러가지 예제 프로그램도 짜보고 있다.

문제는 시리얼 통신이었다. 실제 타겟 보드가 있다면 별 문제 없겠지만, 타겟 보드 없이 에뮬레이터로 시리얼 통신하려니까 난감하기 짝이 없었다. 에뮬레이터의 도움말에는 분명히 개발용 컴퓨터의 실제 시리얼 포트와 매핑시킬 수 있다고는 되어 있는데 하는 방법이 제대로 안나와있었다.

결국 MSDN과 구글 그룹스 뒤진지 반나절 삽질 끝에... 겨우 알아냈다. (사실 꼼꼼하게 검색했으면 좀 더 빨리 알아냈을수도...ㅜ.ㅜ)

먼저 Standard SDK에 포함된 에뮬레이터는 eVC++ 4.0에서 바로 실행해볼 수 있지만 시리얼 통신 매핑이 안먹는다. 구글링한 결과 eVC++ 4.0의 [Tools]-[Configure Platform Manager]-[STANDARDSDK_500_Emulator]의 속성(Properties)에 들어가서 [Startup Server]의 콤보박스를 [Emulator Startup Server]로 해놓고,(아마 디폴트로 되어 있을듯) 그 옆에 [Configure]버튼을 클릭하면 나오는 Emulation Configuration Settings 창을 건드리면 된다고 한다. Communication 그룹 박스에 있는 Serial Port 2가 에뮬레이터의 COM1:과 매핑된다(Serial Port 1은 디버그 포트랑 매핑)고 하는데, 이거 잘 안된다. 왜 안되는지는 잘 모르겠다. 잘 되었으면 삽질할 필요도 없었겠다. ;;;

사용자 삽입 이미지

이런 방법으로 실제 포트와 매핑이 되지 않을 경우, 사용 가능한 다른 방법은 Command-Line Launch를 사용하는 것이다.

※ 출처
MSDN : Using the Emulator in Smart Device Projects
MSDN : Emulator Command-Line Launch Options

이 방법을 사용하기 위해서는 Standard SDK에 포함된 에뮬레이터를 사용하기 보단 따로 Windows CE 5.0 Emulator를 설치하는 편이 나을 것이다. 처음에는 번거롭고 도통 MS의 생각을 이해하기 힘들었는데 글을 쓰면서 생각해 보니 이 방법을 사용하는 것이 직접 플랫폼 빌더를 사용해 Win CE 5.0 이미지로 테스팅 하기 쉽겠다는 생각이 든다. 위의 출처 중 두번째 문서를 읽어보면 알수 있겠지만, 에뮬레이터는 결국 CE OS 이미지를 PC상에서 실행시켜 주는 프로그램이고 그 명령의 첫번째 옵션 /CEImage 를 사용하여 다양한 CE OS 이미지 상에서 테스트 해볼 수 있다는 것이 MS의 생각인 듯 싶다. (최근 VS 2005에서 Standard 에뮬레이터가 빠진 이유도 이런것이 아니었을까? ;;;)

좌우 당간 에뮬레이터를 설치했으면 한번 실행해보자. 시작메뉴에 보면 새로 설치한 에뮬레이터가 있을 것이다.

사용자 삽입 이미지

살펴 보면 인터넷 익스플로어도 있고, MSN 메신저도 있는 걸로 봐서 Standard SDK의 에뮬레이터보다 뭔가 기능이 많아 보인다. 아마 에뮬레이터 이미지가 Win CE Core License가 아닌 Professional License 버전의 이미지인가 보다.

다시 시리얼 포트를 매핑하기위한 Command-Line Launch를 적용해보자. 이 에뮬레이터를 실행하기 위해 클릭한 Sample CE Device 바로가기의 속성을 들어가보자.

사용자 삽입 이미지

이 창의 대상 부분의 에디트 박스를 보면 명령어가 나와있다. 여기다 옵션을 추가해주면 된다.

"C:\Program Files\Windows CE 5.0 Emulator\Emulator_500.exe" nk.cem /serialport2 COM1

이렇게 하면 Win CE 에뮬레이터의 COM1: 포트가 실제 개발용 PC의 COM1과 매핑이 된다. 이제 이것을 어떻게 테스트 하면 좋을까? PC 뒤에 있는 에뮬레이터와 매핑된 COM1에 널모뎀 케이블로 다른 장치와 연결하면 상관없겠지만 PC가 하나뿐인 상태에서는 가상 시리얼 포트 프로그램을 쓰는 것이 좋을 것이다.

Virtual Serial Port Kit 이라는 프로그램이 있다. 유료지만 15일간은 무료로 사용해볼 수 있다.

이 프로그램으로 필자는 COM2-COM3 가상 포트를 만들었다. 그리고 /serialport2 COM2로 옵션을 바꿔서 에뮬레이터를 실행하고, PC에서는 하이퍼터미널 같은 시리얼 통신 프로그램을 사용하여 COM3로 연결하면 된다.

사용자 삽입 이미지

에뮬레이터에 프로그램을 집어넣는 것은 에뮬레이터의 메뉴에 있는 기능중 [Folder Sharing] 기능을 사용하면 된다. 이 기능을 사용하면 로컬 PC의 디렉토리를 선택할 수 있는데, 선택한 디렉토리는 에뮬레이터상에서 이동식 디스크로 인식된다. 이 기능은 에뮬레이터를 껐다 키면 사라지는데, Command-Line Launch의 옵션 중 /sharedfolder 를 사용하면 에뮬레이터 실행시마다 자동으로 지정된다.

사용자 삽입 이미지

로컬 PC의 디렉토리 중에서 eVC++ 4.0에서 "Win32 (WCE emulator) Debug" 로 빌드한 이미지가 있는 디렉토리를 선택한다. 그러면 시리얼 통신을 사용하는 어플리케이션이 매핑된 실제 포트를 통해 제대로 통신이 됨을 확인할 수 있을 것이다.
신고



 

티스토리 툴바