심화 과정 중 crt0에서 설명하였듯이 Reset 상태에서 main() 함수까지 진입하기 전에 처리해 주어야 하는 과정이 필요하다. 이번 글에서는 어셈블 코드로 작성했던 AVR과는 달리 C코드로 crt0 코드를 작성해 보도록 하겠다.vector.c 파일안에 있는 Reset_handler() 함수를 다음과 같이 수정한다. void Reset_handler(void) { extern int main(int, char **); extern unsigned int _etext, _sdata, _edata, _sbss, _ebss; volatile unsigned int *src, *dst; /* Relocate Data section */ for ( src = &_etext, dst = &_sdata; dst ..
프로그램을 개발할 환경이 모두 갖추어 졌으면 본격적으로 프로젝트를 하나씩 만들어 나가도록 하겠다. 이번 글에서는 최초 보드에 전원이 on 되는 시점에 어디에서 어떻게 프로그램이 동작되는지 알아보고, 실제 프로그램을 만들어서 보드에서 동작 시켜 보도록 하겠다.일반적으로 ARM에서는 memory map을 규정하지 않고, 실제 칩을 만드는 반도체 회사에서 칩의 구조에 맞게 memory map을 설정한다.하지만, Cortex-M에 대해서만은 ARM에서 memory map을 한가지 포맷으로 규정하였다.ARMv7-M Architecture Reference Manual과 ARM Cortex-M3 Processor Technical Reference Manual을 읽어 보면 ARM에서 정의한 자세한 memory ma..
하드웨어도 준비되고 개발 환경 설정도 완료되었으면 다음으로 할일은 타겟보드와 프로그래머 장비를 연결시켜 보는 일이다.STM32F103의 경우 두가지 방법으로 실행파일을 보드에 프로그램할 수 있는데 하나는 이미 앞에서 설명한대로 ST-Link/V2라는 장비를 이용해서 가능하고, 또 다른 하나는 UART를 이용한 프로그램 방법이다.먼저 ST-Link/V2를 이용한 프로그램 방법부터 설명 하도록 하겠다.보드와 ST-Link/v2와는 위의 그림과 같이 20핀 케이블을 이용하여 연결한다. 각각 USB 케이블을 이용하여 컴퓨터와 연결한다. STMicroelectronics 홈페이지에서 STM32 ST-LINK Utility라는 프로그램을 검색하여 컴퓨터에 설치한다.STM32 ST-LINK Utility를 실행하면 ..
Cortex-M 기반의 MCU 프로그램을 개발하기 위한 환경은 셀 수없이 많다.특히, ARM사에서는 CMSIS라는 일종의 device driver와 같은 API를 제공하기 때문에 이를 적용한 개발 툴들도 적지 않다.만약 회사에서나 개인이라도 상용 제품을 빠른 시간내에 개발해야 된다는 조건이 있다면 유료 개발 툴을 도입하거나 무료 제품중에서 적당한 툴을 이용하는것이 좋을것이다.그러나 이 블로그는 가급적이면 datasheet 만을 분석하여 직접 하드웨어를 제어하는 코드를 만들어 보는 것이 목적이므로, 하드웨어도 단순할 뿐 아니라 소프트웨어 개발도 오로지 GCC 컴파일러만 사용해서 진행해 볼 예정이다.개발 OS는 Linux를 이용한다. 별도의 Linux가 설치되어 있는 컴퓨터가 없다면 VirtualBox와 같..
앞의 글에서도 얘기했듯이 Cortex-M에 대한 경험이 없기 때문에 어떤 칩을 선정하는 것이 좋을지 전혀 정보가 없다. 그냥 인터넷에서 검색해 본 결과 STMicroelectronics사 제품이 대세인것 같아 보이고, 그 중에서 Cortex-M3 기반의 STM32F103에 대한 내용이 대부분인것 같아 ebay에서 STM32F103R8T6이라는 칩을 구매했다.컨버터 PCB에 위의 칩을 조립해서 다음과 같이 만들었다. 그러나 안타깝게도 아무리해도 프로그래머 장비와 연동이 되지 않아 어쩔수 없이 상용으로 나오는 개발보드를 다시 구매하게 되었다. 역시 경험도 없고 하드웨어 개발자가 아니라 ㅠㅠ...당연히 컴퓨터에서 만들어진 실행파일을 보드에 내리기 위한 프로그래머 장비도 있어야겠다.위의 그림은 ST-link/v..
임베디드 프로그램 개발을 처음 시작하는 이들에게는 AVR이 적당한 MCU라고 생각한다. 그 중에서도 ATmega 계열의 8비트 MCU는 임베디드 시스템에서 사용되는 기본 기능을 이해하고 동작 시켜 확인해보기 위한 최선의 선택이라고 믿는다.하지만, 8비트 MCU라는 구조는 분명한 한계일 수 있고, 실전에서 사용하기에도 여러가지로 불리한 점이 있다.특히 최근에 ARM의 Cortex-M을 적용한 칩들이 AVR과의 가격 경쟁에서도 우위를 점하고 있어 MCU 시장의 대세는 완전히 ARM으로 기울어 졌다고 볼 수 있다.따라서, 임베디드 시스템 개발자라면 반드시 ARM MCU를 다룰줄 알아야 하겠다.원래는 Cortex-M 전용의 블로그를 따로 만들어서 글들을 작성하려고 하였으나, 생각해 보니 쓸만한 내용들이 그리 많..