Объясните как работает такой финт в библиотеке?

Andrey12
Andrey12 аватар
Offline
Зарегистрирован: 26.12.2014

Есть библиотека для OLED дисплеев.

Залез в код, и вот что не понятно.

В заголовочном файле OLED_I2C.h объявлена в public функция update() 104 строка.

class OLED
{
	public:
		OLED(uint8_t data_pin, uint8_t sclk_pin, uint8_t rst_pin);
		OLED(uint8_t data_pin, uint8_t sclk_pin);
		void	begin();
		void	update();
		void	setBrightness(uint8_t value);

Однако самой функции нет ни в OLED_I2C.h ни в OLED_I2C.cpp хотя в OLED_I2C.cpp она вызывается, и вызывается в примерах.

Скажите пожалуйста, как такое может быть? И какой код выполняется если вызвать функцию update() ?

__Alexander
Offline
Зарегистрирован: 24.10.2012

в HW_AVR.h она есть.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Andrey12 пишет:

Скажите пожалуйста, как такое может быть? И какой код выполняется если вызвать функцию update() ?

Никак не может.

Функция явлется аппаратурозависимой и потому определена в соответсвующем файле. Например, для AVR - hardware/avr/HW_AVR.h Сам по себе это файл включается в строке 26 файла OLE_I2C.cpp

Logik
Offline
Зарегистрирован: 05.08.2014

Это та самая либка, в которой

uint8_t scrbuf[1024];

Поосторожней с ней! Сколько у Вас всего ОЗУ?

Andrey12
Andrey12 аватар
Offline
Зарегистрирован: 26.12.2014

Спасибо огромное за ответы. Я бы сам долго разбирался и разобрался бы или нет даже и не знаю.

В том то и дело что в свое время прикупил nano на 168 чипе, там памяти как раз кот наплакал. Зачем покупал не помню, валяется без дела, а тут на работе колонки есть, вот и хотел в них сделать FM радио. 
Итого есть

1. Nano ATmega168
2.TEA5767
3. Дисплей на ssd1306 128х32

Вот и хотел слепить, но что то думаю как раз дисплей всею память и сожрет. Поэтому набрал библиотек, почитал даташит, может думаю если выкинуть ненужное, типа графику, скроллинги, инверсии разные то может получится облегчить библиотеку.

Logik пишет:

Это та самая либка, в которой
uint8_t scrbuf[1024];
Поосторожней с ней! Сколько у Вас всего ОЗУ?

Да та самая, вот как раз этот scrbuf[1024]; и отвечает за очистку и заливку экрана насколько я понял.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, да, этот буфер - как раз и есть вся Ваша память. Надо искать другию бибилиотеку или отказываться от буфера. тут кто-то переделывал эту библиотеку, чтобы без буфера была. Добавились некие ограничения, но в принципе работала. Поищите, тема была в прошлом году, кажется.

Logik
Offline
Зарегистрирован: 05.08.2014

ага!

Andrey12 пишет:

 вот как раз этот scrbuf[1024]; и отвечает за очистку и заливку экрана насколько я понял.

Нет. Он отвечает за то что Вам прийдется искать или новую либу или новый контролер )))

Andrey12
Andrey12 аватар
Offline
Зарегистрирован: 26.12.2014

ЕвгенийП пишет:

Ну, да, этот буфер - как раз и есть вся Ваша память. Надо искать другию бибилиотеку или отказываться от буфера. тут кто-то переделывал эту библиотеку, чтобы без буфера была. Добавились некие ограничения, но в принципе работала. Поищите, тема была в прошлом году, кажется.

Нашел несколько тем, из них и брал библиотеки, а принципе памяти меньше всего занимает U8glib. буду пробовать. Главное дисплей запустился :-) Демки из библиотеки работают.

Logik пишет:

Нет. Он отвечает за то что Вам прийдется искать или новую либу или новый контролер )))

Ну точно не контроллер. :-) Этот то куда девать? Если для дисплея оставить только нужное, а это вывод теста то постараюсь уложиться.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

У Вас немного другой дисплей - не 128х64, а 128х32, поэтому для него достаточно scrbuf[512];

Если Вас устроит исключительно текстовый вывод без графики, посмотрите мою библиотеку (правда на 128х64). Она вообще не использует экранный буфер. Ее можно найти в теме "Кириллица на дисплее или что я делаю не так".

Andrey12
Andrey12 аватар
Offline
Зарегистрирован: 26.12.2014

andriano пишет:

У Вас немного другой дисплей - не 128х64, а 128х32, поэтому для него достаточно scrbuf[512];

Если Вас устроит исключительно текстовый вывод без графики, посмотрите мою библиотеку (правда на 128х64). Она вообще не использует экранный буфер. Ее можно найти в теме "Кириллица на дисплее или что я делаю не так".

512 очень много. Я нашел библиотеку MultiLCD в принципе она кушает очень немного. Думаю остановлюсь на ней. Осталось прикрутить русские шрифты.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

В библиотеке, о которой я писал, также "кушает" очень немного, т.к., как я уже говорил, не использует буфер. И кириллица там уже "прикручена". Последняя версия (на тот момент, больше я ей не занимался) в посте №91 http://arduino.ru/forum/programmirovanie/kirillitsa-na-displee-ili-chto-...