|
Условное компилирование |
|
|
|
Feb 2 2009, 12:11
|
Участник

Группа: Участник
Сообщений: 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 какие директивы компилятору указать чтоб при вызове подпрограммы подставлялась нужная таблица.
Причина редактирования: Уменьшение видимого размера цитаты исходника.
|
|
|
|
|
Feb 2 2009, 12:22
|
Участник

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

|
А мне не требуется менять шрифт во время выполнения программы, он будет постоянен для конкретного отображения(вызова draw_symbol), я что-то не могу разобратья с ifdef ifndif endif и т.п. Может как по другому можно сделать
|
|
|
|
|
Feb 2 2009, 12:59
|
Участник

Группа: Участник
Сообщений: 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" делаете? Спасибо, попробую, но может есть другие способы
|
|
|
|
|
Feb 2 2009, 13:04
|

Местный
  
Группа: Свой
Сообщений: 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:исправил "=" на "=="
Причина редактирования: Уменьшение видимого размера цитаты исходника.
--------------------
Умный программист пишет тупым кодом гениальные вещи, а не наоборот...
|
|
|
|
|
Feb 2 2009, 13:25
|
Участник

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

|
Это всё понятно, так прекрасно работает, но только шрифт один и тот же во всем проекте, а надо чтоб для отдельных строк использовался другой шрифт. Цитата(adc @ Feb 2 2009, 16:04)  вот так: А как быть с тремя одинаковыми меиками myFont ?
Причина редактирования: Нарушение п.3.4 Правил форума.
|
|
|
|
|
Feb 2 2009, 13:32
|

Местный
  
Группа: Свой
Сообщений: 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)
--------------------
Умный программист пишет тупым кодом гениальные вещи, а не наоборот...
|
|
|
|
|
Feb 2 2009, 13:40
|
Участник

Группа: Участник
Сообщений: 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)  Это не условная компиляция  Ну может я не так сформулировал
Причина редактирования: Уменьшение размера цитирования.
|
|
|
|
|
Feb 2 2009, 18:51
|

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

|
Цитата(serge71 @ Feb 2 2009, 16:40)  Я понял, но у меня компилятор ругается на все: .if CURR_FONT==font8x11 а на что именно он ругается? Все должно работать если правильно написали! может ему не нравится обозначение ..8х11.. попробуйте другое
--------------------
Умный программист пишет тупым кодом гениальные вещи, а не наоборот...
|
|
|
|
|
Feb 2 2009, 19:29
|
Частый гость
 
Группа: Участник
Сообщений: 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
|
|
|
|
|
Feb 3 2009, 07:07
|
Участник

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

|
Цитата(smac @ Feb 2 2009, 22:29)  Попробуйте так как Вам советовал adc, только с небольшими изменениями Спасибо вечером попробую
Причина редактирования: Нарушение п.3.4 Правил форума.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|