STM32 & C언어 디자인 패턴
close
프로필 배경
프로필 로고

STM32 & C언어 디자인 패턴

  • 분류 전체보기 (171)
    • ▶ STM32 (63)
      • News (8)
      • 회로리뷰 (12)
      • Peripheral (37)
      • 개발환경 (6)
    • ▶ C Application (28)
      • 디자인 패턴 (22)
      • App 만들기 (6)
    • ▶ ARM Core (10)
    • ▶ RTOS (7)
      • RTOS 만들기 (7)
      • FreeRTOS (0)
      • ThreadX (0)
    • ▶ 일상리뷰 (3)
    • ▶ 이전글 (53)
      • C Pattern (25)
      • C Coding (7)
      • Linux (5)
      • Programming (6)
      • Book Reference (10)
  • 홈
  • 태그
  • 방명록
  • Github
C언어에서의 this 구현

C언어에서의 this 구현

this는 객체지향 언어에서 class instance 자신을 나타냅니다. 자기 자신이기 때문에 별도의 이름을 갖는 다는 것도 좀 이상하기 때문에 this라는 키워드는 정말 잘 정한 것 같습니다. C언어 에서 this라는 것을 활용해서 사용해보도록 하겠습니다. 다음과 같은 main.c 코드가 있습니다. uart 드라이버 포인터를 얻어와 uart를 open하고 read, write, close하는 일을 절차적으로 진행하고 있습니다. /* main.c */ void main(void) { driver_t *uart = set_uart(); char value; uart->open(); uart->read(0, &value); uart->write(0, &value, 1); uart->close(); } 사용..

  • format_list_bulleted ▶ C Application/디자인 패턴
  • · 2023. 12. 6.
  • textsms
C언어로 만드는 Interface

C언어로 만드는 Interface

Java 같은 객체지향 언어에서 객체지향, 디자인패턴, Interface을 빼놓고는 설명할게 별로 없습니다. 이중 Interface는 객체지향의 근간이 되는 패턴으로 Interface를 이용해 언제든지 교체 가능한 모듈 형태의 프로그래밍과 더불어 외부 프로그램을 적절하게 통제 할 수 있습니다. 이러한 Interface의 필요성에 대해서는 따로 설명하지 않겠습니다. 우리는 C언어로 Interface를 만들어 보겠습니다. 이번에 만들 Interface는 UART입니다. UART는 MCU와 외부 Device간의 시리얼 통신으로 많이 사용됩니다. 예를 들면 MCU+GPS Module, MCU+RS232(PC)등에서 사용되며 Interface를 설명하기에 적합합니다. 아래 코드는 UART Interface의 원형..

  • format_list_bulleted ▶ C Application/디자인 패턴
  • · 2023. 12. 6.
  • textsms
자바의 Class와 C의 구조체

자바의 Class와 C의 구조체

자바의 Class와 C의 typedef는 많이 비슷해보입니다. 그러나 실제로 좀 차이가 있습니다. 자바 Class는 생산성과 효율성을 높이기 위해, 궁극적으로 객체지향을 목표로 만든 것이기 때문에 typedef보다 훨씬 사용하기 편리합니다. 가장 큰 차이점은 동적인 할당과 해제를 JVM에서 자동으로 해준다는 것이지요. 자바에서는 궁극적으로 Class를 통해 instance를 만들어 냅니다. 자바에서 다음 구문 Class class = new Class(); 는 무엇을 의미할까요? 이것은 class라는 이름의 메모리를 확보한 후 포인터를 넘겨준것과 같은 효과를 냅니다. new와 동시에 memory allocation이 발생한 것입니다. 메모리를 확보했으니 사용 후 반환을 해야 하는데, 자바는 가비지 콜렉션..

  • format_list_bulleted ▶ C Application/디자인 패턴
  • · 2023. 11. 23.
  • textsms
typedef의 활용과 함수포인터

typedef의 활용과 함수포인터

C언어에서 typedef 는 새로운 타입(type)을 만드는 키워드입니다. 예를 들어 bool 타입은 true, false를 가지고 있는 기본적인 타입인데, C언어에는 없습니다. typedef를 통해 아래와 같이 간단하게 bool타입을 만들 수 있습니다. typedef enum { false = 0, true = 1 }bool; 그리고 아래와 같이 코딩 할 수 있습니다. bool isRegistered = false; if(isRegistered == true) { printf("It is registered!"); } 좀 더 활용해 보겠습니다. typedef struct { uint8_t D0; uint8_t D1; uint8_t D2; uint8_t D3; }digit_t; 새로운 digit_t라는 ..

  • format_list_bulleted ▶ C Application/디자인 패턴
  • · 2023. 11. 23.
  • textsms
