Comments 13
Есть старый трюк для избавления от простыней шестнадцатиричных кодов в исходниках — прилинковать двоичный ресурс непосредственно в выходной бинарник:
balau82.wordpress.com/2012/02/19/linking-a-binary-blob-with-gcc/
Здесь мы требуем:
Доступ из исходника:
balau82.wordpress.com/2012/02/19/linking-a-binary-blob-with-gcc/
$ objcopy -I binary -O elf32-avr -B avr blob.bin blob.o --rename-section .data=.progmem
Здесь мы требуем:
- -I binary На вход берем двоичный файл
- -O elf32-avr Выдаем объектный файл для архитектуры AVR На 32 здесь можно не смотреть, по факту, получается вот такое: Atmel AVR 8-bit, version 1 (SYSV), not stripped
- -B avr Бинарная архитектура целевого файла — AVR
- blob.bin Входной двоичный файл
- blob.o Выходной объектный файл, который будет создан
- --rename-section .data=.progmem Важный момент — указание поместить эти двоичные данные в правильную секцию — программную память контроллера
Доступ из исходника:
extern unsigned char _binary_blob_bin_start; // Объявили начало нашего бинарного массива
+2
Вообще тот же GIMP может экспортировать картинку в С-шный массив и Adafruit-GFX-Library умеет работать с этими массивами из коробки.
+1
А можно ссылку с примером?
+1
Вечером сделаю скриншоты, но вообще все просто:
1) делается экспорт в header, я обычно копирую в общий .h со всеми иконками(мне так больше нравится).
2) указатель подсовывается в drawXBitmap()
Реализация простая:
drawXBitmap(int16_t x, int16_t y, const uint8_t *bitmap, int16_t w, int16_t h, uint16_t color)
{
int16_t i, j, byteWidth = (w + 7) / 8;
for(j=0; j<h; j++)
{
for(i=0; i<w; i++ )
{
if((bitmap + j * byteWidth + i / 8) & (1 << (i % 8)))
{
drawPixel(x+i, y+j, color);
}
}
}
}
Недостаток в том, что реально точка хранится в байте, для монохромного дисплея это много.
Но объявив все это как const мы пишем это во флеш, которого как правило море.
Это для ARM, у AVR свои прагмы для компилятора и спец функции для чтения.
1) делается экспорт в header, я обычно копирую в общий .h со всеми иконками(мне так больше нравится).
2) указатель подсовывается в drawXBitmap()
Реализация простая:
drawXBitmap(int16_t x, int16_t y, const uint8_t *bitmap, int16_t w, int16_t h, uint16_t color)
{
int16_t i, j, byteWidth = (w + 7) / 8;
for(j=0; j<h; j++)
{
for(i=0; i<w; i++ )
{
if((bitmap + j * byteWidth + i / 8) & (1 << (i % 8)))
{
drawPixel(x+i, y+j, color);
}
}
}
}
Недостаток в том, что реально точка хранится в байте, для монохромного дисплея это много.
Но объявив все это как const мы пишем это во флеш, которого как правило море.
Это для ARM, у AVR свои прагмы для компилятора и спец функции для чтения.
0
Про различие авр и армов в курсе, я более про гимп спрашиваю. Как получить сразу сишный файл?
Был глуп, посмотрел экспорт, всё просто…
Был глуп, посмотрел экспорт, всё просто…
0
А в каком вообще виде используется проект?
У меня картинки прекрасно принимаются по сети (в предыдущем варианте по USB).
В данный момент монохромную картинку прожёвывает php и выдаёт ардуине.
У меня картинки прекрасно принимаются по сети (в предыдущем варианте по USB).
В данный момент монохромную картинку прожёвывает php и выдаёт ардуине.
0
В смысле проект, в котором я использовал картинки из гимпа и либу от адафрут?
Это наручные часы, никакой сети там нет.
Вообще это не очень сложно принять по сети и в таком же виде(как гимп) сложить это в архив.
Камера ваша прикольная, только кота почему-то не видно :(
Это наручные часы, никакой сети там нет.
Вообще это не очень сложно принять по сети и в таком же виде(как гимп) сложить это в архив.
Камера ваша прикольная, только кота почему-то не видно :(
0
Неужели до сих пор стоит такой вопрос?
Года три назад, в самом начале ковыряния ардуины, делал что называется «для себя» (пример тут), по обрывкам чужого кода с англоязычных сайтов, зачастую методом тыка.
Зато работает одновременно как с латиницей, так и с кириллицей, без редактирования preferences. При этом принимает кириллицу как забитую в скетч, так и принятую через LAN-модуль.
Года три назад, в самом начале ковыряния ардуины, делал что называется «для себя» (пример тут), по обрывкам чужого кода с англоязычных сайтов, зачастую методом тыка.
Зато работает одновременно как с латиницей, так и с кириллицей, без редактирования preferences. При этом принимает кириллицу как забитую в скетч, так и принятую через LAN-модуль.
0
Недавно потребовалось отредактировать шрифт для микроконтроллера, поиск в интернете результат дал, но не совсем нужный, про функцию сохранения картинок в C-формате в GIMP не слышал (надеюсь попробовать). Поэтому набросал на коленке мелкий редактор — загружаем массив байтов (у меня уже был ), каждый символ показывется в виде квадратиков. Нажимаем на квадратик, инвертируем цвет (черный-белый). затем сохраняем все обратно в текстовый файл. Есть функция из шрифта 8x8 сделать 16x16 путем растягивания (правда требуется дорисовать некоторые пиксели, как работает знаю только я). Задачу по работе выполнил с помощью нее и бросил полусделанную, шрифты могу редактировать, сглаживать углы. Если интересно: mcu_font_editor.rar (200К)
0
Здравствуйте, автор. Дочитал до последней строки и знаю, что вы всё закинули. Но можете, пожалуйста, помочь ленивому школьнику с этим делом. Есть эта библа, с дополнением для ssd1306. В preference.txt я изменил нужное true на нужное false и заменил массив в glcdfont.h из стандартного на тот, что в вашем файле. Когда попытался вывести слово «Часы», получил 8 крякозябр, что, наверное, свидетельствует о том что редактор таки конвертирует utf-8 в ascii. Что с этим делать? БОЛЬШОЕ СПАСИБО ЗА ЛЮБОЙ ОТВЕТ!
0
Простите за дилетантство, но я в скетче не вижу, где шрифт то подгружается? Мне его заменить нужно где-то? И где файл пеференций?
0
Sign up to leave a comment.
Articles
Change theme settings
Arduino, модуль Nokia 5110 LCD и кириллица