自己K書要花很多時間,模仿別人的 code 來學習比較快。這一次是想要建立自己的 Arduino 程式庫,在 Arduino IDE 上就有很多的 library 可以拿來參考;今天從當中挑選了 EEPROM library 來作為參考對象。
EEPROM library 目錄下只有兩個檔案需要打開來看:EEPROM.cpp、EEPROM.h。直接省略掉註解文字
#ifndef EEPROM_h
#define EEPROM_h
#include
<inttypes.h>
class
EEPROMClass
{
public:
uint8_t read(int);
void write(int, uint8_t);
};
extern
EEPROMClass EEPROM;
#endif
|
#include
<avr/eeprom.h>
#include
"Arduino.h"
#include
"EEPROM.h"
uint8_t
EEPROMClass::read(int address)
{
return
eeprom_read_byte((unsigned char *) address);
}
void
EEPROMClass::write(int address, uint8_t value)
{
eeprom_write_byte((unsigned
char *) address, value);
}
EEPROMClass
EEPROM;
|
模仿它做了一個做加、減法計算的程式庫,分別存檔 Math.h、Math.cpp,直接在 Arduino 的 libraries 路徑下建立一個名為『Math』子目錄,兩個檔案都放在其中。
#ifndef Math_h
#define Math_h
class MathClass
{
public:
int mAdd(int
x, int y);
int mSub(int
x, int y);
};
#endif
|
#include
"Math.h"
int
MathClass::mAdd(int x, int y)
{
return x+y;
}
int
MathClass::mSub(int x, int y)
{
return x-y;
}
|
開啟 Arduino IDE 後,果然就會看到自給建立的 Math library 出現在其中
直接寫一個程式來試驗一下,看看是否可以順利 compile
正常完成!回頭看 code 內容怎麼覺得 Math.h 開頭兩行怪怪的,為什麼需要有 #ifndef Math_h 及 #define Math_h?拿掉又會出現錯誤
error: previous definition of 'class MathClass' 這是什麼錯誤?在某個網站 (http://www.86duino.com/?p=3607&lang=TW) 上稱呼這個架構是個“詭異的架構”,真的不瞭解為何要這麼做!網站上也介紹了如何建立程式庫,比我的內容精彩許多。
後記:
利用搜尋引擎尋找關鍵字“class”、“#infdef”、“#define”,都是在說明那個詭異的架構是為了避免重覆的宣告。
後記:
利用搜尋引擎尋找關鍵字“class”、“#infdef”、“#define”,都是在說明那個詭異的架構是為了避免重覆的宣告。
沒有留言:
張貼留言