2010/09/14 10:12
넌 뭐땜에 사니.-
2009/11/02 15:38
Tips &.-
Cause)
중기청 차선블랙박스 프로젝트 진행 중 알고리즘을 DSP애 포팅해야한다.
http://focus.ti.com/docs/prod/folders/print/tms320dm355.html
다빈치 DSP위에 현재 PC에서 실험을 하던 코드를 포팅해야한다.
Sruvey)
1. opencv를 bin로 구워서? 말도 안될 일이지않을까..;;
2. kernel이 올라가 있다면?
업체와 얘기해본 결과 montavista linux kernel이 올라간 상태란다. 그럼 좀더 접근이 쉬워질 듯한 느낌..
- ARM9이니까 montavista linux kernel에 맞도록 opencv 를 크로스컴파일(해봐야 알겠지.. 환경구성이 우선..)
- 아직 CPU/DSP의 버스가 활성화되지 않았다기에 포팅만 실험이 가능 할 듯.
2009/11/02 15:30
Tips &.-
Cause)
ETRI에서의 DVB-T2 프로젝트 진행을 위해서 Matlab과 C based 의 포장 형태가 필요.
Survey)
나의 조사 형태에 따른 결과 정리이므로 다소 난잡하고 틀린 내용이 있을 수 있음을 미리 언질한다.
Matlab은 다른 언어와의 의사소통 수단을 다양하게 제공하고 있다. C/C++, Fortran 등 의 언어에서도 matlab의 core module을 사용이 가능하도록 하는 것이다. MEX와 MCC가 그 대표적인 수단을 제공한다.
1. MEX, 기타언너의 모듈을 Matlab에서 사용하는 것.
2. MCC, Matlab의 모듈을 공유라이브러리의 형태로 사용하는 것,
처음엔 MEX로 시작을 했다. http://cnx.org/content/m12348/latest/ 를 통하면
자세한 설명을 찾을 수 있다. 대강 요략하자면 일정한 규칙에 의해서 각 언어간 의사소통을 제공한다는 것.
프로젝트의 형태가 블랙박스 형태인 Matlab의 DVB-T의 모듈로 구성이 되며 그 위에 MFC를 사용한는 것이므로
MCC가 적합한 형태라고 결정하였다.
MCC는 위의 간략한 설명과 같이 Matlab의 모듈을 공유라이브러리로 구성하고 기타 언어에서 사용하는 것이다.
아래부터는 단계별로 정리해본다.
step 0)
Matlab 설치 경로\toolbox\compiler\deploy\win32에 MCRInstaller 설치로 컴파일러를 설치한다.
step 1)
다음의 간단한 Matlab 함수를 작성한다. 정말 단순한 함수이지만 core module이라고 가정하면 꽤나 쏠쏠하다 -_-;
첨에 의도는 2개의 벡터를 받아서 convolution하는 함수로 실험하려 했지만.. 우라질 MFC에서 콜이 복잡하니까 간단하게..
===========================
function y=conv(x)
y=2*x + 1;
figure;
line(x, y);
return
============================
step 2)
console에서
%mbuild -setup 명령어로 Matlab의 컴파일러를 선택한다. (VS6의 MFC를 쓸거니까.. 자기한테 맞도록..)
%mcc -B csharedlib:convlib conv.m 로 공유 라이브러리를 만든다.
(다양한 파일이 생성된다. 생성한 파일을 MFC 프로젝트 에서 사용하면 Matlab 공유라이브러리 생성 과정은 끝)
step 3)
VS MFC에서 프로젝트 생성 후에
VS의 환경을 맞춰줘야지.. Matlab이 설치된 경로에는 header와 library 들이 있으므로 path 설정 필수.
프로젝트에 외부 lib link도 해야지.. mclmcrrt.lib convlib.lib 추가로 간단하게 끝.
step 4)
convlib.h를 사용할 곳에서 include 하고..
mxArray type을 이용해서 데이터 전달 및 모듈 실행 결과 return 받는다.
step 5) 실행결과는 아래와 같다.
대화상자 기반의 버튼 이벤트로 Matlab과 연동하도록 만들어보았다.
위의 그림과 같이 MFC에서 Matlab의 매트릭스연산 및 figure로 데이터를 표시하는 것이 가능하다.
아직 프로젝트 진행 전이라서 이것저것 해보는 중이니까.. 우리얍!!!

