реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Условное компилирование
serge71
сообщение Feb 2 2009, 12:11
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 18
Регистрация: 19-11-08
Из: Moscow region
Пользователь №: 41 766



Подскажите плз, как можно сделать, на asm : некая подпрограмма использует массив данных (таблицу символов шрифта, определенных как .DB), есть несколько шрифтов.
draw_symbol:
CODE
draw_symbol:

ldi ZL,low(font*2)
ldi ZH,high(font*2)

;загрузка переменных шрифта

lpm width,Z+ ;максимальная ширина символа
lpm heigth,Z+ ;высота для всех символов
lpm bit_p_pixel,Z+;количество байтов шрифта на один пиксел
lpm first_char,Z+;первый символ шрифта в ASCII
lpm last_char,Z+;последний символ шривта в ASCII
и т.д.

font:
.DB 0x02, 0xAC, 0x08, 0x0B, 0x01, 0x20, 0x7E,0x03
.DB 0x01, 0x04, 0x06, 0x05, 0x07, 0x05, 0x01, 0x02, 0x02, 0x03, 0x05, 0x02, 0x02, 0x01, 0x04, 0x05
................................

font8x11:
.DB 0x02, 0xAC, 0x08, 0x0B, 0x01, 0x20, 0x7E,0x03
.DB 0x01, 0x04, 0x06, 0x05, 0x07, 0x05, 0x01, 0x02, 0x02, 0x03, 0x05, 0x02, 0x02, 0x01, 0x04, 0x05

font13x16:
.DB 0x02, 0xAC, 0x08, 0x0B, 0x01, 0x20, 0x7E,0x03
.DB 0x01, 0x04, 0x06, 0x05, 0x07, 0x05, 0x01, 0x02, 0x02, 0x03, 0x05, 0x02, 0x02, 0x01, 0x04, 0x05

какие директивы компилятору указать чтоб при вызове подпрограммы подставлялась нужная таблица.
Причина редактирования: Уменьшение видимого размера цитаты исходника.
Go to the top of the page
 
+Quote Post
vvvv
сообщение Feb 2 2009, 12:17
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 256
Регистрация: 3-05-05
Из: г. Волжский
Пользователь №: 4 714



Нужно загружать нужным адресом ZH и ZL до вызова подпрограммы draw_symbol. Или использовать еще один регистр в качестве индекса,
который будет говорить подпрограмме draw_symbol, какую таблицу использовать.
Условное компилирование не поможет. Оно требуется когда нужно сделать тот или иной код до выполнения программы, а не вовремя.

Сообщение отредактировал vvvv - Feb 2 2009, 12:18
Go to the top of the page
 
+Quote Post
serge71
сообщение Feb 2 2009, 12:22
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 18
Регистрация: 19-11-08
Из: Moscow region
Пользователь №: 41 766



А мне не требуется менять шрифт во время выполнения программы, он будет постоянен для конкретного отображения(вызова draw_symbol), я что-то не могу разобратья с ifdef ifndif endif и т.п. Может как по другому можно сделать
Go to the top of the page
 
+Quote Post
galjoen
сообщение Feb 2 2009, 12:27
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Цитата(serge71 @ Feb 2 2009, 15:11) *
какие директивы компилятору указать чтоб при вызове подпрограммы подставлялась нужная таблица.

Поместите каждую таблицу в свой файл. Обычно с расширением .inc. Например shrift8x8.inc, shrift9x14.inc и т.д. И всё это в каталог INC. И вставляйте оператором .include "INC\shrift8x8.inc" или .include "INC\shrift9x14.inc" и т.д. Вы ведь уже так что-то типа .include "INC\can128def.inc" делаете?
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Feb 2 2009, 12:28
Сообщение #5


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



#define CURR_FONT font // font8x11 // font13x16

...
ldi ZL,low(CURR_FONT*2)
ldi ZH,high(CURR_FONT*2)
...


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
serge71
сообщение Feb 2 2009, 12:59
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 18
Регистрация: 19-11-08
Из: Moscow region
Пользователь №: 41 766



Цитата(MrYuran @ Feb 2 2009, 15:28) *
#define CURR_FONT font // font8x11 // font13x16

...
ldi ZL,low(CURR_FONT*2)
ldi ZH,high(CURR_FONT*2)
...


Не понимаю строки #define, как таблицу-то выбирать ?

Как сделать так, чтоб перед вызовом draw_symbol происходила подстановка нужной таблицы font = font8x8 или font = 8x11, до её очередного переопределения, не меняя текста подпрограммы, надо всего лишь переопределить переменную.

Цитата(galjoen @ Feb 2 2009, 15:27) *
Поместите каждую таблицу в свой файл. Обычно с расширением .inc. Например shrift8x8.inc, shrift9x14.inc и т.д. И всё это в каталог INC. И вставляйте оператором .include "INC\shrift8x8.inc" или .include "INC\shrift9x14.inc" и т.д. Вы ведь уже так что-то типа .include "INC\can128def.inc" делаете?

Спасибо, попробую, но может есть другие способы
Go to the top of the page
 
+Quote Post
adc
сообщение Feb 2 2009, 13:04
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 409
Регистрация: 29-10-07
Пользователь №: 31 836



вот так:

CODE
.equ fontcur=font1 // font8x11 // font13x16// <-- здесь разкоментить нужный(используемый) шрифт.

.IF fontcur==font1
myFont:
.db....
.db....
.MESSAGE "use font1"
.endif

.IF fontcur==font8x11
myFont:
.db....
.db....
.MESSAGE "use font8x11"
.endif

