쉽다고 생각했던 "hello, world" 출력이 생각보다 쉬운 프로그램이 아니라는 것을 알게 되었으므로 임베디드 시스템에서 해볼수 있는 가장 쉬운 프로젝트를 구현해 보도록 하겠다. 그 방법은 다름 아닌 LED를 켰다, 껏다 해보는 것이다. 사실 LED를 제어하는 코드는 단 한줄만으로도 확인할 수 있지만 왜 그렇게 동작이 되는지 확실히 이해하기 위해서는 상당히 많은 지식을 필요로 한다. 이러한 배경 지식은 하루 아침에 습득할 수 있는 내용이 아니므로 프로젝트를 진행해 나가면서 하나씩 하나씩 익혀 나가면 된다. 먼저 LED 제어를 위한 하드웨어부터 구성하도록 하겠다. 아래 그림과 같은 회로를 브레드 보드에 꾸민다. 이번 프로젝트에 사용될 부품은 빨간색 LED 하나와 초록색 LED하나가 필요하다. 물론 LE..
앞의 글에서 개발도구 설치와 더불어 'hello' 프로젝트를 작성하여 성공적으로 빌드하였다면, 이번에는 그 결과로 만들어진 실행 파일을 실제 AVR에서 동작시키는 방법에 대해서 설명하도록 하겠다. 첫번째로 해야 할 일은 하드웨어 준비 글에서 소개한 부품을 이용하여 회로부터 구성하는 것이다. 회로 구성을 위해서는 AVR의 외부로 나오는 핀들에 대한 설명을 보아야 한다. 핀 구성의 상세 내용을 알기 위해서 ATMEL사 홈페이지에서 ATmega328P의 데이터쉬트를 다운로드 받아서 열어 본다. 일단 파일을 다운로드 받았으면 데이터쉬트에 어떤 내용이 들어 있는지 처음부터 끝까지 전체적으로 대충대충 훑어본다. 그래야 나중에 필요한 내용을 빨리빨리 찾아볼 수 있기 때문이다. 데이터쉬트 앞 부분에서 다양한 칩 패키지..
프로젝트 요구사항에 맞는 CPU를 선정했으면, 그 CPU에서 수행되는 실행파일을 만들 수 있는 개발환경을 구축하여야 한다. CPU종류도 다양하게 있지만 개발도구도 CPU마다 여러가지가 있을 수 있다. 많은 자료와 기술 지원을 받을 수 있는 유료 개발 환경도 있을 것이고, 개발자가 필요한 파일들을 인터넷에서 다운로드 받아 스스로 개발환경을 구축해야 하는 무료 도구도 있다. 무료 개발 환경의 경우 프로젝트 개발중에 문제가 발생하면 개발자 스스로가 알아서 문제를 해결해야 되는 고충이 있다. 하드웨어 선정할때와 마찬가지로 개발 환경 구축할 때에도 여러가지 사항을 고려하여 선정하여야 한다. 이 블로그에서 사용하고자 하는 개발 도구는 ATMEL사에서 무료로 제공하는 Atmel Studio를 이용할 것이다. 심화과정..
임베디드 시스템을 개발 한다는 것은 특정 동작만을 수행하는 하드웨어와 소프트웨어를 개발한다는 말과 동일하다. 그러기 위해서는 그 목적에 맞는 최적의 하드웨어를 구성해야 하고 그 하드웨어를 동작시키기 위한 개발 환경을 구축하여야 한다.세상에는 셀수도 없을만큼 많은 종류의 임베디드용 CPU가 있다. 그 중에서 하나를 선택하는 것은 쉽지 않은 일이다. 기능, 성능, 소모전력, 가격, 납기 등등 여러가지 조건을 따져 보고 최종적으로 하나의 CPU를 선정하여야 하기 때문이다.이 블로그에서는 AVR CPU를 통해서 임베디드 시스템의 개념과 프로그램 개발에 필요한 내용을 설명하려고 하기 때문에 이미 어느 정도는 CPU가 정해진거나 다름없다. ATMEL사에서 생산되는 많은 CPU중에서 ATmega128이 가장 대중적으..
C언어를 배울 때 처음으로 작성해 보는 코드는 십중팔구 printf()를 이용하여 화면에 문자를 출력해보는 것으로 시작했을 것이다. 이때 printf() 안에 들어가는 내용은 "hello, world" 아니면 자기 이름이었을 것이다. C언어뿐만 아니라 대부분의 컴퓨터 프로그래밍 언어는 "hello, world"와 같이, 문자를 출력하는 몇줄의 간단한 예제 코드로 설명을 시작한다. 이렇게 간단한 코드를 첫번째 예제로 사용하는 이유는, 작성된 소스코드를 컴파일러가 제대로 해석하여 실행파일을 성공적으로 만드는지, 생성된 실행 파일이 제대로 동작되는지를 빠르고 쉽게 검증해 보고자 하는 것이다. 비록 두 단어를 출력하기 위하여 작성되는 코드는 단 몇줄에 불과하더라도, 작성된 소스코드를 분석하여 프로그래머가 의도한..
알고 있으면 좋은것들 변수는 어디에? 변수는 여기에! 엔디안(Endian) EABI(Embedded Application Binary Interface) random 함수 포인터(Pointer) - 개념 패킷 통신 패킷 통신 - Serial Packet Communication 패킷 통신 - 회로 구성 패킷 통신 - PC 프로그램 패킷 통신 - 바이너리 데이터(Binary data) 패킷 통신 - Start/Stop flag 패킷 통신 - CRC 패킷 통신 - Message ID 패킷 통신 - Request/Reply RTOS Linker Script - 링커 스크립트 crt0 startup.S ISR(Interrupt Service Routine) RTOS - Real Time Operating Sys..
목 차 환경 구축 하기"hello, world" 하드웨어 준비 개발환경 구축 AVR에 실행 파일 다운로드 LED 제어 LED 제어 1 LED 제어 2 LED 제어 3 LED 제어 4 LED 제어 5 LED 제어 6 LED 제어 7 LED 제어 부록 푸쉬 버튼푸쉬 버튼 감지 1 푸쉬 버튼 감지 2 푸쉬 버튼과 LED푸쉬 버튼과 LED제어 연동 1 푸쉬 버튼과 LED제어 연동 2 LED 온도계 LED 온도계 1 LED 온도계 2 LED 온도계 3 UART UART - 원리와 연결UART - 송신UART - 수신UART - sprintf, my_printfUART - stdioUART - "hello, world"UART - 온도계 인터럽트 인터럽트 - 개념인터럽트 - UART인터럽트 - 시작과 끝 타이머 _..