마이크로컨트롤러 HAL(Hardware Abstraction Layer, 하드웨어 추상화 계층)의 교육

왜 마이크로컨트롤러는 프로그래밍하기가 그렇게 어려울까요?

C 프로그래밍은 쉬운데 복잡한 SFR(Special Function Register, 특수 기능 레지스터) 때문이라고 주장할 수 있습니다. 관련 하드웨어가 점점 복잡해짐에 따라 프로그래밍하기가 어렵습니다. 그래서 프로그래머는 하드웨어의 기능을 우선 이해하고 하드웨어를 제어할 필요가 있습니다.

마이크로컨트롤러 하드웨어가 많은 SFR에 의해 제어된다는 것을 생각해 보면, 대다수는 하드웨어에 미세하고 직관적이지 않은 영향을 미칩니다. 예를 들어, ADC(Analog Digital Converter, 아날로그 디지털 변환기)를 사용하려면 프로그래머는 SFR을 기준 전압, 변환 클록, 채널 선택 및 정렬(우측 또는 좌측)로 설정하거나 지워야만 합니다. 숙련된 프로그래머는 ADC 변환이 완료되면 인터럽트를 트리거하도록 SFR을 설정하기도 할 것입니다. 고성능 마이크로컨트롤러의 경우, 프로그래머는 주 CPU와 독립적으로 ADC 결과를 처리하도록 DMA(Direct Memory Access, 직접 메모리 접근) 메커니즘을 설정할 수도 있을 것입니다.

이런 SFR의 복잡성은 규격서의 용량으로 가늠해볼 수 있습니다. 예를 들어, Microchip의 8비트 PIC16F13145T-I/SO를 살펴보겠습니다. 규격서는 604페이지 길이로 46페이지가 ADC 전용 페이지입니다. 하드웨어 사용자 매뉴얼이 2276페이지이며 85페이지가 ADC 전용 페이지인 Renesas의 R7FA6M5BH2CBG#AC0와는 대조적입니다. 확실히, 이 두 예제는 마이크로컨트롤러 스펙트럼의 양 극단에 있습니다. 그러나 요점은 분명합니다. 마이크로컨트롤러의 하드웨어는 복잡합니다. 규격서의 내용이 조밀해서 SFR과 관련된 내용을 놓치기 쉽고, 이로 인해 모듈이 비활성화되거나 성능이 저하될 수 있다는 것을 알고 있습니다. 하드웨어 추상화 계층은 이러한 복잡성을 줄이기 위해 설계되었습니다.

아두이노는 어떻게 이렇게 성공했을까요?

아두이노는 아마도 가장 잘 알려진 마이크로컨트롤러 HAL일 것입니다. 아두이노 언어 참조를 검토하다 보면 디지털 입출력, 아날로그 입출력, 고급 입출력, 시간, 인터럽트 그리고 통신으로 분류된 아두이노 HAL을 발견하게 됩니다. 이러한 잘 알려진 기능들은 프로그램이 기본적인 SFR과 분리되어 있어서 개발 과정을 간소화시킵니다. 또한, 아두이노 HAL 에이전트는 아두이노 제품군 모두를 처리합니다. 따라서, 가장 작은 ATtinyPORTENTA Pro H7 같은 가장 큰 SOM(System On Module, 시스템 온 모듈)을 동일한 기능을 사용하여 프로그래밍할 수 있습니다. HAL의 이러한 교차 호환성과 매력은 산업용 PLC(Programmable Logic Controller, 프로그램 가능 논리 제어 장치)를 포함해 아두이노 산하 이외의 장치에서도 발견됩니다. 아두이노, 라즈베리 파이, 산업용 컨트롤러 간의 경계가 프로그램을 단순화하고 개발 시간을 단축하려는 경향에 따라 모호해지고 있음을 발견할 수 있을 것입니다.

기술 조언: ATtiny와 RA6M5는 아두이노 HAL 구현에 있어서의 공통성을 보여줍니다. 또한 한계도 보여줍니다. ATtiny는 “일반적인” 아두이노보다 한 단계 아래입니다. 예를 들어, ATtiny에 직렬 또는 SPI 인터페이스를 구동하기 위해 필요한 하드웨어가 없을 수도 있으며, 이러한 기능을 구현하기 위해서는 소프트웨어 기법이 필요할 것입니다. 반면, 강력한 RA6M5는 “일반적인” 아두이노보다 상당히 많은 하드웨어와 기능을 갖추고 있습니다. PORTENTA C33의 PWM 기능 중 일부를 활성화하는 이 게시글이 예시입니다.

