[네이버 지식백과]builder 패턴 (쉽게 배우는 소프트웨어 공학, 2015. 11. 30., 한빛아카데미(주)) Builder 패턴을 공부해 봅시다. 이해하기 좀 어려울 수도 있겠는데요, 각각의 구현은 다르지만 기능은 같은 객체들을 관리하는 관리자를 만드는 패턴입니다. 사용자 즉 main 함수에서는 객체를 만들 뿐 기능을 사용하기 위해 직접 호출하지 않고 관리자를 통해서만 일 처리를 합니다. 이번에는 Key(버튼) 처리하는 기능으로 예제를 만들어 봤습니다. 언제가 꼭 해보고 싶었던 예제인데요, firmware에서는 참 많이 쓰이는 기능입니다. Key 처리 기능은 하드웨어가 바뀌면서 프로젝트마다 바뀔 소지가 있습니다. 단순 1:1 GPIO를 사용할 수도 있고 ADC를 사용할수도 있습니다. 혹은 1:N ..
[네이버 지식백과] facade 패턴 (쉽게 배우는 소프트웨어 공학, 2015. 11. 30., 한빛아카데미(주)) 프로그램 디자인 패턴은 문법이 아닙니다. 따라서 하나의 패턴으로 프로그램 전체를 완성시킬 수는 없습니다. 그리고 완벽하게 룰을 지키는 패턴도 필요없구요. 상황에 따라 여러 패턴들을 조금씩 응용해서 사용할 뿐입니다. 너무 복잡한 패턴은 굳이 쓸 필요가 없습니다. 오히려 유지보수 혹은 한 프로젝트에 다수의 개발자가 존재할 경우 코드를 이해하지 못하는 경우가 발생할 수 있습니다 또한 인수인계 발생시에 왜 이런 패턴을 구현했는지 잘 설명해줘야 합니다. 안그러면 좋은 구조로 잘 설계된 프로그램이 타인에 의해 조금씩 붕괴되는 광경을 목격하실 겁니다. 보통 알고리즘을 사용할 때 복잡한 절차가 있게 마련..
RTOS조차도 없는 Firmware에서는 각각의 기능 프로세스의 처리 시간을 적당히 잘 분배 해야 합니다. 처리 시간이 긴 프로세스는 여러개로 쪼개야 하며, 특히 인터럽트 발생시 인터럽트 루틴에 긴 처리시간을 요구하는 코드를 넣으면 절대 안됩니다. 더욱이 간당간당한 처리시간을 요구한는 코드를 넣는 경우가 더욱 위험합니다. 왜냐하면 어쩔때는 잘 돌아가고 어쩔때는 에러를 발생시키는 경우가 발생할 수도 있으며 이러한 경우에는 디버깅이 상당히 힘들어 집니다.처음부터 아예 인터럽트 루틴에서는 단순히 데이를 적당한 자료구조에 적재해놓던가, 해당 플래크를 set하는 수준 혹은 메시지를 던져주는 수준에서 마무리하는 것이 가장 좋습니다. 만약 전체 시스템이 1초단위로 어떠한 처리가 끝나야 한다면, 각각의 프로세스들이 최..
지금 말씀드리고자 하는 Timer는 MCU의 인터럽트 타이머를 이야기하는 것은 아닙니다. 우리가 PC프로그램에서 익히 알고 있는 Software Timer입니다. 이 Timer는 알람처럼 해당 주기가 되면 자동적으로 callback 함수를 실행시켜 줍니다. 물론 Timer 인터럽트에서 Tick을 증가 시킬수 있도록 도와주어야 합니다. 우선 자주 사용하는 주기를 파악해야 합니다. 최소단위를 10msec으로 보고 10msec 인터럽트에서 등록된 Timer들이 동작하게 끔 꾸며주셔야 합니다. 헤더파일로 전체 윤곽을 잡습니다. 타이머 핸들러의 typedef도 선언되어 있네요. #ifndef SRC_TIMER_H_ #define SRC_TIMER_H_ #define TIMER_MAX_COUNT (10) /*the..
기본적인 OS가 아예없는 Firmware에서 모든 기능은 무한루프와 인터럽트로 이루어져 있습니다. 이번장에서는 기본적으로 무한루프를 어떻게 실행하면 관리가 좋을 지 생각해보도록 하겠습니다. 우선 우리가 알고 있는 기본적인 while 무한루프입니다. 위의 코드는 간단해보이지만 실제적으로는 훨씬 더 복잡해 질 가능성이 있습니다. 만약 설정(#ifdef)에 따른 process 유무가 들어 간다면 더욱 복잡해 집니다. 이제 소개할 scheduler는 RTOS가 없기 때문에 컨텍스트 스위칭인 일어나지 않는 것을 잘 이해해야 합니다. 그리고 순차적으로 프로세싱이 동작합니다. 따라서 하나의 프로세스나 흐름이 너무 많은 시간을 소요하면 지연 문제가 발생 할 수 있습니다. (이상하게도 해당 소스는 에디터에서 이상하게 변..
개발자는 어떤 목적으로 프로그램을 만듭니다. 그 프로그램은 목적을 수행하기 위해 부단히 노력하며 자원을 소모합니다. 목적을 수행하는 프로그램이 다수에 의해 사용되고 사용자들을 그 프로그램에 종속시키고자 한다면 플랫폼을 만들면 됩니다. 플랫폼은 API로 이루어져 있습니다. 결국 가장 상위의 개발자는 플랫폼 위에 API를 사용하면서 자신의 어플리케이션을 그 위에 얹으면 되는 형식으로 개발하게 됩니다. 아래는 이러한 플랫폼을 개발하기 위해서 API를 설계하고자 할 때 자주 사용하는 패턴들입니다. ObserverTemplateWrapperAdapter 플랫폼 개발자는 사용자(상위 개발자)에게 미리 제공하고자 하는 기능의 interface를 구현해야하며, Hook나 Add On을 이벤트를 넣을 수 있도록 아키텍쳐..
Java에서 this, Objective-C에서 self 등등 클래스내에서 사용할 수 있는 예약어 통칭 this는 자기 자신의 클래스를 의미합니다. C언어에서는 this가 없습니다. 왜냐하면 클래스라는게 없으니 당연히 없습니다. 클래스는 메모리 자료형에 멤버함수가 존재하는 하나의 타입입니다. 그 타입으로 새로운 instance를 생성하여 사용하게 됩니다. 물론 C에서는 Java처럼 마구 instace를 찍어만들어 낼 수는 없지만(일일히 멤버함수를 assign 해주어야 함), 여러가지의 노력으로 비슷하게 만들어 낼 수 있습니다. 이러한 this는 참 탐나는 기능인건 확실합니다. C에서는 변수나, 함수의 출처를 찾기가 어렵습니다. 전역변수, 함수인 경우 특히 더합니다. 본인이 작성한 코드는 알 수 있겠지만,..
[네이버 지식백과]iterator 패턴 (쉽게 배우는 소프트웨어 공학, 2015. 11. 30., 한빛아카데미(주)) 설명하기 어려워서 퍼왔습니다. 아무튼 한번 구현해 보도록 하겠습니다. 먼저 중요한 헤더 파일입니다. 보시다 시피 8bit 자료형을 취급하는 iterator입니다. setup_iterator은 커스텀되어있는 자료형과 연결한는 함수입니다. 즉 사용자가 만든 자료형과 인터페이스와 연결하는 부분입니다. C에서는 인터페이스가 없기 때문에 이러한 방법으로 인터페이스 비슷한 것을 구현합니다. 다음 코드에서 인터페이스 비스므레한 것을 만들어 보도록 하겠습니다. 최대 지원되는 iterator은 10개 입니다. 즉 10개의 8bit 자료구조형과 연결될 수 있습니다. 이렇게 C에서는 갯수를 제한해야 합니다...