지난 시간에 이어 display - driver를 잇는 adapter 부분을 구현해 보도록 하겠습니다. 궁극적으로는 아래와 같은 구조가 될 것입니다. display → adapter → driver 결국 adapter 패턴이 있어 display도 다른 driver처럼 사용할 수 있게 됩니다. 먼저 adapter의 header(interface) 부터 살펴 보도록 하겠습니다. extern driver_t *setup_display_adapter(void); setup_display_adapter을 extern으로 선언해줍니다. setup_display_adapter를 호출하면 driver_t의 포인터를 전달해 주도록 되어있습니다. 헤더를 선언할 때 아래와 같은 코드가 많이 나오는데요, 혹시 모르시는 분들..
지난 시간에 이어 계속해서 Adapter 패턴에 대해 알아보겠습니다. 지난 시간에는 Adapter가 필요한 콘크리트 코드에 대해 살펴봤고 이번 시간에는 실제적으로 콘크리트 코드가 interface 화 될 실제 driver interface를 살펴 보도록 하겠습니다. 궁극적으로 Adapter 패턴은 기존의 콘크리트 코드가 새로운 interface에 맞지 않아 중간에 Adapter를 끼워넣어 맞추는 역할을 하게 됩니다. 이번 시간에는 그중에 새로운 interface에 대해 살펴보겠습니다. typedef enum { DRIVER_ID_UART1, DRIVER_ID_UART2, DRIVER_ID_DISPLAY, DRIVER_MAX, }driver_id_t; typedef struct { driver_id_t i..
Observer 패턴은 정말 많이 사용하는 디자인 패턴입니다. 자바 프레임워크에서도 쉽게 찾아 볼 수 있는데 흔히 Java C#에서 사용되는 Event Listener 들이 이 종류에 속합니다. 이번 장에서 만들 Observer pattern 예제에는 아래의 요소가 필요합니다. observer_t : 관찰자 구조체 calculate_temperature : 온도 측정 실행함수 display_degree_handler : 화면에 측정된 온도를 표시하는 함수 file_write_degree_handler : 파일에 측정된 온도를 기록하는 함수 우선 헤더를 보겠습니다. /* header.h */ typedef void (*observer_handler_t)(uint32_t degree, uint32_t par..
지난시간에 이어 display - driver를 잇는 adapter 부분을 구현해 보도록 하겠습니다. 궁극적으로는 아래와 같은 구조가 되겠네요. display - adapter - driver 다 구현하면 중간에 adapter가 있어 display도 다른 driver처럼 사용할 수 있게 됩니다. 먼저 adapter의 header(interface) 부터 살펴 보도록 하겠습니다. setup_display_adapter을 선언하는 것이 전부입니다. setup_display_adapter를 호출하면 driver_t의 포인터를 전달해 주도록 되어있습니다. 아참 아래와 같은 코드가 많이 나오는데요, 혹시 모르시는 분들이 계실까봐 설명드리자면 여러 파일에서 하나의 header파일을 include할 때 중복선언으로 ..
[네이버 지식백과] factory method 패턴 (쉽게 배우는 소프트웨어 공학, 2015. 11. 30., 한빛아카데미(주)) 예제1) http://dextto.tistory.com/140예제2) http://kingoh.tistory.com/entry/Factory-Method-%ED%8C%A8%ED%84%B4 우선 위의 예제를 통해 Java에선 어떻게 Factory method를 구현했는지 보고 오시면 더 좋을 거 같습니다. C에선 class라는 개념이 없기 때문에 어떻게 보면 이전 글들에서 계속해서 Factory method를 써왔습니다. 이번엔 다시 한번 재탕으로 Factory method를 살펴 보도록 하겠습니다. 이번 예제는 display를 구현해 보도록 하겠습니다. firmware의 대부..
이번 시간에는 main.c에서 실제 app을 어떻게 사용하는지 알아보도록 하겠습니다. main.c에서 app을 만들어 사용하기 전에 전에 만들었던 message process [Message 기반]와 key process [Builder pattern]를 사용해 setup 해줍니다. 메시지가 발생했을 때와 key가 클릭 되었을 때 message에 queue 형태로 쌓일 것입니다. message process에서는 쌓인 메시지를 무한루프를 돌면서 current app에 전달해주게 됩니다.25번 줄에 app manager 를 setup하여 app_manager를 생성합니다. 그리고 26번줄에 create_app에 대망의 첫번째 app을 setup_app_scene_1()을 해서 넣어줍니다.26번줄에 생뚱맞게..