2017-09-29 7 views
0

코드 버전 또는 마지막 업데이트 또는 크기 또는 이진 코드 크기와 같은 정보를 감지 할 수있는 방법이 있습니까? 여기Arduino : 코드 정보 검색

은 예입니다 : 내가 아두 이노 보드에 코드를 업로드하면

void setup() { 
    // initialize digital pin LED_BUILTIN as an output. 
    pinMode(LED_BUILTIN, OUTPUT); 
} 

// the loop function runs over and over again forever 
void loop() { 
    digitalWrite(LED_BUILTIN, HIGH); 
    // turn the LED on (HIGH is the voltage level) 
    delay(1000); 
    // wait for a second 
    digitalWrite(LED_BUILTIN, LOW); 
    // turn the LED off by making the voltage LOW 
    delay(1000); 
    // wait for a second 
} 

, 나는 코드의 크기 또는 마지막으로 수정 된 시간에 관한 아두 이노 내부에 정보를 감지하거나 등 시간을 업로드 할 수 있습니까?

감사합니다.

답변

0

얻을 수없는 시간. Arduino에는 시계 또는 시간을 알 수있는 방법이 없습니다.

AvrDude를 사용하여 16 진 코드를 칩에서 읽어 들인 다음 다시 읽은 것의 크기를 보면 코드 크기가 커집니다.

1

컴파일 날짜는 __DATE__ 매크로에 저장되고 컴파일시 현재 시스템 시간은 __TIME__ 매크로에 저장됩니다. 파일 이름을 저장하는 __FILE__ 매크로도 유용합니다. 참조 (및 기타 관련 매크로) : 스레드에서

https://github.com/arduino/Arduino/issues/5618

들이 코드의 망할 놈의 해시를 저장하는 방법을 논의하고 있습니다 : http://www.atmel.com/webdoc/avrassembler/avrassembler.wb_preprocessor.Pre-defined_macros.html

여기에이 라인을 따라 뭔가에 대한 몇 가지 흥미로운 토론이있다 컴파일/업로드 할 때. Git 버전 제어를 사용하는 경우 해당 정보는 마이크로 컨트롤러에서 실행중인 버전을 확인하고 해당 버전을 쉽게 검색 할 수 있도록 마지막 수정 시간 또는 코드 크기보다 유용 할 수 있습니다. 테스트가 완료되면 나중에 업로드 할 때마다 자동으로 커밋을 수행하는 것이 얼마나 미친 지 잘 모르겠습니다. Git을 사용하지 않는다면, 같은 기법이 원하는 다른 버전 정보를 추가하거나 해당 버전에서 코드의 자동 백업을 수행하는 경우에도 적용될 수 있습니다.

해당 스레드의 facchinm에서 설명한 것처럼 최신 버전의 Arduino IDE는 추가 작업을 추가하는 데 사용할 수있는 빌드 프로세스 전체에서 후크를 제공합니다. 참조 :

https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.5-3rd-party-Hardware-specification#pre-and-post-build-hooks-since-ide-165

original proposal는 EEPROM의 버전 정보를 저장하는 것입니다. 가장 일반적인 방법은 .eep 파일을 사용하는 것입니다. 이 아이디어의 문제점은 인기있는 타사 하드웨어 패키지뿐만 아니라 Arduino Uno가 사용하는 인기있는 Optiboot 부트 로더가 업로드 도중 (0.5kB 부트 섹션에 부트 로더를 맞추기 위해) EEPROM에 쓰기를 지원하지 않는다는 것입니다. 또한 스케치가 동일한 EEPROM 주소를 사용하여 발생하는 충돌을 피할 필요가 있습니다.

other thought 대신 코드 자체에 저장해야합니다. 스케치에 포함 된 헤더 파일 "라이브러리"를 자동으로 업데이트하기 위해 후크를 사용하여이 작업을 수행 할 것입니다. 예 :

#include <VersionTracker.h> 

어떻게 정보에 액세스합니까? 요청 또는 시작시 해당 정보를 보내는 코드를 스케치에 포함 할 수 있습니다. 간단한 예 :

void setup() { 
    Serial.begin(9600); 
    Serial.print(F("Filename: ")); 
    Serial.println(F(__FILE__)); 
    Serial.print(F("Compilation timestamp: ")); 
    Serial.println(F(__DATE__ " " __TIME__)); 
} 

void loop() {} 

시작시이 정보를 직렬 모니터에 인쇄합니다. 물론 다른 통신 수단을 사용할 수도 있습니다.이런 종류의 일은 상당한 오버 헤드를 추가하여 마이크로 컨트롤러에서 펌웨어를 다운로드 한 다음 해체에서 버전 정보를 찾는 방법을 찾는 것이 바람직합니다.