요즘 내가 하고 있는 일은 유종의 미를 거두고 원할한 인수인계를 위해 내가 개발한 VICODE의 사용자, 개발자 메뉴얼을 작성하는 것이다. 간단한 예제에 대하여 개발하는 과정을 직접 따라가며 메뉴얼을 작성하던 중 사진 아래에 보이는 임베디드 보드를 활용하여 실제로 시스템을 구현하는 단계에 이르렀다.
VICODE의 핵심기능 중 하나는 임베디드 리눅스에서 돌아가는 소프트웨어와 임베드드 보드에 붙어 있는 FPGA의 하드웨어간의 인터페이스를 자동으로 생성하는 것이다. 하드웨어와 소프트웨어 사이의 연결통로를 자동으로 생성해주어 소프트웨어는 라이브러리를 사용하듯 API를 호출하여 하드웨어와 통신할 수 있도록 하는 것이다.
원하는 시나리오는 다음과 같다. 소프트웨어가 A()라는 함수를 호출하고 B()라는 함수를 호출하면 LED 1번에 찬란하게 빛이 들어와야 한다. 그러나 결과는 깜깜 무소식! 순간 내 머리속을 스치는 단어는 “리콜”. (석사학위논문은 지도교수가 6개월안에 취소할 수 있는데 우리는 이를 흔히 “리콜”이라고 부른다.) 순간 마음이 분주해졌다. 소프트웨어 버그였다면 비교적 금방 찾겠지만 소프트웨어와 하드웨어사이의 통신은 몇 단계를 거치기 때문에 무엇이 문제인지 찾기 힘들다. 결국 묵혀둔 연구노트를 펼쳐 원인을 발견하고 문제해결에 성공. 희망의 LED가 찬란하게 빛났다.
아직 연구실에서 해야할 일이 많지만 내가 원해서 하는 일이기에 즐겁게 하고 있다. VICODE를 이어서 개발하게 될 재호형이나 올해 연구실에 들어올 석사신입생들의 시행착오를 조금이라도 줄여줄 수 있다고 생각하니 뿌듯한 마음이 든다. 떠나는 뒷모습이 아름답도록(?) 남은 기간 내게 주어진 일들을 즐겁게 매듭짓자!
와 개발보드 죽인다.. 엑수스케일인가..?
네. 맞아요. 거의 작은 컴퓨터나 다름 없는 것 같아요.
하아, 생각해보니 이번 수중로봇 URP하면서 임베디드 프로그래밍을 해야 되지 않을까 싶은데 디버깅을 어떻게 할지 난감하군요. -_-; VICODE가 도움이 될 수 있으려나.. (….)
뭐, 소스레벨 호환이 되는 시뮬레이션 프로그램이 있으니 다행이랄까요.; (하지만 하드웨어 문제라면 낭패..)
VICODE는 전혀 도움이 안될꺼에요. 디버깅 기능은 전혀 없거든요. 그리고 워낙 개발 환경이 한정적이기도 하구요. ^^;
하드웨어 디버깅 역시 소프트웨어 디버깅과 마찬가지로 논리를 가지고 접근해야 할 것 같고, 거기에 인내를 추가해야할 것 같네요. 수행하는 마음으로.
나도 오늘 플젝하다가 리콜에 대한 두려움에 살포시 떨었다…
설마 그런 일이 있을까요.