아두이노를 이용한 데이터 저장 -#10
오늘부터 이전 소스코드도 공부하면서 C/C++ 언어 복습도 하자.
이번에 공부할것은 구조체 하나 이다.
처음하는 초보들은 구조체에 대해서 알지못하는것 보다,
더 어려운게 어디에 사용하지 ? 왜 사용하지 이다.
사실 C언어 이전에는 잘 없었다.
C언어 이전에 포트란까지는 없었다.
파스칼 부터 구조체가 등장했다고 생각하면 쉬울것이다.
그렇다고 포트란에 없느냐 ? 그것도 아니다.
포트란 77까지는 없었지만 포트란 90으로 오면서 생겨 났다.심지어는 C언어의 포인트까지 있다.
어쨰던 C언어에서 공부해야 할것은 두가지가 있다.
구조체와 포인트이다. 본인이 학생들가르칠때는 구조체 포인트 쓰지 말라고 한다.
둘다 쉬운게 아니기 떄문이다. 모른다고 프로그램 못만드는것도 아니다.
다만 삽질을 많이 해야 한다. 포크레인 한방에 해결될것을 여러번의 삽질이 필요하다.
그렇다고 삽질이 나쁜것도 아니다. 나름 삽질을 하면 안된다고 배울수 있으니 적극 추천한다.
마지막으로 포인터가 어렵다고 생각하지만 구조체가 더 어렵고 더 중요하다.
왜냐 하면 구조체를 모르고 자료구조에 접근하기 어렵고, C++의 클래스를 이해하기는 더 어렵다.
더 나아가 데이터베이스를 이해 할라면 구조체의 이해는 필수 이다.
..
그러면 왜 아두이노에서 구조체 일까?
정말 몰라도 상관 없지만 알고나면 코딩의 양이 확실히 작아진다.
구조체의 형식이나 사용법은 문법책이나 다른것을 참고 하기 바란다.
사실 본이도 형식은 잘 모른다. 그냥 이렇게 매일 사용한다.
1. 구조채는 자료형을 묶어주는 역활을 한다.
1.1 여러게의 데이터를 하나의 집합개념이라고 보면 된다.
1.2 그러면 하나만 존재하면 구조체를 사용하지 않아도 될까? 전혀 아니다.
1.3 코드가 항상 하나라는 보장은 없다. 여러개로 늘어 날수가 있다.
1.4 나중애 늘어 난다면 코드를 전면적으로 변경해야 한다.
1.5 구조체로 만들면 맴버 하나만 추가하면 된다.
1.6 그래서 시작부터 구조체를 선언하고 시작한다.
2. 구조체 앞뒤어 버전과 CHK는 왜 넣을까 ?
2.1 데이터 포멧에는 주로 들어간다.
2.2 예를 들어 아래한글 파일이 있다. 지금 파일포멧을 항상 사용할까 ?
2.3 미래의 아래한글에는 다른버전의 아래한글 파일이 존재 할 수 있다.
2.4 그러면 프로그램을 두개 만들어야 할까 ? 아니다. 파일의 형식에 따라서 파일을 읽는 함수가 두개가 존재 한다.
2.5 그래서 같은 파일이라도 파일속 구조는 다를수가 있다.
3. 실제 용도는 여기에 있다.
3.1 구조체를 통신을 통해서 보낼때, 반드시 간다는 보장이 있을까 ?
3.2 이 데이터가 잘 받았는지 확인하는 용도이다.
3.3 물론 이것 1바이트로 완벽하게 확인은 못한다. 그래도 정상적인 데이터와 비정상적인 데이터의 아무 많이 확인을 할 수가 있다.
3.4 데이터를 모두 검사하기에는 자원이 너무 필요로한다. 어찌보면 확률의 싸움이다. 데이터 손실이 많은 통신이라면 더 많은 비트수를 검사 해야 한다.
#define version 0x01
#define check 0xFF
typedef struct _Info
{
char ver;
float Temp[5];
char chk;
_Info()
{
ver = version;
chk = check;
memset(Temp, 0x00, sizeof(float)*5);
}
}Info;
|