arduinoソース階層化の概要
1315 ワード
背景
最近、いくつかのオープンソースハードウェアをでたらめにいじっているが、arduinoはその一つで、以前から彼が下層部をカプセル化したと聞いていたが、シロユーザーに友好的で、彼のカプセル化の形式を知りたいと思っていた.
コード解析
IDE初期コード
私たちは最初にarduinoIDEをインストールした後、開いた初期インタフェースは以下の通りで、2つの空の関数がプレイヤーが記入するのを待っていて、他のコードは何もありません.
次にarduinoインストールディレクトリを開き、コアコードがやっと関連部分を見つけました.main.cppでは、次のようにします.
その他の関連コード
main.cppではsetup()関数が1回しか実行されないことがわかりますが、loop()関数はずっと実行され、arduinoソースコードではこの2つの関数が宣言されているだけで、関数エンティティにはプレイヤーがタスクコードを埋め込む必要があります.実はこのように全体のフレームワークはまだはっきりしていて、とても簡単で、底の仕事をして長い間、arduinoIDEの中のコードを見るだけで疑問と好奇心があるのは避けられません.彼の具体的なハードウェアパッケージコードを分析したいと思っていたが、C++コードを見て、後で補充する時間があった.
最近、いくつかのオープンソースハードウェアをでたらめにいじっているが、arduinoはその一つで、以前から彼が下層部をカプセル化したと聞いていたが、シロユーザーに友好的で、彼のカプセル化の形式を知りたいと思っていた.
コード解析
IDE初期コード
私たちは最初にarduinoIDEをインストールした後、開いた初期インタフェースは以下の通りで、2つの空の関数がプレイヤーが記入するのを待っていて、他のコードは何もありません.
void setup() {
// put your setup code here, to run once:
}
void loop() {
// put your main code here, to run repeatedly:
}
次にarduinoインストールディレクトリを開き、コアコードがやっと関連部分を見つけました.main.cppでは、次のようにします.
#include
//Declared weak in Arduino.h to allow user redefinitions.
int atexit(void (*func)()) { return 0; }
// Weak empty variant initialization function.
// May be redefined by variant files.
void initVariant() __attribute__((weak));
void initVariant() { }
int main(void)
{
init();
initVariant();
#if defined(USBCON)
USBDevice.attach();
#endif
setup();
for (;;) {
loop();
if (serialEventRun) serialEventRun();
}
return 0;
}
その他の関連コード
void setup(void);
void loop(void);
main.cppではsetup()関数が1回しか実行されないことがわかりますが、loop()関数はずっと実行され、arduinoソースコードではこの2つの関数が宣言されているだけで、関数エンティティにはプレイヤーがタスクコードを埋め込む必要があります.実はこのように全体のフレームワークはまだはっきりしていて、とても簡単で、底の仕事をして長い間、arduinoIDEの中のコードを見るだけで疑問と好奇心があるのは避けられません.彼の具体的なハードウェアパッケージコードを分析したいと思っていたが、C++コードを見て、後で補充する時間があった.