자바와 스프링 프레임워크에 대해 공부를 하면서 펌웨어 개발에 대한 한계를 많이 느낀다. 나의 경험과 실력이 부족한 탓도 있겠지만, 객관적으로 바라봤을 때 펌웨어 개발 환경 자체의 한계가 분명히 존재하는 것 같다. 펌웨어 개발자로써 이러한 문제점들을 파헤쳐보고, 어떻게 하면 펌웨어 개발 환경을 개선시킬 수 있을지 고민해본다.

Hardware Barrier in Firmware Testing

펌웨어는 테스트를 자동화하기 어렵다.

펌웨어는 하드웨어와의 접점에 있는 소프트웨어다. 기본적으로 하드웨어 디바이스에 탑제되어 버튼, LED 등을 통해 외부 물리적인 공간과 소통한다. 그렇기 때문에 버튼이 눌러지는 것을 펌웨어 쪽 코드가 정상적으로 인지하는지 확인해보기 위해선 실제로 펌웨어를 디바이스에 올린 후 버튼을 눌러봐야 한다. 이런 물리적 공간에서 어느정도의 테스트 자동화를 이루기 위해선 jig라는 도구를 만들어 사용해야 한다.

Mocking

하드웨어 쪽에서 물리적으로나 회로적으로 결함이 없다고 가정할 때 버튼 눌림을 mocking해서 테스트를 만들어 볼 수는 있겠다. 하지만 output 결과를 보여줘야 하는 코드에 대한 테스트는 mocking하기가 어렵다. 예를 들어 고주파 전기자극을 보내는 디바이스의 펌웨어를 개발한다고 해보자. 펌웨어는 특정 주파수로 파형의 전기자극을 외부로 흘러보내야 한다. 이 때 이것을 mocking하여 원하는 파형이 제대로 나오는지를 테스트 하는 것은 쉽지 않다. 실제 전류가 잘 흐르는지를 측정하기 위해서는 몇천만원 하는 오실로스코프를 자극 부위에 연결해서 확인해 봐야 한다.

하드웨어의 성능

내가 주로 사용하고 있는 MCU는 nRF52832로 성능은 64 MHz 이다.

C언어의 한계

Lack of Online Resources in Firmware World

펌웨어의 세계는 좁은 것 같다. 온라인으로 내가 직면한 이슈에 대한 정보를 찾기가 쉽지 않다.

열악한 IDE 환경

기존

불편한점