App state machine 만들기 #5 app states switching

App state machine 만들기 #5 app states switching

app 은 하나의 상태로 명명하기로 하였습니다. 예를 들자면 안드로이드 앱의 activity 처럼 시스템의 모든 이벤트를 받고 UI를 이루며 프로그램을 동작시키는 하나의 상태라고 이해하면 될 것 같습니다. Full src : https://github.com/soloungos/h7_state_machine 위의 예제에서 app states는 세가지의 상태를 가지고 있습니다. app_first.c : 시스템이 시작할 때 최초의 상태, 그 후 합계를 구하는 알고리즘을 계속적으로 수행하다 key 입력 이벤트를 받으면 app second로 스위칭 app_second.c : 평균을 구하는 알고리즘을 계속적으로 수행하다가 key 입력 이벤트를 받으면 app third로 스위칭 app_third.c : 하는 일 없이..

  • format_list_bulleted ▶ C Application/App 만들기
  • · 2023. 11. 15.
  • textsms
App state machine 만들기 #4 main.c

App state machine 만들기 #4 main.c

지난 포스트에서 app controller, app state들을 만들어 app의 역할 및 동작 방식에 대해 알아 보았습니다. 이번 포스팅에서는 main.c의 infinite loop에서 app initial 과 app의 loop등을 어떻게 호출하는지 확인해 보도록 하겠습니다. 아래 main.c의 일부분을 보도록 하겠습니다. int main(void) { ... /* USER CODE BEGIN 2 */ app_first_init(); app_second_init(); app_third_init(); app_start_app(APP_first); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { app_pro..

  • format_list_bulleted ▶ C Application/App 만들기
  • · 2023. 11. 15.
  • textsms
App state machine 만들기 #3 app_first.c

App state machine 만들기 #3 app_first.c

이번 포스트에서는 app state 중에 첫번째 first app을 만들도록 하겠습니다. 지난번에 말씀드린 대로 앞으로 만들어질 app states 들은 모두 app controller(app.c)에 등록되어 제어가 될 예정입니다. 그 중에 오늘은 첫번째 app이라서 의미가 있습니다. 사실 첫번째 app 만 이해한다면 두번째, 세번째는 비슷하기 때문에 별도의 설명이 필요없습니다. 지난 시간에 우리는 아래 코드 처럼 이미 세개의 app을 만들기 위해 app_id를 app.h에 미리 선언했었습니다. /* app.h */ typedef enum { APP_first, APP_second, APP_third, APP_COUNT, APP_NONE, }app_id_t; APP_first는 첫번째 app의 id가 되..

  • format_list_bulleted ▶ C Application/App 만들기
  • · 2023. 11. 15.
  • textsms
App state machine 만들기 #2 app.c

App state machine 만들기 #2 app.c

먼저 우리가 구현해야 할 app controller의 extern 함수들을 확인하겠습니다. extern int app_init_app(app_t *app); extern void app_process(void); extern int app_set_msg(msg_t msg, uint32_t param1, uint32_t param2); extern int app_start_app(app_id_t id); extern int app_switch_app(app_id_t id); extern app_t *app_get_current_app(void); 각각의 역할은 지난 포스트에서 기록한 대로입니다. app_init_app - app 등록 app_process - 현재 active app의 loop 실행, 메시..

  • format_list_bulleted ▶ C Application/App 만들기
  • · 2023. 11. 15.
  • textsms
  • navigate_before
  • 1
  • 2
  • 3
  • navigate_next
공지사항
  • [2023.11.15] App State machine 글 게재
  • [2023.11.3] 티스토리 다시 시작합니다
전체 카테고리
  • 분류 전체보기 (171)
    • ▶ STM32 (63)
      • News (8)
      • 회로리뷰 (12)
      • Peripheral (37)
      • 개발환경 (6)
    • ▶ C Application (28)
      • 디자인 패턴 (22)
      • App 만들기 (6)
    • ▶ ARM Core (10)
    • ▶ RTOS (7)
      • RTOS 만들기 (7)
      • FreeRTOS (0)
      • ThreadX (0)
    • ▶ 일상리뷰 (3)
    • ▶ 이전글 (53)
      • C Pattern (25)
      • C Coding (7)
      • Linux (5)
      • Programming (6)
      • Book Reference (10)
최근 글
인기 글
최근 댓글
태그
  • #STM32G4
  • #STM32
  • #arm
  • #디자인 패턴
  • #디자인패턴
  • #rtos
  • #C언어
  • #C언어 패턴
  • #MCU
  • #STM32H7
전체 방문자
오늘
어제
전체
Copyright © STM32 & C언어 디자인 패턴 All rights reserved.
Designed by JJuum

티스토리툴바