1. typedef 는 데이터형을 만드는 명령어 입니다. C패턴을 이용하려면 반드시 알아야 합니다. 간단하게 다음과 같이 사용할 수 있습니다. typedef unsigned char u8; u8 i = 0; //unsinged char i = 0과 동일 2. 콜백 함수도 typedef를 이용해서 만들 수 있습니다. typedef void (*timer_handler)(s8 timer_id, u32 param1); s8 register_timer(u32 period, timer_handler handler) { ... } 3. firmware 개발시 8bit, 16bit, 32bit MCU를 개발하다 보면 애초에 형 지정을 잘못해서 모든 소스를 뒤져 수정한 경험이 있으실 지도 모르겠습니다. 특히 int, ..
Enum(열거형)은 변수가 아니라 값의 정의입니다. typedef를 해서 사용하면 편리합니다. 우선 #define과 비교하자면, #define zero 0 i = zero; 여기에서 i 에는 0이 할당됩니다. zero가 0으로 치환 됩니다. 말 그대로 문자 바꾸기를 컴파일러에서 해주는 것에 불과합니다. enum과 typedef를 같이 사용해 봅시다. typedef enum { RED, GREEN, PUCE }colors_t; colors_t favorite = PUCE; C언어에는 없는 bool type을 만들 어서 다음과 같이 사용 할 수도 있습니다. typedef enum { false=0, true=1 }bool; bool isTrue = false; 위와 같이 사용하면 false는 0, true는..
프로그램 런타임시에 발생하거나 발생가능한 에러상황을 미리 예견할 수 있다면 얼마나 해피할까요? 이러한 냄새를 100% 맡을 수는 없지만, 적절한 기법을 사용하면 에러 확율을 줄일 수 있습니다.그 기법에 중에 하나가 assertion입니다.일반적으로 변수나 포인터에 원치 않는 값이 들어가도 이상없이 실행이 되거나, 혹은 hard fault가 발생됩니다. 이런 상황이 되면 어디에서 에러가 발생한 줄 모르거나 아예 발생한 줄을 모르는 경우가 생길 수도 있습니다.이럴경우를 대비해서 기본적으로 다음과 같이 코딩을 할 수 있다. 물론 언어나 컴파일 환경에 따른 차이가 존재합니다. void main(void) { Register(NULL); } void Register(Handler handler) { assert(..
[네이버 지식백과]template method 패턴 (쉽게 배우는 소프트웨어 공학, 2015. 11. 30., 한빛아카데미(주)) 템플릿 메소드 패턴도 유용한 패턴입니다. 기능은 같으나 구현방법이 다른 메소드들의 구조를 제시하고 기능과 구현방법이 같은 메소드는 대표로 하나만 제시하는 방법입니다. 예를 들어 도형을 그리는 것을 생각해보도록 하겠습니다. 도형에는 삼각형, 사각형, 원 등이 있습니다. 넓이와 높이(원의 경우 지름)을 통해 도형을 설정하는 것은 모두 똑같습니다. 그러나 구체적으로 모양은 다르지요. 이러한 도형을 그릴때는 메모리라는 사상위에 비트를 역상시켜 해당 도형을 그리는 방법은 어느 이미지든 동일합니다. 따라서 도형의 모양을 만드는 기능은 개별 구현이 가능하도록 추상메소드로 하고 그리는 부분..
[네이버 지식백과] strategy 패턴 (쉽게 배우는 소프트웨어 공학, 2015. 11. 30., 한빛아카데미(주)) 스트레티지 패턴은 아주 단순하면서도 여러가지 패턴중에 가장 유용한 패턴입니다. 사용법은 아주 간단합니다. 우선 interface를 만들고 원한는 때에 콘크리트 코드를 치환해서 사용하면 됩니다. 적절한 예제일지는 모르지만, 특정한 상황에서 uart를 spi로 변경하는 드라이버 예제를 보도록 하겠습니다. 먼저 interface를 구현해보도록 하겠습니다. open, close, read, write 네가지를 만들었습니다. 필요하면 더 만들어도 되구요. read, write에는 addr 파라메타가 있는데, 혹시 메모리 접근시에 필요할 지도 몰라 넣었습니다. 물론 필요없으면 구현시에 사용하지 않..
[네이버 지식백과]observer 패턴 (쉽게 배우는 소프트웨어 공학, 2015. 11. 30., 한빛아카데미(주))Observer 패턴은 정말 많이 사용하는 패턴입니다. 자바 프레임워크에서도 쉽게 찾을 수 있습니다. 우리가 흔히 쓰는 Java C#에서 Event Listener 들이 이 종류에 속하지요.Observer pattern을 예제를 위해서는 observer_t: 관찰자 Structure calculate_temperature : 온도를 측정하는 루틴 display_degree_handler : 화면에 측정된 온도를 표시하는 루틴 file_write_degree_handler : 파일에 측정된 온도를 표시하는 루틴 우선 헤더를 보겠습니다.observer_handler_t 가 바로 관찰자 콜백함수..
[네이버 지식백과]state 패턴 (쉽게 배우는 소프트웨어 공학, 2015. 11. 30., 한빛아카데미(주)) 스테이트 패턴은 좀 헷갈리는 부분이 있습니다. 대부분의 패턴은 if 문과 같이 버그를 유지보수나 버그를 양산하기 쉬운 코드를 없애고 확장하기 쉽게 하도록 구조를 가져갑니다. 이중 스테이트 패턴은 각 상태가 바뀔 때 마다 늘어나는 if문을 없애는 패턴입니다. 즉 상태들 끼리 서로의 상태를 바꿔가며 동작하기 때문에 유지보수도 쉽고 확장도 용이합니다. 그러나 상태변화에 대한 명확한 이해와 구조를 어떻게 가져가야 할지에 대한 고민이 필요합니다. 다소 생소하게 보일지 모르지만 한번 구현해 보도록 하겠습니다.예제는 아주 단순한 불을 끄고 켜고하는 기능을 스테이트 패턴으로 구현해 보았습니다. 실제로 구동해..
과연 C로 Class를 만들 수 있을까요? 완벽한 Class를 만들 수는 없지만, 비슷하게 만들 수 있으며 Class와 동일한 역할을 하게 할 수 있습니다. C에서 typedef와 structure 그리고 함수 포인터를 이용하면 class를 따라서 만들 수 있습니다. 여기서 왜 C로 그런 뻘짓을 하냐고 물어보신다면, 이번 챕터에서는 딱히 할말이 생각나지 않습니다. 하지만 분명한 것은 그 뻘짓은 자바를 이해하는데 도움을 주기도 하고 좀 더 효율적은 C프로그램을 가능하게 합니다. 여기서의 예제는 극단적인 C Class입니다. 실제로 이렇게 사용한는 예는 정신이 나간 프로그래머 이외에는 없을 것입니다. 그냥 이렇게 있구나 정도만 이해했으면 좋겠습니다. 이미 알고 있거나 더 좋은 방법이 있다며 댓글을 남겨주세요..