Ассемблер (ASM) для AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
akl
Друг Кота
Сообщения: 4445
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение akl »

Я создавал массив символов во FLASH (правда у меня цифры 24х40 и усеченный шрифт 16х24). Перед выводом создавал образ экрана, точнее его части, т.к. ОЗУ хватало только на 64 строки (индикатор 400*240 пикселей), где делал распаковку текущего символа на строки и загрузку в ОЗУ. Естественно, постоянная часть, которая уже была отправлена в ОЗУ индикатора не трогалась.
СпойлерИзображение
Вложения
индикатор LS без стрелки.jpg
(32.78 КБ) 497 скачиваний
Реклама
trofim2
Встал на лапы
Сообщения: 106
Зарегистрирован: Чт сен 10, 2015 06:59:03
Откуда: Гродно, BY

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение trofim2 »

Если памяти во FLASH достаточно, то можно под каждый символ отводить максимальную ширину, тогда адрес легко вычисляется. Первый байт знакогенератора - ширина символа.
Реклама
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18546
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ARV »

trofim2 писал(а):Если памяти во FLASH достаточно, то можно под каждый символ отводить максимальную ширину, тогда адрес легко вычисляется.
255 символов 32х32 пиксела (далеко не гигантский шрифт) займут всего ничего 255*32*8=65280 байт... а так - да, можно отводить и максимальную ширину...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Reflector »

[uquote="ARV",url="/forum/viewtopic.php?p=3546972#p3546972"]255 символов 32х32 пиксела (далеко не гигантский шрифт) займут всего ничего 255*32*8=65280 байт...[/uquote]
Разве не 255*32*4?
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
shonty
Мучитель микросхем
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение shonty »

С выводом чего то отдельного или только цифр, или даже группы картинок из таблицы разобрался. И текст развернуть могу, MHz -это один символ. Цифры использую тоже 24х40 без засечек.
СпойлерИзображение

Сейчас именно таблицу ASCII хочу перевести.

Во вложении таблица со смайлами 24х24 которые на фото.
Реклама
trofim2
Встал на лапы
Сообщения: 106
Зарегистрирован: Чт сен 10, 2015 06:59:03
Откуда: Гродно, BY

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение trofim2 »

[uquote="ARV",url="/forum/viewtopic.php?p=3546972#p3546972"]
trofim2 писал(а):Если памяти во FLASH достаточно, то можно под каждый символ отводить максимальную ширину, тогда адрес легко вычисляется.
255 символов 32х32 пиксела (далеко не гигантский шрифт) займут всего ничего 255*32*8=65280 байт... а так - да, можно отводить и максимальную ширину...[/uquote]
Для М128 это всего половина памяти.
Реклама
Аватара пользователя
shonty
Мучитель микросхем
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение shonty »

[uquote="ARV",url="/forum/viewtopic.php?p=3546929#p3546929"]1. При описании каждого символа шрифта указываетс его ширина. Т.е. в массиве байтов, описывающих пикселы символа первый байт задает ширину этого символа.[/uquote]
Да, спасибо. Этим способом и воспользуюсь.
По предварительным подсчётам:
При средней ширине символа в 8 байт некоторые символы (ориентировочно) получатся до 12-ти байт +1 байт ширина символа.
Даже если округлю до 15 байт на символ в две строки - памяти хватит.

Большое спасибо.
Аватара пользователя
shonty
Мучитель микросхем
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение shonty »

Сделал первым способом. По коду громоздко, если средняя ширина одного знака 7px, то по максимуму все увеличиваются до 11px (в полтора раза), + 1 байт ширина, +1 - "0", итого 24 байта на знак. Но возможно буду ещё увеличивать до 16х18, когда дисплеи 240х320 придут. А это примерно 72 байта на знак выйдет (16*1,5*3). Чем цветнее дисплей, тем мельче пиксель.
СпойлерИзображение
В голове ещё третий способ нарисовался. Посмотрю, что будет по памяти, и возможно сделаю "не вашим не нашим", т.е несколько таблиц с символами (шириной 2, 4, 7, 11 px), символы задавать кодами и через условие делать перенаправление на таблицы.

PS Да, с разными таблицами буду пробовать, экономия по памяти получится ощутимая, так как можно некоторые символы кириллицы и латиницы (17 насчитал ABCEHKMOPTXaceopy, а 17х72=1224 байта) на один знак вешать.

