14.2. 애플리케이션 출하하기¶
작업대 위에서 동작하는 스크립트와 출하된 제품은 같은 것이 아닙니다. 현장으로 나가는 cam은 제품이 설치되어 있는 한 – 수개월, 수년 – 콘솔에 작업자도 없고, IDE도 연결되어 있지 않으며, 무언가 작동을 멈췄을 때 근처에 Python 전문가도 없는 상태로 스스로 실행되어야 합니다. 이 섹션의 페이지들은 목표가 책상 위 데모가 아니라 출하 제품일 때 애플리케이션에 대해 무엇이 달라지는지를 다룹니다.
14.2.1. 사전 점검 체크리스트¶
cam이 작업대를 떠나기 전에 참이어야 하는 것들의 짧은 목록입니다:
애플리케이션 코드는 파일시스템이 아니라 빌드에 들어 있습니다. 프리징된 모듈과 ROMFS 이미지가 코드와 에셋을 담당합니다. 플래시와 SD 카드 저장소는 런타임 상태와 로그 파일 전용입니다. 최종 사용자는 재플래싱 없이는 애플리케이션을 편집, 삭제, 교체할 수 없습니다.
워치독이 지속적으로 실행됩니다.
machine.WDT는main.py의 맨 위에서 시작되어 메인 루프 반복마다 한 번씩 피드됩니다. 구성된 타임아웃보다 긴 모든 정지는 하드웨어 리셋을 일으키고 cam이 다시 올라옵니다.애플리케이션은 복구 가능한 대상에 로그를 기록합니다.
logging라이브러리는 레벨, 타임스탬프, 그리고 현장에서 SD 카드로부터 복구할 수 있는 대상과 함께 레코드를 기록합니다.print()는 개발 시점 전용입니다 – 그 기본 대상은 USB stdout이며, 어떤 출하 제품도 이를 읽지 않습니다.플래시와 SD는 실패할 수 있는 것으로 취급됩니다. 내부 플래시는 작은 고정 크기 레코드(구성, 마지막으로 알려진 캘리브레이션)를 담고, SD는 부피가 큰 가변 파일(이미지 캡처, 로그 파일)을 담습니다. 둘 중 어느 것에 대한 작업이든 오류 처리로 감싸지고, 애플리케이션은 둘 중 어느 것이라도 사용할 수 없을 때를 위한 정의된 폴백을 가집니다.
14.2.2. 애플리케이션을 빌드에 구워 넣기¶
두 가지 상호 보완적인 메커니즘이 파일을 펌웨어 이미지에 넣습니다: