하드웨어 추상화 계층이 프로젝트를 변화시킬 수 있는 5가지 방법
베냉의 야곱 | 2023년 6월 5일
임베디드 소프트웨어 개발자는 일반적으로 HAL(하드웨어 추상화 계층)이 성능을 저하시키고 코드 복잡성을 증가시킨다고 주장하여 이를 피해 왔습니다. 불행하게도 개발자가 HAL을 채택할 때 공급업체에서 제공하는 HAL은 하드웨어를 추상화하지 않고 여전히 하드웨어와의 긴밀한 결합을 보장하는 경우가 많습니다. 결국, 실제 추상화된 HAL을 사용하면 개발자는 즉시 모든 공급업체를 사용할 수 있습니다. 그러나 자체 HAL을 사용하거나 개발하면 소프트웨어에 영향을 미칠 수 있는 방법은 여러 가지가 있습니다. 이 게시물에서는 HAL이 소프트웨어 프로젝트를 변화시키고 가능하다고는 생각하지 못했던 속도와 가치를 실현할 수 있는 5가지 놀라운 방법을 살펴보겠습니다.
나는 일반적으로 개발자들이 선호하는 마이크로 컨트롤러 공급업체를 갖고 있다는 사실을 발견했습니다. 일반적으로 임베디드 소프트웨어를 처음 작성했거나 친숙한 공급업체입니다. 다른 사람들과 마찬가지로 나도 즐겨찾는 것이 있지만 HAL이나 소프트웨어 라이브러리에 의존하여 소프트웨어를 작성하는 것은 위험할 수 있습니다. 예를 들어, 갑자기 마이크로컨트롤러를 구할 수 없다면 어떻게 하시겠습니까? 새로운 공급업체를 선택한 다음 제품을 다시 작성하고 테스트하고 인증해야 할 수도 있습니다. 그것은 빠르지도 저렴하지도 않습니다! 이것이 일어날 가능성이 없다고 생각할 수도 있지만, 코로나19 기간과 이전에도 여러 번 이런 일이 일어났습니다.
좋은 HAL을 사용하면 하드웨어 독립적이며 이식 가능하고 재사용 가능한 애플리케이션 코드를 작성할 수 있습니다. 이는 많은 임베디드 팀에게 엄청난 변화입니다. 예를 들어 공급업체 A를 사용하여 코드를 실행하고 빌드에서 플래그를 변경하여 공급업체 B에 대해 컴파일할 수 있습니다. 하드웨어 독립성은 원하는 하드웨어를 사용할 수 있는 유연성을 제공하고 마이크로 컨트롤러 공급업체에 대한 의존성을 제거합니다.
공급업체에서 제공하는 HAL을 사용하는 아이디어가 마음에 든다면 몇 가지 필수 기능을 검토했다면 괜찮습니다. 첫째, HAL은 실제 HAL이어야 합니다. 이는 하드웨어 종속성을 깨는 정의된 인터페이스가 있어야 함을 의미합니다. 우리는 "C로 HAL(하드웨어 추상화 계층) 작성"이라는 제목의 내 블로그에서 이에 대해 논의했습니다. 나는 종종 구현과 관련된 기능에 지나지 않는 "HAL"을 봅니다. 이는 종속성 반전 원칙을 따르지 않으며 코드를 업데이트하는 것도 어렵습니다. 다음으로 HAL은 구현과 별도로 정의되어야 합니다. 마지막으로 인터페이스에서 호출되는 함수를 빠르게 교체할 수 있어야 합니다. 이 세 가지가 없으면 하드웨어 독립성이 없습니다. 하드웨어 의존성이 있습니다!
가치를 창출하고 소프트웨어 개발을 혁신하는 열쇠는 HAL을 사용하는 것에서 시작됩니다. HAL은 자동화된 단위 및 통합 테스트와 같은 추가적인 변환도 가능하게 합니다. 임베디드 개발자는 하드웨어에 닿는 코드를 작성하기 때문에 단위 테스트에 어려움을 겪는 경우가 많습니다. 이는 마이크로컨트롤러에서 테스트를 실행해야 함을 의미합니다. 적절한 HAL이 설치되어 있으면 대상에서 드라이버를 테스트해야 하지만 모든 애플리케이션 코드가 갑자기 해제됩니다! 이제 애플리케이션 코드를 하드웨어와 독립적인 호스트 시스템에서 단위 및 통합 테스트할 수 있습니다.
방정식에서 하드웨어를 제거하고 테스트를 호스트로 이동하면 개발자에게 이익이 됩니다. 첫째, 더 빠릅니다. 해당 부분의 느린 지우기 및 쓰기 주기에 대해 걱정할 필요가 없습니다. 둘째, 테스트 하네스의 규모나 테스트 횟수에 대해 걱정할 필요가 없습니다. 코드를 맞추고 마이크로 컨트롤러에 테스트하는 대신 먼저 호스트의 모든 애플리케이션 코드를 테스트하면 됩니다. 다음으로, 대상 외 테스트로 전환하면 지속적인 통합을 활용하고 원하는 경우 지속적인 배포도 활용할 수 있습니다. 그 결과 버그를 더 빠르고 빠르게 찾아내고, 비용을 절감하고, 품질을 향상시킬 수 있습니다.
좋은 HAL을 사용하여 방정식에서 하드웨어를 꺼내면 그 뒤에 어떤 구현이든 넣을 수 있습니다. 즉, 대상, 테스트 하네스 및 시뮬레이션 환경을 구현할 수 있습니다! 많은 경우, 임베디드 소프트웨어 개발자는 하드웨어가 출시되기 전에 소프트웨어 작성을 시작해야 합니다. 따라서 개발 보드를 사용하여 시작할 수 있지만 좋은 HAL을 사용하면 대신 애플리케이션 코드에서 시뮬레이션을 실행할 수 있습니다!