PS2 С переменной шириной шрифта определился, но от ASCII отказываюсь, т. к. на больших шрифтах весьма не рационально.
Последний раз редактировалось shonty Чт янв 17, 2019 10:26:35, всего редактировалось 5 раз.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15571
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение BOB51 »

Может почитать про "масштабируемые шрифты" для форточек...
Только вот ГДЕ?
:dont_know:
:(
Аватара пользователя
Starichok51
Модератор
Сообщения: 19053
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Starichok51 »

shonty писал(а):некоторые символы кириллицы и латиницы (17 насчитал ABCEHKMOPTXaceopy
вообще-то, должно быть 12 заглавных букв, совпадающих с латиницей.
кстати, в автомобильных номерах используются только буквы, совпадающие по начертанию с латиницей. и мне помнится, что их 12...
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Аватара пользователя
shonty
Мучитель микросхем
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение shonty »

[uquote="Starichok51",url="/forum/viewtopic.php?p=3551345#p3551345"]вообще-то, должно быть 12 заглавных букв, совпадающих с латиницей.[/uquote]
Видимо Y и У, но это как написать.

Решение можно найти и более оригинальное, но я пока не виртуоз, а сразу всё впитать в себя не успеваю, да и дозировать нужно.
На этом этапе сделаю по пониманию материала.
Аватара пользователя
Starichok51
Модератор
Сообщения: 19053
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Starichok51 »

да, это буква "У".
"Требованиями и условиями ГОСТа обозначено, что на автомобильных номерах могут быть использованы 12 букв из алфавита кириллицы — А, В, Е, К, М, Н, О, Р, С, Т, У и Х, так как только они имеют аналогичные буквы в латинице."
Источник: http://pravo-auto.com/kakie-bukvy-ispol ... ah-rossii/
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Аватара пользователя
shonty
Мучитель микросхем
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение shonty »

[uquote="ARV",url="/forum/viewtopic.php?p=3546929#p3546929"]2. Создается отдельная таблица, в которой хранится ширина и адрес начала символа в знакогенераторе, а сам знакогенератор в отдельной таблице[/uquote]
Всё таки решился сделать вторым способом. Хочу уточнить несколько деталей.
1. Байт ширины символа без разницы где размещать: в индексной таблице или таблице знакогенератора?
2. (Основной вопрос) Поиск адреса начала символа в знакогенераторе. Извините за делетантство, но на ум приходит ввести 3 параметра: это 1-й множитель, 2-й множитель (или число проходов первого параметра) + слагаемое (в качестве довеска, не все ж числа делятся без остатка).
МКС
Встал на лапы
Сообщения: 147
Зарегистрирован: Чт янв 10, 2013 21:03:18

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение МКС »

Здравствуйте ребята! Прогу пишу на Ассемблере для МК Atmega8. Подскажите как из регистровой пары (например Х - регистр) сделать двухбайтный счетчик с инкрементом и декрементом?
trofim2
Встал на лапы
Сообщения: 106
Зарегистрирован: Чт сен 10, 2015 06:59:03
Откуда: Гродно, BY

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение trofim2 »

adiw xl,1 - инкремент
sbiw xl,1 - декремент
МКС
Встал на лапы
Сообщения: 147
Зарегистрирован: Чт янв 10, 2013 21:03:18

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение МКС »

Т.е. при достижении числа 256 xl обнулится, а в младшем бите xh запишется 1?
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15571
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение BOB51 »

В случае с adiw/sbiw обрабатывается сразу вся регистровая пара
Xh:Xl, а не раздельно младший и старший байты.
8)
МКС
Встал на лапы
Сообщения: 147
Зарегистрирован: Чт янв 10, 2013 21:03:18

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение МКС »

Ок! Благодарю всех за ответы!
akl
Друг Кота
Сообщения: 4445
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение akl »

Иногда бывает полезно псевдочтение в регистр с целью изменить содержимое регистровой пары.

Код: Выделить всё

LD R0,X+; инкремент XH:XL
LD R0,-X; декремент XH:XL
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение pyzhman »

Хм, приколюха. Не знал. Спасибо.
Docendo discimus
Ответить

Вернуться в «AVR»