안녕하세요.

이번 시간은 Cortex-M3 프로그래밍에 대해 설명 하겠습니다.

 

1. 어셈블리 사용하기


작은 프로젝트에서는 어셈블리어를 사용하여 모든 어플리케이션을 개발하는 것이 가능합니다.
어셈블러를 사용하는 경우에는 원하는 대로 최선의 최적화를 하는 것이 가능합니다. 하지만 이것을 이용하면, 개발시간이

길어지고 실수를 하기 쉽습니다. 게다가 복잡한 테이터 구조나 함수 라이브러리를 관리하는 것은 어셈블리에서 매우 어려운

작업이 될 수있습니다. 하지만 프로젝트에서 C 언어가 사용될 때조차도, 많은 경우 프로그램의 일부는 어셈블리어로 구현됩니다.

  • 특별한 레지트터 접근이나 배타적 접근과 같이, C로 구현될 수 없는 함수들
  • 시간에 크리티컬한 루틴들
  • 가장 작은 메모리 크기를 얻기 위해서 프로그램의 일부가 어셈블리로 쓰여지도록 강요되는 타이트한 메모리 요구사항

2. C 사용하기


C는 어셈블리 언어에 비해 이식에 대한 장점과 복잡한 연산을 구현하기가 더 쉽다는 장점을 가지고 있습니다. 이것은 기본적인

컴퓨터 언어이기 때문에, C는 프로세서가 어떻게 초기화되어야 하는가를 규정하고 있지는 않습니다.

이것은 툴 체인마다 다른 접근 방법을 갖습니다. 시작을 하는 가장 좋은 방법은 예제 코드를 살펴보는 것입니다.
C 언어의 사용은 종종 어플리케이션 개발을 빠르게 해줄 수 있지만, 대다수의 경우 하위 레벨 시스템 제어에서 여전히 어셈블리어를 필요로 할 것입니다. 대부분의 ARM C 컴파일러는 인라인 어셈블러라고 불리는 어셈블리 코드를 포함할 수 있도록 해줍니다.
이 코드는 종종 많은 프로젝트를 위해 필요합니다.
ARM 컴파일러에서, C 프로그램 내에 어셈블리 코드를 추가할 수 있습니다. 전통적으로 인라인 어셈블러가 사용되지만

RealView C, 컴파일러 버전 3.0에서는 임베디드 어셈블러라고 불리는 새로운 특징이 포함되어 있습니다.

이것은 Thumb-2 명령어를 지원합니다.


3. 전형적인 개발 흐름

 

Cortex-M3 어플리케이션을 개발하기 위해서는 다양한 소프트웨어 프로그램들이 사용됩니다.
이러한 툴들에 대한 코드 생성 흐름에 관한 개념은 유사합니다. 대부분의 기본적인 사용을 기준으로 할 때 어셈블러,

C 컴파일러, 링커, 바이너리 파일 생성 유틸리티를 필요로 할 것입니다.

ARM 솔류션으로 ReaalView Development Suite 또는 RealView Compiler Tools를 나타냅니다.
스캐터-로딩 스크립트는 옵션 사항으로 메모리 매우 복잡한 경우에 종종 요구됩니다.

 

4. 출력물 생성하기

 

마이크로컨트롤러를 바깥세상과 연결하는 것은 항상 즐거운 일입니다.
이와 같이 하는 가장 간단한 방법은 LED를 켜고/끄는 것입니다. 하지만 이 작업은 상당히 제한적입니다.
왜냐하면, 이것은 매우 제한적인 정보만을 표현하기 때문입니다. 가장 일반적인 출력방식 중 하나는 콘솔로 문자 메시지를 보내는 것입니다. 임베디드 제품 개발시, 이 작업은 종종 PC에 연결되어 있는 UART 인터페이스에 의해 수행됩니다.
Cortex-M3 프로세서는 UART 인터페이스를 포함하고 있지 않지만 대부분의 COrtex-M3 마이크로컨트롤러는 칩 제조사에 의해
제공되는 UART를 가지고 있습니다. UART의 규격은 다양한 소자에 따라 다를 수 있습니다.
UART는 문자 메시지를 출력하기 위한 유일한 솔류션은 아닙니다. Cortex-M3 프로세서에는 디버깅 메시지 출력을 돕기 위한

많은 특징들이 구현되어 있습니다.

 

  • 세미호스팅: 디버거와 코드 라이브러리 지원에 따라, 세미호스팅은 NVIC안에 있는 디버그 레지스터를 통해 수행될 수 있습니다.
  • 인스트루먼트 트레이스: COrtex-M3 마이크로컨트롤러가 트레이스 포트를 제공하고, 외부의 트레이스 포트 분석기가 사용 가능하다면, 메시지 출력을 위해 UART를 사용하는 대신, 인스트루먼트 트레이스 모듈을 사용할 수 있습니다.
    트레이스 포트는 UART보다 훨씬 더 빠르게 동작하며, 더 많은 데이터 채널을 제공할 수 있습니다.
  • 시리얼 화이어 뷰어를 통한 인스트루먼트 트레이스: 대안으로서, Cortex-M3 프로세서는 트레이스 포트 인터페이스 장치에 시리얼 와이어 뷰어 동작 모드를 제공하고 있습니다. 이 인터페이스는 TPA 대신 저가 하드웨어를 사용하여 ITM으로부터 출력물이 캡쳐될 수 있도록 해줍니다. 하지만, SWV모드에서 제공되는 대역폭이 제한되어 있어서 많은 양의 데이터를 위해서는 적합하지 않습니다.