ESP32를 위한 700줄 C 컴파일러, 직접 만들어봤습니다!
by DD
5개월 전
조회수 16
ESP32(Xtensa)용 미니 C 컴파일러 'Xcc700'이 700줄의 코드로 개발되어 공개됨
단일 패스, 재귀 하강 방식을 사용하며, ESP-IDF elf_loader를 통해 실행 가능한 REL ELF 바이너리 생성
커뮤니티는 소형 컴파일러 개발에 대한 신선함과 Rust의 복잡성에 대한 아쉬움을 표함
Xcc700 아키텍처 및 구현
Xcc700은 단일 패스 컴파일러로, 소스 코드를 한 번만 읽어들여 바이너리 코드를 생성한다. 구체적으로 재귀 하강 파서를 사용하여 구문 분석을 수행하고, Xtensa CPU를 스택 머신으로 간주하여 레지스터 할당을 단순화했다. 따라서, 컴파일러의 코드 복잡성을 줄이고, ESP32 환경에 최적화된 코드를 생성한다.
Rust vs C 컴파일러 비교
Rust는 강력한 메모리 안전성을 제공하지만, 컴파일러의 복잡성이 높다. 반면, C 컴파일러는 낮은 수준의 제어가 가능하지만, 메모리 관리에 대한 책임은 개발자에게 있다. 결과적으로, ESP32와 같은 제한된 환경에서는 C 컴파일러가 더 적합할 수 있으며, Rust의 부분 집합을 활용하는 방안도 고려해볼 수 있다.
ESP32 개발 환경 구축 가이드
ESP32 환경에서 Xcc700을 사용하기 위해서는 ESP-IDF를 설치하고, 크로스 컴파일 환경을 구성해야 한다. 구체적으로, ELF 로더를 사용하여 생성된 바이너리를 ESP32에 업로드하고 실행한다. 따라서, 임베디드 시스템 개발에 대한 기본적인 이해와 컴파일러의 동작 원리에 대한 지식이 필요하다.