ARM® CortexTM-M3 프로세서를 기반으로 하는 마이크로컨트롤러 장치는 특별히 여러 태스크를 동시에 진행하는 실시간 애플리케이션을 타겟으로 한다. KeilTM RTX 실시간 커널(Real-Time Kernel)이 Cortex-M3 프로세서 기반 마이크로컨트롤러에 맞게 최적화되었으며, 그 결과 유사한 ARM7TDMI® 프로세서 기반 마이크로컨트롤러 보다 두 배 가량 속도가 개선되었다. 본 글은 Cortex-M3 프로세서 기반 마이크로컨트롤러의 새로운 혜택, RTX 변경사항 및 그 결과를 다루고 있다.
Cortex-M3 마이크로컨트롤러로
마이그레이션: RTOS 관점
자료제공│ARM
실시간 시스템 요건
대부분의 마이크로컨트롤러 기반의 임베디드 시스템은 미리 정해진 제한 시간 내에 외부 이벤트에 반응해야만 하는 실시간 시스템이다. 이러한 특징은 마이크로컨트롤러 기반 임베디드 시스템의 하드웨어는 물론 소프트웨어 설계에 주요 제약요인이 된다.
그림 1. 일반적인 32비트 마이크로컨트롤러 블록선도
32비트 마이크로컨트롤러 성능 및 기능 덕분에 실시간 임베디드 시스템은 종종 단일 마이크로컨트롤러 장치를 가지고 있다. 이는 단위 비용을 낮춰 사이클은 하지만, 단일 애플리케이션이 점점 복잡해지는 많은 수의 주변 장치에 시의 적절하게 응답해야 하기 때문에 소프트웨어 개발자에게는 고민거리가 된다.
실시간 소프트웨어는 실시간 커널이 태스크 스케줄링을 처리하는 가운데 일반적으로 여러 태스크가 동시에 구동되게 구성된다. 실시간 커널이 제공하는 이와 같은 인프라를 이용하여 개발자들은 자신의 소프트웨어 시의 적절성을 쉽게 정의 및 제어 할 수 있다.
이러한 하드웨어에 필요한 핵심 요건은 많은 태스크를 동시에 실행하는 고성능과 외부 이벤트에 신속하게 반응 할 수 있도록 지원하는 낮은 인터럽트 지연이다.
Cortex-M3 프로세서 기반 마이크로컨트롤러가 실시간 시스템에 제공하는 혜택
Cortex-M3 프로세서 기반 마이크로컨트롤러는 오래되었지만 아직도 인기 있는 ARM7TDMI 프로세서보다 성능이 우수하며 인터럽트 지연이 적다.
Cortex-M3 프로세서는 16/32비트 Thumb-2 명령어 세트를 실행한다. Thumb-2명령어 세트에 C/C 코드를 구축하기 때문에 Thumb 기술에 구축하는 것보다 명령어 수가 적어지는 결과가 생긴다. 대부분의 Thumb 및 Thumb-2 명령어가 단일 사이클에서 실행되기 때문에 Cortex-M3마이크로컨트롤러는 적은 사이클에서 동일한 프로그램을 실행할 수 있다.
그림 2. Cortex-M3프로세서 블록선도
또한, ARM7TDMI프로세서는 Thumb -2 기술과 비슷한 성능을 실현하지만 더 큰 코드 크기를 필요로 하는 32비트 ARM 명령어 세트를 지원한다. 단위 비용 제약 때문에 실제로 마이크로컨트롤러 기반 시스템에서는 일반적으로 ARM 명령어를 사용하지 않는다.
프로세서 내에 인터럽트 컨트롤러가 통합되었기 때문에 Cortex-M3 프로세서 기반 마이크로컨트롤러에는 인터럽트 소스 당 인터럽트 벡터 엔트리(interrupt vector entry)와 인터럽트 핸들러(inte-rrupt handler)가 하나씩 있다. 따라서, 인터럽트 지연에 부정적인 영향을 주는 인터럽트 핸들러를 재진입(re-entrant) 할 필요가 없다.
또한, Cortex-M3프로세서는 인터럽트가 도달하면 로직을 통합하여 자동으로 일반 목적과 상태 레지스터를 저장함으로써 인터럽트 핸들러 실행을 가속화 한다. Cortex-M3 프로세서는 그림 3에 제시된 것과 같은 동시에 도달하는 인터럽트를 테일 체이닝 (tail-chaining)하여 효율성이 훨씬 더 뛰어나다.
그림 3. Cortex-M3프로세서의 테일 체이닝
Keil RTX 실시간 커널
RTX 는 ARM7TM 및 ARM9TM 제품군과 Cortex-M3 프로세서 기반 장치의 실시간 커널이다. RTX는 스케줄링, 관리유지 및 타이밍 이슈를 해결하여 실시간으로 프로그램을 만들 수 있도록 지원한다. RTX는 CPU및 메모리와 같이 시스템 리소스를 탄력적으로 스케줄링하고, 태스크 간 통신 방법을 몇 가지 제공한다.
RTX의 주요 장점은 낮은 비용, 적은 코드 크기 및 인터럽트에 대한 반응 시간 예측이 가능하다는 점이다.
RTX는 KeilTM 마이크로컨트롤러 개발 키트 (MDK: Microcontroller Develop-ment Kit)에 완전 통합되어 있다. MDK는 RTX를 로열티 없는 라이브러리(royalty-free library)로 포함하고 있다. Keil실시간 라이브러리(Keil Real-Time Library) (RL-ARM)에서 RTX 소스 코드, TCP/IP, USB 및 CAN의 플래시 파일 시스템과 프로토콜 스택을 이용할 수 있다.
RTX를 사용하여 작성된 실시간 프로그램은 특별 헤더 파일이 포함되고, RTX 라이브러리 링크가 되기만 하면 된다. C함수에 간단하게 __태스크 키워드를 추가하기만 하면 태스크를 만들 수 있다. RTX의 모든 옵션은 단일 C 소스 파일로 구성할 수 있다.
또한, MDK는 상이한 태스크의 현황과 시간 상으로 이 태스크들이 어떻게 스케줄 되었는지 보여주는 다이얼로그(dialogs)가 있는 RTX 디버그 인식 기능을 제공한다.
RTX를 Cortex-M3 프로세서 기반 마이크로컨트롤러로 포팅
기존 RTX C 코드를 Cortex-M3 프로세서 기반 마이크로컨트롤러 상에 재구축하여 구동하면 자동적으로 성능이 개선된다. 새로운 Cortex-M3 프로세서 프로그래머 모델을 예외 사항에 사용할 수 있도록 RTX를 변형함으로써 인터럽트 지연이 개선된다.
인터럽트
ARM7TDMI 프로세서의 경우 RTX상에서 단일 재진입(re-entrant) 인터럽트 핸들러를 시스템의 모든 주변장치가 공유한다. 이러한 특징으로 낮은 우선순위 주변장치의 인터럽트를 처리하는 동안 높은 우선순위의 주변 장치들이 프로세서를 인터럽트 할 수 있다. 그러나, 재진입(re-entrant)인터럽트는 인터럽트 핸들러 입구 및 출구에서 긴 코드 시퀀스를 필요로 하는데 이는 코드 크기, 성능 및 반응 시간 면에서 희생이 많이 따른다.
그림 4. RTX구성
Cortex-M3 프로세서 기반 마이크로컨트롤러의 새로운 인터럽트 구조를 이용할 수 있도록RTX인터럽트 핸들러가 변경되었다. RTX 커널은 단일 인터럽트 소스 코드, 시스템 타이머만 포함하고 있다. 다른 인터럽트를 처리하는 동안 프로세서는 RTX 코드를 전혀 가동하지 않는다.
시스템 콜
RTX 커널은 특권 모드(privileged mode)에 만 있는 리소스에 액세스를 해야 하기 때문에 항상 특권 모드로 구동한다. 그렇기 때문에 커널 콜은 예외를 발생시키는 명령어와 실행되어, 프로세서가 특권 모드에 들어가도록 한다.
그림 4. RTX구성
ARM7TDMI 프로세서 RTX 상에서 콜은 SWI 명령어와 실행되기 때문에 시스템 콜이 처리되는 동안 프로세서는 인터럽트에 반응 할 수가 없다. 인터럽트 지연을 낮은 상태로 유지하기 위해서는 몇 개의 짧은 시스템 콜밖에 실행할 수 없다. 그 결과 일부 커널 기능은 시스템 콜로 운영되지 못하는 상황이 발생하여 이를 처리하기 위해서 ‘데몬(demon)’ 태스크가 필요하다.
그림 5. Keil MDK의 RTX 인식
그림 6. ARM7 및 Cortex-M3프로세서 상의 RTX 인터럽트 처리
Cortex-M3프로세서 RTX 상에서는 모든 시스템 콜이 SVC 명령어와 함께 실행된다. 따라서 프로세서가 SVC 예외 핸들러를 처리하는 동안에도 계속해서 인터럽트를 처리할 수 있다. Cortex-M3프로세서는 외부 이벤트에 대응할 수 있을 뿐만 아니라, 코드 자체가 더 잘 구성되어 있고, 이해하기도 쉽다.
비교: ARM7TDMI와 Cortex-M3프로세서 기반 마이크로컨트롤러 상의 RTX
아래 표는 60MHz에서 ARM7TDMI프로세서 기반 LPC2138마이크로컨트롤러상에서 구동되는RTX와 72MHz에서 Cortex-M3 프로세서 기반 STM32-F103RB마이크로컨트롤러상에서 구동되는 RTX를 비교한 것이다.
첫 비교 부문은 크기에 관한 것이다. Cortex-M3 프로세서 RTX는 예외 프로그래머 모델이 단순하여 0.5키로바이트(Kbytes) 작고, 필요한 RAM도 20바이트가 적다.
다음 비교 부문은 성능이다. 마이크로컨트롤러 클럭 주파수가 STM32F103RB 마이크로컨트롤러 성능 개선의 20 퍼센트를 차지한다. 나머지 성능 개선은 2배 정도로 대부분 프로세서 명령어 세트와 실행에서 기인한 것이다.
ARM7TDMI프로세서 기반 마이크로컨트롤러 경우 재진입 인터럽트 핸들러가 필요하고, 커널이 시스템 콜을 처리하는 동안 인터럽트가 불능화되기 때문에 최대 인터럽트 지연이 높다. Cortex-M3 프로세서 기반 마이크로컨트롤러 경우 인터럽트 지연이 최대 12 사이클에 밖에 되지 않는다.
요약하자면, Cortex-M3 프로세서는 실시간 애플리케이션 개발자들에게 많은 이점을 제공한다. Keil RTX 실시간 커널이 업데이트되어 이러한 이점을 활용 할 수 있게 되었고 이는 빠른 성능, 코드 크기 축소, 외부 이벤트 반응 속도 개선 등의 결과를 가져오게 되었다.