핵심 메시지는 프로그래머가 해당 마이크로컨트롤러의 하드웨어와 기능을 잘 이해하고 주의 깊게 살펴봐야 하지만, 반드시 SFR 수준까지 알 필요는 없다는 것입니다. 이는 또한 모든 엔지니어, 전문가 및 기술자는 적어도 하나의 마이크로컨트롤러를 SFR 수준에서 깊이 탐구해야 한다는 교육의 방향을 제시합니다. 하나의 마이크로컨트롤러에 대해 깊이 이해한다면 모든 마이크로컨트롤러에 대해 더 잘 이해할 수 있을 것입니다. 이 게시글에서 저는 마이크로컨트롤러 스펙트럼의 다소 하위에 있는 8051, MSP430, Z8, AVR 그리고 PIC와 같은 고전적 소자의 사용을 권장하고 있습니다.

마이크로컨트롤러 소프트웨어 개발은 어떠한 경향을 보이나요?

의심할 여지 없이 HAL이 급증하는 것을 볼 수 있습니다. 이는 MPLABSimplicity Studio에 포함된 그래픽적으로 하드웨어를 설정하는 기능의 형태를 띨 수도 있습니다. 아두이노와 아두이노 같은 도구는 계속 사용될 것입니다. ST마이크로일렉트로닉스 STM32 소자의 경우 이런 포괄적인 문서와 같은 HAL 및 로우 레벨 드라이버가 있습니다. ST마이크로의 문서는 HAL을 구성하는 방법에는 여러 가지가 있다는 것을 보여줍니다. STM32는 SFR에 가깝습니다. 개인적으로, 이 문서를 해당 STM32 프로세서의 규격서와 함께 탐구하는 것이 도움이 된다고 생각합니다. 해당 마이크로컨트롤러를 성능이 더 뛰어난 소자로 교체하더라도 코드는 여전히 유효하다는 것을 이해해야 합니다.

기술 조언: 교육과 관련해서는, 학습자와 전문가의 차이를 이해할 필요가 있습니다. 학습자에게 전문가와 동일한 도구를 사용하도록 가르치려는 유혹이 강합니다. 현재도 그리고 미래도, 도구를 신뢰할 수 있고 개발 시간을 단축시키기 때문에 HAL이 지배적일 것입니다. 동시에, 전문가들이 처음에 어떻게 전문가가 되었는지 물어볼 필요가 있습니다. 모든 마이크로컨트롤러 전문가는 적어도 하나의 마이크로컨트롤러에 대해 깊이 이해하고 있을 가능성이 높습니다. 하나의 잘못된 SFR 문제를 해결하느라 보낸 긴 밤과 새벽 3시에 마침내 문제를 발견한 짜릿함에 대한 이야기를 들려줄 것입니다.

결론

교육에 대한 균형 잡힌 접근이 필요합니다. 아마도 이것이 HAL 전용 접근 방식에 대해 강하게 찬성 또는 반대하는 교수들을 만나게 되는 이유일 것입니다. 양쪽 모두 너무 극단으로 치우쳐 필요한 것을 놓치고 학습자와 전문가 사이의 전환도 비선형적이 됩니다.

감사합니다,

APDahlen

연관된 아두이노 교육 콘텐츠는 이 링크를 참조해 주시기 바랍니다.

저자 정보

미합중국 해안경비대(USCG) 소령(LCDR)으로 전역한 Aaron Dahlen은 DigiKey에서 애플리케이션 엔지니어로 근무하고 있습니다. 27년간의 군 복무 동안 기술자 및 엔지니어로서 쌓아온 그 만의 전자 및 자동화에 대한 지식은 12년간의 교단을 통해 (상호 연계되어) 더욱 향상되었습니다. 미네소타 주립대학, Mankato에서 전기공학 석사(MSEE) 학위를 받은 Dahlen은 ABET(Accreditation Board for Engineering and Technology, 미국 공학 기술 인증 위원회) 공인 전기공학 과정을 가르치고, EET(Electrical Engineering Technology, 전기공학 기술) 과정의 프로그램 조정관으로 일했으며, 군 전자 기술자에게 부품 수준의 수리에 대해 가르쳤습니다. 미네소타 주 북부의 집으로 돌아와 이런 류의 연구와 글쓰기를 즐기고 있습니다. LinkedIn | Aaron Dahlen - Application Engineer - DigiKey



영문 원본: Microcontroller Hardware Abstraction Layer (HAL) in Education