Как стать автором
Обновить

Комментарии 13

Есть старый трюк для избавления от простыней шестнадцатиричных кодов в исходниках — прилинковать двоичный ресурс непосредственно в выходной бинарник:

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


Здесь мы требуем:
  1. -I binary На вход берем двоичный файл
  2. -O elf32-avr Выдаем объектный файл для архитектуры AVR На 32 здесь можно не смотреть, по факту, получается вот такое: Atmel AVR 8-bit, version 1 (SYSV), not stripped
  3. -B avr Бинарная архитектура целевого файла — AVR
  4. blob.bin Входной двоичный файл
  5. blob.o Выходной объектный файл, который будет создан
  6. --rename-section .data=.progmem Важный момент — указание поместить эти двоичные данные в правильную секцию — программную память контроллера

Доступ из исходника:
extern unsigned char _binary_blob_bin_start; // Объявили начало нашего бинарного массива

Вообще тот же GIMP может экспортировать картинку в С-шный массив и Adafruit-GFX-Library умеет работать с этими массивами из коробки.
А можно ссылку с примером?
Вечером сделаю скриншоты, но вообще все просто:
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 свои прагмы для компилятора и спец функции для чтения.
Про различие авр и армов в курсе, я более про гимп спрашиваю. Как получить сразу сишный файл?

Был глуп, посмотрел экспорт, всё просто…
А в каком вообще виде используется проект?
У меня картинки прекрасно принимаются по сети (в предыдущем варианте по USB).
В данный момент монохромную картинку прожёвывает php и выдаёт ардуине.
В смысле проект, в котором я использовал картинки из гимпа и либу от адафрут?
Это наручные часы, никакой сети там нет.

Вообще это не очень сложно принять по сети и в таком же виде(как гимп) сложить это в архив.

Камера ваша прикольная, только кота почему-то не видно :(
Дрыхнет, видимо.
Через час-другой домой приду — придёт валяться на столе :)
Неужели до сих пор стоит такой вопрос?

Года три назад, в самом начале ковыряния ардуины, делал что называется «для себя» (пример тут), по обрывкам чужого кода с англоязычных сайтов, зачастую методом тыка.

Зато работает одновременно как с латиницей, так и с кириллицей, без редактирования preferences. При этом принимает кириллицу как забитую в скетч, так и принятую через LAN-модуль.
Недавно потребовалось отредактировать шрифт для микроконтроллера, поиск в интернете результат дал, но не совсем нужный, про функцию сохранения картинок в C-формате в GIMP не слышал (надеюсь попробовать). Поэтому набросал на коленке мелкий редактор — загружаем массив байтов (у меня уже был ), каждый символ показывется в виде квадратиков. Нажимаем на квадратик, инвертируем цвет (черный-белый). затем сохраняем все обратно в текстовый файл. Есть функция из шрифта 8x8 сделать 16x16 путем растягивания (правда требуется дорисовать некоторые пиксели, как работает знаю только я). Задачу по работе выполнил с помощью нее и бросил полусделанную, шрифты могу редактировать, сглаживать углы. Если интересно: mcu_font_editor.rar (200К)
Здравствуйте, автор. Дочитал до последней строки и знаю, что вы всё закинули. Но можете, пожалуйста, помочь ленивому школьнику с этим делом. Есть эта библа, с дополнением для ssd1306. В preference.txt я изменил нужное true на нужное false и заменил массив в glcdfont.h из стандартного на тот, что в вашем файле. Когда попытался вывести слово «Часы», получил 8 крякозябр, что, наверное, свидетельствует о том что редактор таки конвертирует utf-8 в ascii. Что с этим делать? БОЛЬШОЕ СПАСИБО ЗА ЛЮБОЙ ОТВЕТ!

Простите за дилетантство, но я в скетче не вижу, где шрифт то подгружается? Мне его заменить нужно где-то? И где файл пеференций?

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации