Jump to content

    
forummailandlogin

Текст. STM32F0+графический дисплей+SDCard

Recommended Posts

  1. STM32F0+графический дисплей.

Работает без проблем, но шрифт занимает всю память. Посему решил шрифты поместить во внешнюю память.

  1.  STM32F0+графический дисплей+SDCard.

Карта форматирована в FAT32. Файл со шрифтом найден, но как обучить МК правильно интерпретировать данные из него пока не пойму.

Вот фрагмент файла со шрифтом.

ice_screenshot_20210415-162023.thumb.png.860a607192440cb364b80d567677607c.png

Когда шрифт вшит в память МК, все адреса известны и поиск нужного изображения символа не представляет труда. А вот когда файл снаружи МК - адреса изображений не существуют вообще. Нужен какой-то особый подход.

Вот фрагмент файла, как он виден для МК.

ice_screenshot_20210415-162936.thumb.png.ce01abcc0fc4724480d8f957046933be.png

Может кто идейку подкинет, как тут быть.

Share this post


Link to post
Share on other sites
21 minutes ago, forummailandlogin said:

Может кто идейку подкинет, как тут быть

Для начала использовать бинарный формат файла.

 

Еще один вариант - упаковать шрифт каким-нибудь простым упаковщиком. Раза в 4 точно ужмётся.

Share this post


Link to post
Share on other sites

aaarrr, не.

  • Хотелось бы сохранить исходное форматирование файла со всеми знаками табуляции и комментариями, а не исходник+компилятор=бинарник. Но предположим, что воспользуюсь этим совет.

Сейчас если шрифт внутри МК, то я имею следующее (картинка 1): Таблица tImageDataSymbols содержит адреса структур sImageDataFont_0xXX, которые в свою очередь содержат адреса и параметры изображений выводимых на экран символов cImageDataFont_0xFF. Получая код скажем буквы "ю" равный 0xFE, я забираю поэтому индексу из таблицы tImageDataSymbols адрес структуры sImageDataFont_0xFE и так далее. Но это вам и так понятно, не первый раз меня на мысль наводите. А что будет содержать *.bin файл? Ни разу с ними дело не имел.

  • Упаковщик хорошо, но придётся писать распаковщик. И он не решает первой проблемы.

Share this post


Link to post
Share on other sites

Fatfs прикручен к МК? Если да, то, как вариант, установить в файле со шифтами фиксированный офсет для заголовка, шрифтов и комментариев. Через фатфс, искать нужный символ и отрисовывать.

Share this post


Link to post
Share on other sites

evgen.05, ни чего не прикручено, всё на ассемблере, всё рукописно.

Если бы шрифт был бы моножирный, все бы символы одинаковое количество байт бы занимали, то да.

Можно конечно решение в лоб попробовать - поиском по буковкам, но времени и памяти отнимет дикое количество.

Или скажем кучу файлов создать:"А,а,Б,б,В,в..." и в них уже символы вырисовывать.

Share this post


Link to post
Share on other sites
42 minutes ago, forummailandlogin said:

x893, если есть что почитать, прошу поделиться.

Читать с карты будете в память ?

На сколько букв хватит памяти (после перекодировки из текста в бинарный формат)?

 

Все буквы не влезут (наверняка) - значит надо читать перед рендерингом буквы (если влезут то проблем нет). Какая при этом будет скорость отрисовки ? Но это надо калькулятор вбрать и считать.

 

Share this post


Link to post
Share on other sites

x893, буфер в SRAM стандартный 512 байт, можно конечно увеличить вдвое, но не хотелось бы больше 1 кБ - СТЕК и другие нужды.

Вот именно, но пере тем как букву считать, её надо найти.

Так что пока самый перспективный вариант это куча файлов:"А,а,Б,б,В,в..." и в них уже символы вырисовывать. Файлы искать проще чем строки в файлах.

Share this post


Link to post
Share on other sites
1 час назад, forummailandlogin сказал:

Так что пока самый перспективный вариант это куча файлов:"А,а,Б,б,В,в..." и в них уже символы вырисовывать. Файлы искать проще чем строки в файлах.

Самый перспективный - заменить МК на другой, с бОльшим флешем.

Share this post


Link to post
Share on other sites
5 минут назад, jcxz сказал:

Самый перспективный - заменить МК на другой, с бОльшим флешем.

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

2 часа назад, forummailandlogin сказал:

а не исходник+компилятор=бинарник

И почему? Предложите клиенту или тому, кто будет пользоваться, самому ковырятся в этом текстовом файле, исправляя символы? :biggrin:

Edited by mantech

Share this post


Link to post
Share on other sites
6 минут назад, mantech сказал:

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

Не понял...  :wacko2: Разве у ТС-а шрифты ASCII-строками хранятся? С чего так решили?

Они у него и так - бинарные. После компиляции, в памяти программ. Вроде.... хотя конечно чудики всякие бывают... :sarcastic:

Share this post


Link to post
Share on other sites
1 час назад, forummailandlogin сказал:

Файлы искать проще чем строки в файлах.

Представляете, как это будет быстро? А если нарисовать нужно строку из 20-30 символов? Это будет выглядеть, как бегущая строка))))

4 минуты назад, jcxz сказал:

азве у ТС-а шрифты ASCII-строками хранятся?

Так он же писал "Вот фрагмент файла со шрифтом." и там далее 0xff00 и в том духе, в виде текста... А компилить в бинарь он не хочет, что меня удивило.

Edited by mantech

Share this post


Link to post
Share on other sites
3 минуты назад, mantech сказал:

Так он же писал "Вот фрагмент файла со шрифтом." и там далее 0xff00 и в том духе, в виде текста...

Я так понял - он здесь говорит про случай, если расположить этот шрифт на SD-карте.

А выше у него - кусок ассемблерного исходника (о чём говорят инструкции DCW, DCD) со шрифтами, компилируемого в обычный бинарный образ прошивки. Вот так и нужно делать. Увеличив флешь до нужного размера.

Share this post


Link to post
Share on other sites
12 минут назад, jcxz сказал:

Я так понял - он здесь говорит про случай, если расположить этот шрифт на SD-карте.

Так даже и на сд карте лучше в бинарном виде сразу делать, ИМХО. 

7 часов назад, forummailandlogin сказал:

А вот когда файл снаружи МК - адреса изображений не существуют вообще. Нужен какой-то особый подход.

Если файл бинарный, то это будет то же самое, что и вшитый в МК, начало файла - это как начало массива во флеш, все адреса будут совпадать.

3 часа назад, forummailandlogin сказал:

Упаковщик хорошо, но придётся писать распаковщик. И он не решает первой проблемы.

Зачем распаковщик-то нужен?? Это функция вашей программы-отрисовщика... Или "упаковщик" это что-то вроде zip-а, тогда согласен, но большого смысла в этом не вижу. Лет 5 назад был случай, человек спрашивал по шрифтам вопрос, так потом выяснилось, что он поставил упаковку зипом, но не бинарных кодов символов, а их шестнадцатиричных кодов в тексте, и был очень удивлен, когда я сказал ему, что лучше бы сразу преобразовал их в бинарные коды, а уж потом паковал, если еще не влезало :biggrin:

Edited by mantech

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.