Proteus, KiCAD и другие ECAD Разработчик так или иначе сталкивается с системами автоматизированного проектирования. Данный раздел - по САПР. |
25.07.2007, 15:50
|
#1
|
Почётный гражданин KAZUS.RU
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
|
Макросы в MPLAB
Начал применять макросы при написании на ассамблере,хорошая вещь.Без передачи макросу аргументов получается,но как написать если передать макросу аргументы? Например нашел пример,интересует надо ли выделять под device, buffer, count регистры или макрос так примет числа?
Simple Example
;Define macro Read
Read macro device, buffer, count
movlw device
movwf ram_20
movlw buffer ; buffer address
movwf ram_21
movlw count ; byte count
call sys_21 ; subroutine call
endm
:
;Use macro Read
Read 0x0, 0x55, 0x05
|
|
|
|
25.07.2007, 16:38
|
#2
|
Почётный гражданин KAZUS.RU
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
|
А в примерах как сделано ?
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
|
|
|
|
25.07.2007, 17:19
|
#3
|
Почётный гражданин KAZUS.RU
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
|
Точно,чо то я ступил
|
|
|
|
26.07.2007, 17:00
|
#4
|
Почётный гражданин KAZUS.RU
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
|
Можно ли вызывать из одного макроса другой?
Пробовал вот так:
OFF MACRO
;ВЫКЛЮЧЕНИЕ ДИСПЛЕЯ
MOVLW 08H ; 08H=0000 01000
MOVWF PORTB
BSF E
NOP
BCF E
DELAY_50US ;ЗАДЕРЖКА 50 МКС
;ВКЛЮЧЕНИЕ
MOVLW 0EH ; 0EH=0000 1110
MOVWF PORTB
BSF E
NOP
BCF E
DELAY_50US ;ЗАДЕРЖКА 50 МКС
;ОЧИСТКА ДИСПЛЕЯ
MOVLW 01H
MOVWF PORTB
BSF E
NOP
BCF E
DELAY_3MS ;ЗАДЕРЖКА 3МС
ENDM
DELAY_50US MACRO
;delay = 50 machine cycles
movlw .16
movwf Reg_1
wr_1 decfsz Reg_1, F
goto wr_1
clrwdt
ENDM
Выдает ошибку такую Address label duplicated or different in second pass (wr_1),макрос задержки вызывается несколько раз в одном и том же макросе.
|
|
|
|
26.07.2007, 21:06
|
#5
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
Сергей, дело не в этом.Конечно, можно, но нужно ли ? Вызов макроса и вызов функции отличается тем, что макрос вставляется в код столько раз, сколько ты его вызываешь.
Макрос занимает 20 слов, ты его вызываешь 10 раз и занимаешь 200 слов кода. Функция занимает 20 слов, ты ее вызываешь 10 раз и занимаешь 10+2*10= 30 слов кода, что существенно экономней - я, конечно, утрирую немного, дав 2 слова на колл и ретурн.
В твоем случае возникает ошибка 2 меток, расположенных в разных местах и имеющих одинаковый адрес. Метка -то одна
wr_1, но поскольку макрос вставляется в тело программы 2 раза ... Какой у нее адрес ? Обойти это достаточно легко - замени
wr_1 decfsz Reg_1, F
goto wr_1
на
decfsz Reg_1,F
goto $-1 ; переход на предыдущий адрес
и прога откомпилится без ошибок.
Какое-то путаное объяснение...
|
|
|
|
27.07.2007, 01:53
|
#6
|
Почётный гражданин KAZUS.RU
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
|
Спасибо urry за объяснение ![Внимание!](images/smilies/icon_exclaim.gif) Я все понял,мало пользовался макросами и асемом вот и решил немного потренироватся,теперь буду знать.Значит макрос это просто подстановка програмного кода в основную программу.
|
|
|
|
27.07.2007, 10:54
|
#7
|
Временная регистрация
Регистрация: 28.02.2007
Сообщений: 90
Сказал спасибо: 6
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
|
Да еще можно метку как локальную для макроса сделать.
Тогда можно макрос сколько угодно раз в программе вызывать.
Например:
Код:
|
MACROSS macro TEMP
local nochk
tstfsz TEMP
bra nochk
....
nochk
......
endm |
|
|
|
|
27.07.2007, 15:59
|
#8
|
Почётный гражданин KAZUS.RU
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
|
Бука не совсем понятно как это сделать,можно но ли с коментариями?
При симуляции MPLAB SIM у меня программа не заходит в макросы,где у меня ошибка и он просто зацикливается при вызове макроса.Можно ли настроить так что входил в макрос по клавише F7,пошагово,а то выполняет макрос как одну команду
|
|
|
|
28.07.2007, 01:50
|
#9
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
Вот учишь, учишь ... и одни двойки.. Забудь о макросах.. Нема их... фсе.. И вообще, ты же на си переходил.. Я сейчас на асме и под пистолетом писать не буду.
|
|
|
|
28.07.2007, 02:50
|
#10
|
Почётный гражданин KAZUS.RU
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
|
Сообщение от urry
|
Вот учишь, учишь ... и одни двойки.. Забудь о макросах.. Нема их... фсе.. И вообще, ты же на си переходил.. Я сейчас на асме и под пистолетом писать не буду.
|
я так для практики(разобрался уже в чем дело),сначало хотел на асеме написать потом на си,сейчас сяду писать отладочный модуль на жки подключая в шину i2c на си.Пускай асем труден и много времени надо,но зато он развивает мышление програмировая.Ведь попробуй умножить на асеме два числа(это надо хорошо подумать и понять),а на си написал умножить и все дела.Да я согласен если ты там на заказ делаеш и время мало дают,конкуренция у вас то на си лучше,но я то для себя пока что делаю ради интереса.Но все таки перейду на си полностью,еще немного со структурами разбесь.(что то похоже на класс в языке С++)
urry если тебе задавать вопросы через электроную почту ответиш?
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
MPLAB
|
488 |
Proteus, KiCAD и другие ECAD |
6 |
31.10.2007 16:59 |
MPLAB ???
|
retas |
Отвлекитесь, эмбеддеры! |
0 |
04.10.2007 19:54 |
mplab
|
EVGENIY1962 |
Proteus, KiCAD и другие ECAD |
18 |
10.07.2007 18:48 |
mplab
|
EVGENIY1962 |
Proteus, KiCAD и другие ECAD |
29 |
21.06.2007 05:32 |
AVR STUDIO, макросы
|
Dozer |
Микроконтроллеры, АЦП, память и т.д |
2 |
25.01.2006 21:20 |
Часовой пояс GMT +4, время: 03:13.
|
|