Чтение байтов из файла на SD-карте — понимание буфера
У меня есть следующий фрагмент кода, который открывает растровое изображение с SD-карты и выводит ширину на последовательный монитор.
#include <SPI.h>
#include <SD.h>
File bitmap;
void setup() {
Serial.begin(9600);
Serial.println("Initializing SD card...");
if (!SD.begin(4)) {
Serial.println("initialization failed!");
while (1);
}
Serial.println("initialization done.");
bitmap = SD.open("/TEST2.BMP");
int width[0]; // почему я не могу просто написать "int width;"
bitmap.seek(18);
bitmap.read(width, 4);
Serial.println(width[0]); // и "Serial.println(ширина);"
}
void loop() {
}
Он отлично работает, но я не понимаю, почему я должен объявлять буфер для ширины как int width[0];
. Я попробовал int width;
, но тогда на выходе просто 0.
@prehfeldt, 👍1
Обсуждение2 ответа
Лучший ответ:
Вы не обязательны, это всего лишь один из способов сделать это.
В основном функции read
требуется указатель на буфер для хранения данных. Используя массив с одной записью, вы получаете указатель на буфер, достаточно большой для одного (32-разрядного ) целое. И тогда вы получаете «простой» способ доступа к одному целому числу в этом буфере.
Другим способом было бы просто использовать простое целое число и передать указатель на это целое число для read
:
uint32_t width; // Используйте целое число фиксированного размера для переносимости
bitmap.seek(18);
bitmap.read(&width, sizeof(width)); // Используйте sizeof для переносимости
Serial.println(width);
Кажется, у меня есть некоторое представление:
Массив является указателем. Таким образом,
целое число[0];
эквивалентно
целое * простое;
Итак. read(arr... or read(&simple...
- Как увеличить скорость записи на SD-карту в Ардуино
- SD-карта не инициализируется
- Что означают эти контакты? Куда мне их подключить?
- Режимы открытия файлов на SD-карте Arduino добавление/перезапись
- Какие контакты можно использовать для выбора микросхемы (CS, CC) на Arduino Nano Every?
- Понимание того, почему следует избегать «String» и альтернативных решений
- Сделать CS (chip select) для работаты в SPI (для и SD карты и OLED)
- Можно ли подключить экран SD-карты к плате Digispark ATtiny85?
@jsotola Я знаю. Я устал, когда задавал этот вопрос, так что извините за опечатку, @prehfeldt