[임베디드 세계로 연결!] 0. 점검 후 나아가기
이번 시리즈는 5편
임베디드 세계로 연결! 시리즈는 이번 편을 포함하여 5편으로 짧게 구성된다. 지난 시리즈에서는 C언어를 중심으로 임베디드 시스템이 어떻게 움직이는지 간단하게만 살펴 보았다면, 이번 시리즈에서는 본격적으로 임베디드 세계에 대한 학습을 진행하기 전에 꼭 짚고 넘어가야 할 공식 문서, 왕초보 임베디드 공부 일기에서 미처 다루지 못했던 중요한 개념과 개념들을 혼합하여 사용한 사례들을 상세하게 다루어 볼 예정이다. 앞으로 작성할 4편에서 나올 개념들은 아래와 같다.
- 개발 보드 설명서 톺아보기 : 메모리맵, C언어 빌드 과정 + printf
- 최적화 방어막 : volatile
- 레지스터를 쉽게 : 구조체&공용체&비트필드
- 부담 줄이고, 호환성 높이기 : 제어문, 전처리와 매크로
이 글들을 통해서 임베디드 세계로 확실히 연결될 수 있도록 최선을 다해 설명해보려 한다. 설명을 통해 개념에 대한 복습도 충분히 이루어질 것이라고 확신한다. ---
이러한 계획들을 하는 지난 2주 동안 크게 두 가지 학습을 진행했다. 첫 번째는 밀린 임베디드 커리큘럼 공부를 진행했는데, 처음 정기적으로 글쓰기를 진행하다보니 알바와 글쓰기에 쫓겨 공부 진도를 미처 맞춰나가지 못한 것이다. 그래서 집중적으로 진행하여 현재는 계획했던 진도에 거의 맞춰지게 되었다. 두 번째는 왕초보 임베디드-C 공부 일기로서 발행한 17개의 글들을 하나하나 다시 읽어보며 어떠한 글이 잘 쓴 글인지, 어떤 부분을 수정해야하는지 회고해보는 시간을 가졌다.
---
내 글은 무슨 글?
모든 글을 살펴보고 처음 든 생각은 글의 개요가 각각 조금씩 다르다는 것이다. 도입부의 유무, 개념을 설명하는 깊이의 정도, 글을 작성하는 어투가 조금씩 차이가 있었고, 전반적으로 글을 마무리하는 부분에서 요약이나 학습 후의 소감 같은 부분이 없어 아쉬웠다. 조금 더 객관적인 시선에서 분석해보기 위해서, 클로드에게 객관적인 평가를 부탁해 보았다. 옵시디언에 글들을 사전에 작성해두고 업로드했었기 때문에, 클로드에 옵시디언 mcp를 연결하여 분석을 맡겨 보았다. 클로드는 내가 작성한 글들의 형태를 세 가지로 나눌 수 있다고 했다.
- 학습 일지 : 자신이 공부한 내용을 시간 순서대로 기록하는 형태, 독자보다 필자 자신의 기록이 우선
- 기술 해설 : 특정 개념을 독자들에게 설명하는 형태, 독자를 의식하고 비유와 예시를 통해 설명
- 래퍼런스 노트 : 나중에 자신이 다시 찾아보기 위한 정리 문서
이 세 가지 형태의 글들이 혼합된 왕초보 임베디드 공부 일기시리즈는 개발자 학습 에세이라고 보았는데, 일본 개발자 문화에서는 이를 개발일기라고 부르고, 미국에서는 learning in public이라고 칭한다고 한다. 개발자 학습 에세이 안에서 필자인 내가 갈등하고 있는 부분은 단순히 나의 학습 기록을 위해 이 시리즈를 연재할지, 아니면 C언어를 학습하고 싶어하거나 관심이 있는 독자를 위해 진입 장벽을 낮춘 시리즈를 연재할지였다. 이 부분을 완전히 해결할 수는 없었지만(에세이라는 큰 카테고리 안에서 이어나가고 싶기 때문에), 학습 에세이 안에서두 방향성을 적절히 융합하겠다.는 생각은 확실히 가지게 되었다. ---
저는 '임베디드'를 다룹니다.
C언어 개념을 설명하면서도, 임베디드 실무에서 사용되는 사례들과 연결시키려고 노력했다. 코드를 하드웨어 레지스터 관점에서 바라보았을 때 어떻게 구동되는지, C언어가 기계어 레벨에서는 어떻게 동작하는지 조금이나마 깊게 탐구해보면서 학습의 이해도와 질을 향상시키려고 노력했다. 학습 과정에서 호기심으로 계속 파보는 것이 최종 이해 단계에서 항상 많은 도움이 되는 것 같다. 클로드가 객관적으로 살펴보았을 때도 이 점을 확인해줘서 고마웠다.
일반적인 "C언어 튜토리얼"과는 결이 다릅니다.---
문법을 가르치면서도 항상 하드웨어(레지스터, 메모리 맵, MCU)를 참조점으로 두고 있기 때문에,
순수 소프트웨어 개발보다 펌웨어 / 하드웨어 인접 영역에 속합니다.