Перейти к содержанию
    

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

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

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

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

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

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

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

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

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

ice_screenshot_20210415-162936.thumb.png.ce01abcc0fc4724480d8f957046933be.png

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

21 minutes ago, forummailandlogin said:

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

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

aaarrr, не.

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

42 minutes ago, forummailandlogin said:

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

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

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

 

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

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

Изменено пользователем mantech

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 минут назад, mantech сказал:

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

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

Изменено пользователем mantech

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 минуты назад, mantech сказал:

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

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

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

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

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

Изменено пользователем mantech

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...