🍅 uint8_t
「無符號 8 位整數」。在此資料類型中,「uint」代表「unsigned integer」,表示該數據類型只能包含非負整數值,而「8」表示該數據類型的大小為 8 位元,也就是 1 個位元組,uint8_t 是一種用來儲存範圍在 0 到 255 之間的整數的數據類型。
🍅 uint16_t
16 位的無符號整數。它是一個沒有正負號的整數,可以儲存範圍在 0 到 65535 之間的數值。uint 代表 "unsigned integer",即無符號整數。16 表示該類型的變數使用 16 位元(或者說 2 個字節)的內存空間。_t 則表示它是一個數據類型(type)。
🍅 0xF5
0xF5 是一個十六進位數字,表示一個十進位數字的值。在這個情況下,0xF5 的十進位值是 245。0x 表示接下來的數字是以十六進位表示。F 在十六進位中代表十進位的 15,所以 0xF 就是 15。然後 5 在十進位中代表 5。因此,0xF5 的十進位值為 15 * 16 + 5 = 240 + 5 = 245。
🍅uint8_t usedNumbers[100] = {0}
usedNumbers 的陣列,其元素型別為 uint8_t(8 位元的無號整數,即一個範圍在 0 到 255 之間的數值),陣列的大小為 100。它可以存儲 100 個 uint8_t 類型的元素。
= {0}; 這部分是對陣列進行初始化。在這裡,所有的元素都被初始化為 0。這是因為花括號內的 0 會自動擴展到整個陣列,將所有元素初始化為 0。這樣的初始化確保了 usedNumbers 陣列中的每個元素都被設定為初始值 0。
🍅EEPROMClass::write(int address, uint8_t value)
Arduino 中的 EEPROM(Electrically Erasable Programmable Read-Only Memory,電可擦除可程式唯讀記憶體)類別的方法之一。這方法的功能是將一個字節(uint8_t,即 8 位元的無號整數)寫入 EEPROM 中的指定地址。EEPROM 是一種可通電擦寫的記憶體,用來儲存資料,即使在 Arduino 的電源斷電後,這些資料仍然會被保留。在程式語言中,:: 是作用域運算符,用於指明某個特定作用域或命名空間中的成員。EEPROMClass 是一個類別(Class)名稱,而 write 是這個類別的一個方法(成員函數)。EEPROMClass::write 表示 write 方法是屬於 EEPROMClass 這個類別的,用來進行 EEPROM 寫入操作。
🍅hw_timer_t * timer = NULL;
hw_timer_t* timer = nullptr;
在 ESP32 上,hw_timer_t *timer 是一個指標變數的宣告。這裡的星號(*)表示它是一個指標,而 hw_timer_t 則是指標所指向的資料型別。hw_timer_t 是 ESP32 提供的硬體計時器(hardware timer)的資料型別。這個指標 timer 將用來指向一個 hw_timer_t 型別的變數或結構體。這行程式碼聲明了一個指標 timer,可以用來操作 ESP32 上的硬體計時器。
byte *buffer: 這表示 buffer 是一個指向 byte(或 uint8_t)型別的指標。這裡只宣告了一個指標,但尚未為它分配實際的記憶體空間。你可以在運行時使用 new 來動態分配記憶體,例如 buffer = new byte[size];,其中 size 是你需要的大小。這種方式允許你在運行時動態調整記憶體大小。
🍅byte *buffer與byte buffer
指標可以用於動態分配內存,例如使用 malloc 或 new 函數。
byte *buffer = new byte[10]; // 動態分配 10 個 byte 的內存
動態分配的內存需要在使用後釋放,以避免內存洩漏。
delete[] buffer; 釋放動態分配的內存。
指標 byte *buffer 較靈活性,可以動態分配或重新分配記憶體,而 byte buffer 是固定大小的陣列。但,使用指標需要謹慎。如果你需要在程式運行時動態分配或重新分配記憶體,可以使用指標。如果你知道記憶體大小在編譯時就能確定,則使用陣列更方便。