포인터를 사용하는 예시를 공유하고자 한다.
함수에서 포인터를 인수로 받아오는 것과 구조체 안에 구조체 선언을 한 예시를 공유하고자 한다.
실제 펌웨어 설계를 하다보면 구조체 안에 구조체가 있는 경우가 엄청 많기 때문이다.
아래 예시 코드를 보고 이해한다면 서보드라이버 설계하는 데 충분할 것이다.
엄청난 내용은 아니지만 기록으로 남겨본다.
구조체 안에 구조체 변수로 선언한 코드를 사용한다.
아래에 코드 전문을 첨부했다.
Replit.com 사이트를 활용하면 C 코드를 간편하게 작성하고 컴파일할 수 있다.
VScode로 하려면 gcc니 하는 설치 과정이 복잡하다.
#include <stdio.h>
#include <string.h>
/*************************************************************
코드의 실행 목적
1. add() 로 John과 Jenny의 정보를 동일하게 입력한다.
2. 두 친구의 정보는 2중 구조체로 정의하고 있다.
코드 설명
1. John과 Jenny라는 두 친구가 있다.(main 함수)
2. 두 친구의 나이와 고향은 같다.(add 함수)
3. 두 친구의 정보는 Friend 구조체로 선언한다.(main함수의 전역변수)
4. add 함수에서 구조체를 불러올 때 포인터 주소값으로 불러온다.
5. printf 함수로 입력된 두 친구의 정보를 출력한다.
*************************************************************/
typedef struct _Information {
int age;
char *hometown;
} Information;
typedef struct _Friend {
Information info;
char *name;
} Friend;
void add(Friend *friend, char *Name) {
friend->name = Name;
friend->info.age = 20;
friend->info.hometown = "Suwon";
}
int main(void) {
Friend John;
Friend Jenny;
/* memset is defined in <string.h> */
memset(&John, 0, sizeof(Friend));
memset(&Jenny, 0, sizeof(Friend));
printf("Before\n");
printf("Name: %s, Age: %d, Hometown: %s \n", John.name, John.info.age, John.info.hometown);
printf("Name: %s, Age: %d, Hometown: %s \n", Jenny.name, Jenny.info.age, Jenny.info.hometown);
add(&John, "John");
add(&Jenny, "Jenny");
printf("\n");
printf("After\n");
printf("Name: %s, Age: %d, Hometown: %s \n", John.name, John.info.age, John.info.hometown);
printf("Name: %s, Age: %d, Hometown: %s \n", Jenny.name, Jenny.info.age, Jenny.info.hometown);
return 0;
}
코드 설명은 위에 있으니 읽어보도록 하자.
위의 코드를 실행하면 아래와 같은 결과를 얻는다.
처음엔 쓰레기값이 출력되고, add 함수로 입력된 값이 출력된다.
서보 드라이버에서 실시간성 구현 방법 (0) | 2023.01.29 |
---|---|
RTOS 개념 정리 (3) - 세마포어 (1) | 2023.01.28 |
RTOS 개념 정리 (2) - 임계 영역 (1) | 2023.01.28 |
RTOS 개념 정리 (1) - Task (2) | 2023.01.28 |
RTOS 맛보기 (5) - Task 생성하기(최종 실습) (0) | 2023.01.27 |