[네이버 지식백과] 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가 없기 때문에 컨텍스트 스위칭인 일어나지 않는 것을 잘 이해해야 합니다. 그리고 순차적으로 프로세싱이 동작합니다. 따라서 하나의 프로세스나 흐름이 너무 많은 시간을 소요하면 지연 문제가 발생 할 수 있습니다. (이상하게도 해당 소스는 에디터에서 이상하게 변..
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에서는 갯수를 제한해야 합니다...
극단적으로 Java에서 객체지향, 패턴, Interface을 빼놓고는 다면 Java는 아무것도 아닙니다. Interface를 사용해야 언제든지 교체가능한 모듈형태의 프로그래밍을 할 수 있습니다. Interface의 필요성에 대해서는 다른 곳에도 많이 나와 있기때문에 따로 설명하지 않겠습니다. C언어로 Interface를 만들어 보겠습니다. 이번에 만들 Interface는 UART입니다. UART는 MCU와 Device와의 커뮤니케이션 도구로 많이 사용합니다. 예를 들면 GPS Module, RS232를 통한 PC와의 통신 등등에서 사용되므로 Interface를 설명하기에 적합합니다. typedef struct { InitFunction Init; OpenFunction Open; TxHandlerFunc..
[네이버 지식백과]singleton 패턴 (쉽게 배우는 소프트웨어 공학, 2015. 11. 30., 한빛아카데미(주)) 프로그램 전체적으로 한개의 자원을 사용하는 경우 적용할 수 있는 Singleton. 예를 들면 GPS, G sensor, 온도센서와 같은 모듈은 보통 한개의 제품에 한개씩 들어있습니다. 각각의 모듈을 초기화하고 사용하는 C Class를 만든다면 다음과 같이 Singleton을 활용할 수 있습니다. #define null (void *)0 typedef struct { InitFunction init; OpenFunction open; ConnetFunction connection; //... (필요시 추가) }Device; Device *getGpsInstance() { static D..