Объясните как работает такой финт в библиотеке?
- Войдите на сайт для отправки комментариев
Втр, 18/10/2016 - 16:51
Есть библиотека для 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() ?
в HW_AVR.h она есть.
Скажите пожалуйста, как такое может быть? И какой код выполняется если вызвать функцию update() ?
Никак не может.
Функция явлется аппаратурозависимой и потому определена в соответсвующем файле. Например, для AVR - hardware/avr/HW_AVR.h Сам по себе это файл включается в строке 26 файла OLE_I2C.cpp
Это та самая либка, в которой
uint8_t scrbuf[1024];
Поосторожней с ней! Сколько у Вас всего ОЗУ?
Спасибо огромное за ответы. Я бы сам долго разбирался и разобрался бы или нет даже и не знаю.
В том то и дело что в свое время прикупил nano на 168 чипе, там памяти как раз кот наплакал. Зачем покупал не помню, валяется без дела, а тут на работе колонки есть, вот и хотел в них сделать FM радио.
Итого есть
1. Nano ATmega168
2.TEA5767
3. Дисплей на ssd1306 128х32
Вот и хотел слепить, но что то думаю как раз дисплей всею память и сожрет. Поэтому набрал библиотек, почитал даташит, может думаю если выкинуть ненужное, типа графику, скроллинги, инверсии разные то может получится облегчить библиотеку.
Это та самая либка, в которой
uint8_t scrbuf[1024];
Поосторожней с ней! Сколько у Вас всего ОЗУ?
Да та самая, вот как раз этот scrbuf[1024]; и отвечает за очистку и заливку экрана насколько я понял.
Ну, да, этот буфер - как раз и есть вся Ваша память. Надо искать другию бибилиотеку или отказываться от буфера. тут кто-то переделывал эту библиотеку, чтобы без буфера была. Добавились некие ограничения, но в принципе работала. Поищите, тема была в прошлом году, кажется.
ага!
вот как раз этот scrbuf[1024]; и отвечает за очистку и заливку экрана насколько я понял.
Нет. Он отвечает за то что Вам прийдется искать или новую либу или новый контролер )))
Ну, да, этот буфер - как раз и есть вся Ваша память. Надо искать другию бибилиотеку или отказываться от буфера. тут кто-то переделывал эту библиотеку, чтобы без буфера была. Добавились некие ограничения, но в принципе работала. Поищите, тема была в прошлом году, кажется.
Нашел несколько тем, из них и брал библиотеки, а принципе памяти меньше всего занимает U8glib. буду пробовать. Главное дисплей запустился :-) Демки из библиотеки работают.
Нет. Он отвечает за то что Вам прийдется искать или новую либу или новый контролер )))
Ну точно не контроллер. :-) Этот то куда девать? Если для дисплея оставить только нужное, а это вывод теста то постараюсь уложиться.
У Вас немного другой дисплей - не 128х64, а 128х32, поэтому для него достаточно scrbuf[512];
Если Вас устроит исключительно текстовый вывод без графики, посмотрите мою библиотеку (правда на 128х64). Она вообще не использует экранный буфер. Ее можно найти в теме "Кириллица на дисплее или что я делаю не так".
У Вас немного другой дисплей - не 128х64, а 128х32, поэтому для него достаточно scrbuf[512];
Если Вас устроит исключительно текстовый вывод без графики, посмотрите мою библиотеку (правда на 128х64). Она вообще не использует экранный буфер. Ее можно найти в теме "Кириллица на дисплее или что я делаю не так".
512 очень много. Я нашел библиотеку MultiLCD в принципе она кушает очень немного. Думаю остановлюсь на ней. Осталось прикрутить русские шрифты.
В библиотеке, о которой я писал, также "кушает" очень немного, т.к., как я уже говорил, не использует буфер. И кириллица там уже "прикручена". Последняя версия (на тот момент, больше я ей не занимался) в посте №91 http://arduino.ru/forum/programmirovanie/kirillitsa-na-displee-ili-chto-...