16P by xguru 2021-05-31 | favorite | 댓글 2개

- 오픈소스 신디사이저 회사 Winterbloom을 운영하는 엔지니어가 사용 중인 기술과 도구 설명
- 최첨단을 쫓지 않고, 잘 이해하는 도구와 기술을 이용해서 목표를 달성
ㅤ"Lateral thinking with withered technology"
ㅤ→ (새로운 기술이 아닌) 시들어 버린 기술을 활용해서 재미에 집중하면 전혀 새로운 것을 창조할 수 있다는 수평적 사고
ㅤ→ 현대 닌텐도의 기술 개발 철학을 만들어낸 "요코이 쿤페이"가 한 말 : 닌텐도의 휴대용 게임기(게임보이) 와 VR 게임을 만들어낸 사람

- 마이크로 컨트롤러 : 집중할 제품을 2-3개 선정
ㅤ→ Microchip SAM D21, D51, D11
ㅤㅤ→ 세가지 모두 USB, 유연한 SERCOM, 멀티채널 12-bit ADC, 고급 타이머 등을 지원
ㅤ→ 추가로 RP2040 (아날로그 I/O가 필요없을 때), STM32H7(펌웨어 내에서 소리를 생성해야 할 때) 을 고려중

- 하드웨어 설계 : 오픈소스 전자 설계 자동화 도구 KiCAD 사용
ㅤ→ 사용중인 부품들에 대한 공통 심볼, Footprint, 3D 모델의 KiCad용 라이브러리 깃헙에 공유중
ㅤ→ 선호하는 주요 부품 리스트는 Notion 페이지로 공개 (설명,부품번호,데이터쉬트,제조사,구매링크,사용용도)

- 펌웨어 : 언어, 라이브러리, 빌드시스템, 테스팅 프레임워크등 (아래에 한 항목씩)

- C언어, GCC, CMSIS
ㅤ→ 올드하지만 익숙한 C 언어 사용
ㅤ→ Keil/IAR 같은 유료 컴파일러도 있지만, 오픈소스인 GCC ARM Embedded Toolchain 을 사용
ㅤ→ 마이크로칩 회사가 제공하는 HAL은 너무 다루기 힘드므로, CMSIS 라이브러리를 직접 이용하고 그 위에 작은 추상화를 작성
ㅤㅤCMSIS는 ARM이 제공하는 벤더 독립적 하드웨어 추상화 계층

- 펌웨어 라이브러리
ㅤ→ TinyUSB : 훌륭하고 작은 USB 라이브러리
ㅤ→ Marco Paland's Printf : 마이크로컨트롤러에 최적화된 printf 구현체
ㅤ→ libfixmath : 고정소수점 연산용 작은 라이브러리 (고정소수점 유닛이 없는 마이크로컨트롤러에 유용)
ㅤ→ µnit : 아주 작고 유용한 테스팅 프레임워크

- 빌드시스템
ㅤ→ Python 과 Ninja로 빌드
ㅤ→ Makefile 로 시작했지만 점차 쓰기 힘들어져서 변경

- 파이썬 기반 툴링
ㅤ→ wintertools 라는 repo에서 통합 관리
ㅤ→ 펌웨어/하드웨어 관련 빌드/테스트를 도와주는 스크립트 모음

- CircuitPython
ㅤ→ 몇몇 제품은 커스텀 펌웨를 사용하지 않고 마이크로컨트롤러 교육용으로 사용되는 CircuitPython을 이용
ㅤ→ 고객이 커스터마이징 하기 쉬움
ㅤ→ 펌웨어/소프트웨어 개발을 더 쉽게 만들어 줌
ㅤ→ Adafruit가 관리하는 훌륭한 커뮤니티가 있음

- 문서 & 사용자 가이드
ㅤ→ Markdown 으로 작성. MkDocs로 스태틱 웹페이지로 빌드해서 GitHub Pages에 호스팅
ㅤ→ Bulma CSS 프레임 워크 이용
ㅤ→ 간단하게 하기 위해 Sass/LESS 등은 이용하지 않음

- JavaScript
ㅤ→ 너무 복잡한 Node.js 에코시스템은 일부러 피했음
ㅤ→ 평범한 JavaScript 와 모듈,클래스,애로우함수,Canvas,WebMIDI,TypedArray 등 사용
ㅤ→ 미래에는 Deno를 기대중

멋지다..혼자서 저걸 하다니..

- 1인 기술 스타트업의 아키텍쳐 스택 https://news.hada.io/topic?id=4055

위 글과 제목은 비슷하지만, 하드웨어 스타트업이다보니 얘기가 전혀 달라서 재미나게 봤습니다.