런타임
내 지식으로는 보드 유형을 감지 할 수 없지만 ATmega 장치 ID를 읽을 수 있습니다. 이 질문을 수행하는 방법을 확인하십시오. 실행 중에 ATmega 또는 ATtiny 장치 서명을 읽을 수 있습니까? 이 방법을 사용하면 핀아웃뿐만 아니라 여러 레지스터 할당이 변경됩니다. 따라서 코드가 훨씬 더 복잡해질 수 있습니다. 장점은 것입니다 경우 모든 변경 레지스터 할당 및 기타 하드웨어 종속성을 주위에 작업을 관리, 당신은에서 직접 장치를 프로그래밍하는 하나의 .HEX 파일을 사용할 수 있습니다 avrdude.
컴파일 시간
보드 / 컨트롤러 유형을 알아내는 또 다른 방법은 컴파일 타임입니다. 기본적으로 Arduino IDE에 구성된 장치 유형에 따라 코드의 일부를 컴파일하거나 매크로를 설정합니다. 이 예제 코드를 확인하십시오 :
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
#define DEBUG_CAPTURE_SIZE 7168
#define CAPTURE_SIZE 7168
#elif defined(__AVR_ATmega328P__)
#define DEBUG_CAPTURE_SIZE 1024
#define CAPTURE_SIZE 1024
#else
#define DEBUG_CAPTURE_SIZE 532
#define CAPTURE_SIZE 532
#endif
코드 스 니펫은 https://github.com/gillham/logic_analyzer/wiki 에서 뻔뻔스럽게 복사되었습니다 . 장치에 대한 더 많은 속임수가 있는지 코드를 확인하십시오.
호스트 운영 체제에 따라 지원되는 컨트롤러 유형은 다음 파일에서 찾을 수 있습니다.
- 리눅스 :
/usr/lib/avr/include/avr/io.h
- 윈도우 :
...\Arduino\hardware\tools\avr\avr\include\avr\io.h
위의 코드를 처리하는 C- 전 처리기의 사용은 아마도이 사이트에서 다루지 않을 것입니다. 자세한 질문은 http://stackoverflow.com 이 더 좋습니다.
Linux를 사용하는 경우 다음을 입력하여 지원되는 모든 컨트롤러 유형을 쉽게 찾을 수 있습니다.
grep 'defined (__AVR' /usr/lib/avr/include/avr/io.h | sed 's/^[^(]*(\([^)]*\))/\1/'