А что там в скетче, если выкинуть SD, SPI и OLED? НИЧЕГО! - код на уровне примера блинк. Смотрели, сколько памяти занимает блинк? - посмотрите. 9 байт.
Так что для вашего скетча 40 байт - это много.
А что у нас блинк использует библиотечные функции ?
Просто я когда пишу, сколько занимает, это не значит , что я оставил голую библиотеку, я ей пользуюсь до сих пор.
А что там в скетче, если выкинуть SD, SPI и OLED? НИЧЕГО! - код на уровне примера блинк. Смотрели, сколько памяти занимает блинк? - посмотрите. 9 байт.
Было бы удивительно, если эта библиотека без буфера столько занимала, т.к. непонятно, куда можно деть такую прорву памяти.
Ну и потом - о чем мы спорим? вам же Ворота даже строчку процитировал. Найдите у себя в компе файл OLED_I2C.h. откройте - и примерно на 130 строке увидите вот это:
uint8_t scrbuf[1024];
проделайте лично, чтобы убедится - а то так и будете спорить.
Не пытайтесь уменьшать буфер в этой библиотеке - без серьезной переделки работать не будет. Найдите библиотеку без буфера. проверить просто - с ней ваш скетч без SD и SPI должен отсавлять свободными не менее 1500 байт оперативки.
Друзья, задам вопрос в тему названия, но не совсем в тему обсуждения. Имеется связка Ардуино + SD карта. На карте хранятся логи. Файлы большие, в ОЗУ держать никак, да и не страшны отключения в следствии потери питания... Записываю простым кодом:
#include <SPI.h>
#include "SdFat.h"
SdFat SD;
byte a = 128; // пример
myFile = SD.open("LOG.log", FILE_WRITE);
myFile.println(a);
myFile.close();
При необходимости, на запрос, Ардуино должна считать с лога конкретные байты и отправить их мне (на пример в Серал). Вот вопрос в том: как правильно сделать побайтовое чтение? Я не совсем понял приведенные примеры, по этому прошу помочь.
Вот так правильно будет?
myFile = SD.open("LOG.log");
if (myFile) {
symbol = myFile.read();
}
myFile.close();
- считывание одного элемента (первого). Я так понимаю, что если повторить несколько раз .read() то можно сместиться на нужную позицию, на пример на 10-й байт. А как сделать так, чтобы чтение шло сразу с 10-го байта?
На весь скетч и обработчик библиотеки 40 байт ???
Ну,ну.
А что там в скетче, если выкинуть SD, SPI и OLED? НИЧЕГО! - код на уровне примера блинк. Смотрели, сколько памяти занимает блинк? - посмотрите. 9 байт.
Так что для вашего скетча 40 байт - это много.
А что у нас блинк использует библиотечные функции ?
Просто я когда пишу, сколько занимает, это не значит , что я оставил голую библиотеку, я ей пользуюсь до сих пор.
Конкретно вот так
#include <OLED_I2C.h> //#include <SPI.h> //#include <SD.h> OLED myOLED(SDA, SCL, 8); //File myFile; void setup() { Serial.begin(9600); // SD.begin(4); myOLED.begin(); myOLED.clrScr(); } void loop() { drawBitmap(10, 0, "img1.bmp", 64, 64); myOLED.update(); } void drawBitmap(uint8_t x, uint8_t y,String bitmap,uint8_t sx, uint8_t sy) { // myFile=SD.open(bitmap); uint8_t bit; uint8_t data; for(int cy=0;cy<sy;cy++){ for(int cx=0;cx<sx;cx++){ bit=7-(cx%8); // myFile.seek((cy*(sx/8)+(cx/8))); // data=myFile.peek(); if ((data & (1<<bit))>0) myOLED.setPixel(x+cx, y+cy); else myOLED.clrPixel(x+cx, y+cy); } } // myFile.close(); }На весь скетч и обработчик библиотеки 40 байт ???
Ну,ну.
А что там в скетче, если выкинуть SD, SPI и OLED? НИЧЕГО! - код на уровне примера блинк. Смотрели, сколько памяти занимает блинк? - посмотрите. 9 байт.
Так что для вашего скетча 40 байт - это много.
Да, действительно, был не прав извиняюсь.
Изменил размер массива до [1],
Скетч стал занимать 41 байт.
Буду много думать.
Было бы удивительно, если эта библиотека без буфера столько занимала, т.к. непонятно, куда можно деть такую прорву памяти.
Ну и потом - о чем мы спорим? вам же Ворота даже строчку процитировал. Найдите у себя в компе файл OLED_I2C.h. откройте - и примерно на 130 строке увидите вот это:
проделайте лично, чтобы убедится - а то так и будете спорить.
Не пытайтесь уменьшать буфер в этой библиотеке - без серьезной переделки работать не будет. Найдите библиотеку без буфера. проверить просто - с ней ваш скетч без SD и SPI должен отсавлять свободными не менее 1500 байт оперативки.
Голая OLED_I2C , чуть больше 800 байт занимает.
Какой там килобайтный буфер ?
Не знаю, какую библиотеку ты используешь, но в оригинальнй от http://www.RinkyDinkElectronics.com/, см. строку 132, как я тебе писал.
Впрочем, тебя уже устроило, так что расслабься и продолжай один и тот же байт по 8 раз читать.
Друзья, задам вопрос в тему названия, но не совсем в тему обсуждения. Имеется связка Ардуино + SD карта. На карте хранятся логи. Файлы большие, в ОЗУ держать никак, да и не страшны отключения в следствии потери питания... Записываю простым кодом:
#include <SPI.h> #include "SdFat.h" SdFat SD; byte a = 128; // пример myFile = SD.open("LOG.log", FILE_WRITE); myFile.println(a); myFile.close();При необходимости, на запрос, Ардуино должна считать с лога конкретные байты и отправить их мне (на пример в Серал). Вот вопрос в том: как правильно сделать побайтовое чтение? Я не совсем понял приведенные примеры, по этому прошу помочь.
Вот так правильно будет?
myFile = SD.open("LOG.log"); if (myFile) { symbol = myFile.read(); } myFile.close();- считывание одного элемента (первого). Я так понимаю, что если повторить несколько раз .read() то можно сместиться на нужную позицию, на пример на 10-й байт. А как сделать так, чтобы чтение шло сразу с 10-го байта?
я не копенгаген, но общепринятых системах
О! Спасибо большое!