diff --git a/snipplets/code/Arduino/README.md b/snipplets/code/Arduino/README.md new file mode 100644 index 0000000..7dfd105 --- /dev/null +++ b/snipplets/code/Arduino/README.md @@ -0,0 +1,15 @@ +## Память + +| Тип | Чтение из программы | Запись из программы | Очистка при перезагрузке | +|--------|---------------------|---------------------|--------------------------| +| Flash | Да, PROGMEM | Можно, но сложно | Нет | +| SRAM | Да | Да | Да | +| EEPROM | Да | Да | Нет | + +EEPROM представляет собой область памяти, состоящую из элементарных ячеек +с размером в один байт (как SRAM). Объём EEPROM разный у разных моделей МК: + +* ATmega328 (Arduino UNO, Nano, Pro Mini): `1 кБ` +* ATmega2560 (Arduino Mega): `4 кБ` +* ATtiny85 (Digispark): `512 Б` +* ESP8266 / ESP32: `4096 Б` diff --git a/snipplets/code/Arduino/eeprom.ino b/snipplets/code/Arduino/eeprom.ino new file mode 100644 index 0000000..a2417a3 --- /dev/null +++ b/snipplets/code/Arduino/eeprom.ino @@ -0,0 +1,27 @@ +#include + +/** + * EEPROM.write(адрес, данные) – пишет данные (только byte!) по адресу + * EEPROM.update(адрес, данные) – обновляет (та же запись, но лучше) байт данных, + * находящийся по адресу. Не реализована для esp8266/32! + * EEPROM.read(адрес) – читает и возвращает байт данных, находящийся по адресу + * EEPROM.put(адрес, данные) – записывает (по факту – обновляет, update) данные любого типа + * (типа переданной переменной) по адресу + * EEPROM.get(адрес, данные) – читает данные по адресу + * и сам записывает их в данные – указанную переменную + * EEPROM[] – библиотека позволяет работать с EEPROM памятью + * как с обычным массивом типа byte (uint8_t) + */ + + +void setup() { + Serial.begin(9600); + + Serial.println(EEPROM.read(10)); // выведет 255 + Serial.println(EEPROM.get(10)); // выведет 255 + Serial.println(EEPROM[10]); // выведет 255 +} + +void loop() { + // +} diff --git a/snipplets/code/Arduino/variable_sizes.ino b/snipplets/code/Arduino/variable_sizes.ino new file mode 100644 index 0000000..ad586e8 --- /dev/null +++ b/snipplets/code/Arduino/variable_sizes.ino @@ -0,0 +1,50 @@ +void setup() { + Serial.begin(9600); + + size_t size_variable; + + int example_int; + unsigned int example_uint; + signed int example_sint; + unsigned long example_ulint; + float example_float; + double example_double; + char example_char; + char * example_string; + + size_variable = sizeof(example_int); + Serial.print("int bytes size: " ); + Serial.println(size_variable); + + size_variable = sizeof(example_uint); + Serial.print("unsigned int bytes size: " ); + Serial.println(size_variable); + + size_variable = sizeof(example_sint); + Serial.print("signed int bytes size: " ); + Serial.println(size_variable); + + size_variable = sizeof(example_ulint); + Serial.print("unsigned long bytes size: " ); + Serial.println(size_variable); + + size_variable = sizeof(example_float); + Serial.print("float bytes size: " ); + Serial.println(size_variable); + + size_variable = sizeof(example_double); + Serial.print("double bytes size: " ); + Serial.println(size_variable); + + size_variable = sizeof(example_char); + Serial.print("char bytes size: " ); + Serial.println(size_variable); + + size_variable = sizeof(example_string); + Serial.print("char * bytes size: " ); + Serial.println(size_variable); +} + +void loop() { + // +}