2017-09-29 6 views
0

コードバージョンや、最終更新日やサイズ、バイナリコードのサイズなどの情報を検出する方法はありますか?ここでArduino:コード情報を検出

は一例です:私は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 
} 

、私はコードのサイズや最終更新時間に関するArduinoの内部の任意の情報を検出したりなど、時間をアップロードすることができますか?

ありがとうございました。

答えて

0

あなたが得ることができない時間。 Arduinoには時計や時間を知る方法がありません。

AvrDudeを使用して16進コードを読み取って読み取ったコードのサイズを元に戻し、読み込んだコードのサイズを調べると、コードサイズが大きくなります。

1

__DATE__マクロにコンパイル日が格納されている場合、コンパイル時の現在のシステム時刻は__TIME__マクロに格納されます。また便利なのは、ファイル名を格納する__FILE__マクロです。リファレンス(およびその他の関連マクロ):http://www.atmel.com/webdoc/avrassembler/avrassembler.wb_preprocessor.Pre-defined_macros.html

ここで、これらの線に沿って何かについての興味深い議論があります:彼らは、コードのGitのハッシュを格納するための方法を議論している、そのスレッドで

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

コンパイル/アップロードの時点で。 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ブートローダが、アップロード時にEEPROMへの書き込みをサポートしていないことです(ブートローダを0.5kBのブートセクションに収めるためです)。また、スケッチによる同じ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() {} 

この情報は起動時にシリアルモニタに表示されます。もちろん、他のコミュニケーション手段を使用することもできます。この種のことは、かなりのオーバーヘッドを追加するので、マイクロコントローラからファームウェアをダウンロードして、逆アセンブリからバージョン情報を見つける方法を見つけ出す方が好ましいでしょう。

関連する問題