.IF fontcur==font13x16
myFont:
.db....
.db....
.endif


Загружаете с адреса по метке myFont.
ps:исправил "=" на "=="
Причина редактирования: Уменьшение видимого размера цитаты исходника.


--------------------
Умный программист пишет тупым кодом гениальные вещи, а не наоборот...
Go to the top of the page
 
+Quote Post
serge71
сообщение Feb 2 2009, 13:25
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 18
Регистрация: 19-11-08
Из: Moscow region
Пользователь №: 41 766



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

Цитата(adc @ Feb 2 2009, 16:04) *
вот так:


А как быть с тремя одинаковыми меиками myFont ?
Причина редактирования: Нарушение п.3.4 Правил форума.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Feb 2 2009, 13:28
Сообщение #9


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Код
.dseg

pending_font:.byte  2; делаем глобальную переменную,
                             ;в которую перед выводом строки
                            ;пишем адрес фонта       
;пример
; ldi ZL,low(font8x11 << 1)
; ldi ZH,high(font8x11 << 1)
; sts pending_font,ZL
; sts pending_font+1,ZH                             

.cseg
draw_symbol:
    lds  ZL, pending_font
    lds  ZH,pending_font+1
;далее по тексту
Go to the top of the page
 
+Quote Post
adc
сообщение Feb 2 2009, 13:32
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 409
Регистрация: 29-10-07
Пользователь №: 31 836



Цитата(serge71 @ Feb 2 2009, 16:25) *
А как быть с тремя одинаковыми меиками myFont ?

) дак в том то и дело что метка то одна! Это условное компилирование. При сборке пректа в контроллер прошьется только та часть которая определена.
А на счет разных шрифтов в программе.. то условное компилирование не причем. Сначало определяете нужный шрифт(загружаете метку )
Код
ldi ZL,low(...*2)
ldi ZH,high(...*2)

а потом вызываете свою пп без строк:
Код
ldi ZL,low(font*2)
    ldi ZH,high(font*2)


--------------------
Умный программист пишет тупым кодом гениальные вещи, а не наоборот...
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Feb 2 2009, 13:35
Сообщение #11


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(serge71 @ Feb 2 2009, 16:25) *
Это всё понятно, так прекрасно работает, но только шрифт один и тот же во всем проекте, а надо чтоб для отдельных строк использовался другой шрифт.


Это не условная компиляция sad.gif
Go to the top of the page
 
+Quote Post
serge71
сообщение Feb 2 2009, 13:40
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 18
Регистрация: 19-11-08
Из: Moscow region
Пользователь №: 41 766



Цитата(_Pasha @ Feb 2 2009, 16:28) *
Код
;пример
;далее по тексту

Такое решение было, спасибо

Цитата(adc @ Feb 2 2009, 16:32) *
) дак в том то и дело что метка то одна! Это условное компилирование. При сборке пректа в контроллер прошьется только та часть которая определена.
А на счет разных шрифтов в программе.. то условное компилирование не причем. Сначало определяете нужный шрифт(загружаете метку )

Я понял, но у меня компилятор ругается на все:
.if CURR_FONT==font8x11

Цитата(_Pasha @ Feb 2 2009, 16:35) *
Это не условная компиляция sad.gif

Ну может я не так сформулировал
Причина редактирования: Уменьшение размера цитирования.
Go to the top of the page
 
+Quote Post
adc
сообщение Feb 2 2009, 18:51
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 409
Регистрация: 29-10-07
Пользователь №: 31 836



Цитата(serge71 @ Feb 2 2009, 16:40) *
Я понял, но у меня компилятор ругается на все:
.if CURR_FONT==font8x11

а на что именно он ругается? Все должно работать если правильно написали!
может ему не нравится обозначение ..8х11.. попробуйте другое


--------------------
Умный программист пишет тупым кодом гениальные вещи, а не наоборот...
Go to the top of the page
 
+Quote Post
smac
сообщение Feb 2 2009, 19:29
Сообщение #14


Частый гость
**

Группа: Участник
Сообщений: 149
Регистрация: 2-06-08
Из: Москва
Пользователь №: 38 003



Цитата(serge71 @ Feb 2 2009, 16:40) *
Я понял, но у меня компилятор ругается на все:
.if CURR_FONT==font8x11


Ну может я не так сформулировал

Попробуйте так как Вам советовал adc, только с небольшими изменениями
Код
#define   font8x11 //  - выбираем font8x11, главное чтобы далее в программе не было метки с именем выбираемого шрифта
// естественно если нужен font13x16, то написать его имя

#IFDEF     font8x11    
myFont:
.db....
.db....
.MESSAGE "use font8x11"
#endif

#IFDEF     font13x16
myFont:
.db....
.db....
.MESSAGE "use font13x16"
#endif

Выше приведенное может использоваться с АВРовским ассемблером начиная с версии 2.0

Сообщение отредактировал smac - Feb 2 2009, 19:30
Go to the top of the page
 
+Quote Post
serge71
сообщение Feb 3 2009, 07:07
Сообщение #15


Участник
*

Группа: Участник
Сообщений: 18
Регистрация: 19-11-08
Из: Moscow region
Пользователь №: 41 766



Цитата(smac @ Feb 2 2009, 22:29) *
Попробуйте так как Вам советовал adc, только с небольшими изменениями

Спасибо вечером попробую
Причина редактирования: Нарушение п.3.4 Правил форума.
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th June 2025 - 22:12
Рейтинг@Mail.ru


Страница сгенерированна за 0.01523 секунд с 7
ELECTRONIX ©2004-2016